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);
}
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();
}
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;
}
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;
}
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);
}
}
}
Aggregations