Search in sources :

Example 1 with Pair

use of org.logicng.util.Pair in project LogicNG by logic-ng.

the class CCEncoder method encodeIncremental.

/**
 * Encodes an incremental cardinality constraint and returns its encoding.
 * @param cc the cardinality constraint
 * @return the encoding of the constraint and the incremental data
 */
public Pair<List<Formula>, CCIncrementalData> encodeIncremental(final CardinalityConstraint cc) {
    final EncodingResult result = EncodingResult.resultForFormula(this.f);
    final CCIncrementalData incData = this.encodeIncremental(cc, result);
    return new Pair<>(Collections.unmodifiableList(result.result()), incData);
}
Also used : EncodingResult(org.logicng.datastructures.EncodingResult) Pair(org.logicng.util.Pair)

Example 2 with Pair

use of org.logicng.util.Pair in project LogicNG by logic-ng.

the class FactorOutSimplifier method computeMaxOccurringSubformula.

private static Formula computeMaxOccurringSubformula(final NAryOperator formula) {
    final Map<Formula, Integer> formulaCounts = new HashMap<>();
    for (final Formula operand : formula) {
        if (operand.type() == FType.LITERAL) {
            formulaCounts.merge(operand, 1, Integer::sum);
        } else if (operand.type() == FType.AND || operand.type() == FType.OR) {
            for (final Formula subOperand : operand) {
                formulaCounts.merge(subOperand, 1, Integer::sum);
            }
        }
    }
    final Pair<Formula, Integer> max = formulaCounts.entrySet().stream().max(Comparator.comparingInt(Map.Entry::getValue)).map(e -> new Pair<>(e.getKey(), e.getValue())).orElse(new Pair<>(null, 0));
    return max.second() < 2 ? null : max.first();
}
Also used : FType(org.logicng.formulas.FType) NAryOperator(org.logicng.formulas.NAryOperator) Formula(org.logicng.formulas.Formula) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) List(java.util.List) FormulaFactory(org.logicng.formulas.FormulaFactory) Map(java.util.Map) Pair(org.logicng.util.Pair) FormulaTransformation(org.logicng.formulas.FormulaTransformation) FType.dual(org.logicng.formulas.FType.dual) Comparator(java.util.Comparator) Not(org.logicng.formulas.Not) Formula(org.logicng.formulas.Formula) HashMap(java.util.HashMap) HashMap(java.util.HashMap) Map(java.util.Map) Pair(org.logicng.util.Pair)

Example 3 with Pair

use of org.logicng.util.Pair in project LogicNG by logic-ng.

the class ModelTest method solvers.

public static Collection<Object[]> solvers() {
    final MiniSatConfig configNoPGAux = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).auxiliaryVariablesInModels(true).build();
    final MiniSatConfig configNoPGNoAux = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).auxiliaryVariablesInModels(false).build();
    final MiniSatConfig configPGAux = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).auxiliaryVariablesInModels(true).build();
    final MiniSatConfig configPGNoAux = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).auxiliaryVariablesInModels(false).build();
    final List<Pair<MiniSatConfig, String>> configs = Arrays.asList(new Pair<>(configNoPGAux, "FF CNF, +AUX"), new Pair<>(configNoPGNoAux, "FF CNF, -AUX"), new Pair<>(configPGAux, "PG CNF, +AUX"), new Pair<>(configPGNoAux, "PG CNF, -AUX"));
    final List<Object[]> solvers = new ArrayList<>();
    for (final Pair<MiniSatConfig, String> config : configs) {
        solvers.add(new Object[] { MiniSat.miniSat(f, config.first()), "MiniSat (" + config.second() + ")" });
        solvers.add(new Object[] { MiniSat.miniCard(f, config.first()), "MiniCard (" + config.second() + ")" });
        solvers.add(new Object[] { MiniSat.glucose(f, config.first(), GlucoseConfig.builder().build()), "Glucose (" + config.second() + ")" });
    }
    return solvers;
}
Also used : MiniSatConfig(org.logicng.solvers.sat.MiniSatConfig) ArrayList(java.util.ArrayList) Pair(org.logicng.util.Pair)

Example 4 with Pair

use of org.logicng.util.Pair in project LogicNG by logic-ng.

the class BackboneFunctionTest method solvers.

public static Collection<Object[]> solvers() {
    final MiniSatConfig configNoPG1 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).bbCheckForRotatableLiterals(false).bbCheckForComplementModelLiterals(false).bbInitialUBCheckForRotatableLiterals(false).build();
    final MiniSatConfig configNoPG2 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).bbCheckForRotatableLiterals(true).bbCheckForComplementModelLiterals(false).bbInitialUBCheckForRotatableLiterals(false).build();
    final MiniSatConfig configNoPG3 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).bbCheckForRotatableLiterals(false).bbCheckForComplementModelLiterals(true).bbInitialUBCheckForRotatableLiterals(false).build();
    final MiniSatConfig configNoPG4 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).bbCheckForRotatableLiterals(false).bbCheckForComplementModelLiterals(false).bbInitialUBCheckForRotatableLiterals(true).build();
    final MiniSatConfig configNoPG5 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.FACTORY_CNF).bbCheckForRotatableLiterals(true).bbCheckForComplementModelLiterals(true).bbInitialUBCheckForRotatableLiterals(true).build();
    final MiniSatConfig configPG1 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).bbCheckForRotatableLiterals(false).bbCheckForComplementModelLiterals(false).bbInitialUBCheckForRotatableLiterals(false).build();
    final MiniSatConfig configPG2 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).bbCheckForRotatableLiterals(true).bbCheckForComplementModelLiterals(false).bbInitialUBCheckForRotatableLiterals(false).build();
    final MiniSatConfig configPG3 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).bbCheckForRotatableLiterals(false).bbCheckForComplementModelLiterals(true).bbInitialUBCheckForRotatableLiterals(false).build();
    final MiniSatConfig configPG4 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).bbCheckForRotatableLiterals(false).bbCheckForComplementModelLiterals(false).bbInitialUBCheckForRotatableLiterals(true).build();
    final MiniSatConfig configPG5 = MiniSatConfig.builder().cnfMethod(MiniSatConfig.CNFMethod.PG_ON_SOLVER).bbCheckForRotatableLiterals(true).bbCheckForComplementModelLiterals(true).bbInitialUBCheckForRotatableLiterals(true).build();
    final List<Pair<MiniSatConfig, String>> configs = Arrays.asList(new Pair<>(configNoPG1, "FF CNF -ROT -COMP -UB"), new Pair<>(configNoPG2, "FF CNF +ROT -COMP -UB"), new Pair<>(configNoPG3, "FF CNF -ROT +COMP -UB"), new Pair<>(configNoPG4, "FF CNF -ROT -COMP +UB"), new Pair<>(configNoPG5, "FF CNF +ROT +COMP +UB"), new Pair<>(configPG1, "PG CNF -ROT -COMP -UB"), new Pair<>(configPG2, "PG CNF +ROT -COMP -UB"), new Pair<>(configPG3, "PG CNF -ROT +COMP -UB"), new Pair<>(configPG4, "PG CNF -ROT -COMP +UB"), new Pair<>(configPG5, "PG CNF +ROT +COMP +UB"));
    final List<Object[]> solvers = new ArrayList<>();
    for (final Pair<MiniSatConfig, String> config : configs) {
        solvers.add(new Object[] { MiniSat.miniSat(f, config.first()), "MiniSat (" + config.second() + ")" });
        solvers.add(new Object[] { MiniSat.miniCard(f, config.first()), "MiniCard (" + config.second() + ")" });
        solvers.add(new Object[] { MiniSat.glucose(f, config.first(), GlucoseConfig.builder().build()), "Glucose (" + config.second() + ")" });
    }
    return solvers;
}
Also used : MiniSatConfig(org.logicng.solvers.sat.MiniSatConfig) ArrayList(java.util.ArrayList) Pair(org.logicng.util.Pair)

Example 5 with Pair

use of org.logicng.util.Pair in project LogicNG by logic-ng.

the class PrimeCompilerTest method testTimeoutHandlerLarge.

@Test
public void testTimeoutHandlerLarge() throws ParserException, IOException {
    final List<Pair<PrimeCompiler, PrimeResult.CoverageType>> compilers = Arrays.asList(new Pair<>(PrimeCompiler.getWithMaximization(), PrimeResult.CoverageType.IMPLICANTS_COMPLETE), new Pair<>(PrimeCompiler.getWithMaximization(), PrimeResult.CoverageType.IMPLICATES_COMPLETE), new Pair<>(PrimeCompiler.getWithMinimization(), PrimeResult.CoverageType.IMPLICANTS_COMPLETE), new Pair<>(PrimeCompiler.getWithMinimization(), PrimeResult.CoverageType.IMPLICATES_COMPLETE));
    for (final Pair<PrimeCompiler, PrimeResult.CoverageType> compiler : compilers) {
        final List<TimeoutOptimizationHandler> handlers = Arrays.asList(new TimeoutOptimizationHandler(1L, TimeoutHandler.TimerType.SINGLE_TIMEOUT), new TimeoutOptimizationHandler(1L, TimeoutHandler.TimerType.RESTARTING_TIMEOUT), new TimeoutOptimizationHandler(System.currentTimeMillis() + 1L, TimeoutHandler.TimerType.FIXED_END));
        final Formula formula = FormulaReader.readPseudoBooleanFormula("src/test/resources/formulas/large_formula.txt", this.f);
        for (final TimeoutOptimizationHandler handler : handlers) {
            testHandler(handler, formula, compiler.first(), compiler.second(), true);
        }
    }
}
Also used : TimeoutOptimizationHandler(org.logicng.handlers.TimeoutOptimizationHandler) Formula(org.logicng.formulas.Formula) Pair(org.logicng.util.Pair) Test(org.junit.jupiter.api.Test)

Aggregations

Pair (org.logicng.util.Pair)12 ArrayList (java.util.ArrayList)5 Formula (org.logicng.formulas.Formula)5 Test (org.junit.jupiter.api.Test)3 TimeoutOptimizationHandler (org.logicng.handlers.TimeoutOptimizationHandler)3 LNGIntVector (org.logicng.collections.LNGIntVector)2 FormulaFactory (org.logicng.formulas.FormulaFactory)2 MiniSatConfig (org.logicng.solvers.sat.MiniSatConfig)2 BufferedWriter (java.io.BufferedWriter)1 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 OutputStreamWriter (java.io.OutputStreamWriter)1 Comparator (java.util.Comparator)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 LinkedHashSet (java.util.LinkedHashSet)1 List (java.util.List)1 Map (java.util.Map)1 SortedSet (java.util.SortedSet)1 TreeSet (java.util.TreeSet)1