package splar.plugins.reasoners.sat.sat4j; import org.sat4j.core.VecInt; import org.sat4j.specs.ISolver; import org.sat4j.specs.IVecInt; import splar.core.constraints.CNFClause; import splar.core.constraints.CNFLiteral; import splar.core.constraints.PropositionalFormula; import splar.core.fm.FeatureModel; public class FMReasoningWithSAT extends FTReasoningWithSAT { public FMReasoningWithSAT(String solverName, FeatureModel featureModel, int timeout) { super(solverName, featureModel, timeout); } protected void addSolverClauses(ISolver solver) throws Exception { super.addSolverClauses(solver); // add extra constraints for( PropositionalFormula formula : featureModel.getConstraints() ) { for( CNFClause clause : formula.toCNFClauses() ) { IVecInt vectInt = new VecInt(clause.countLiterals()); for( CNFLiteral literal : clause.getLiterals() ) { int signal = literal.isPositive() ? 1 : -1; int varID = getVariableIndex(literal.getVariable().getID()); vectInt.push(signal * varID); } solver.addClause(vectInt); // System.out.println("EC: " + vectInt); } } } }