/* (non-Javadoc) * @see com.epochx.core.scorer.SemanticScorer#doScore(com.epochx.representation.CandidateProgram, com.epochx.representation.CandidateProgram) */ public double doScore(GPCandidateProgram program1, GPCandidateProgram program2) { double score; // TODO figure out a better way of doing this if (super.getSemanticModule() instanceof BooleanSemanticModule) { ((BooleanSemanticModule) super.getSemanticModule()).start(); } BooleanRepresentation program1Representation = (BooleanRepresentation) getSemanticModule().codeToBehaviour(program1); BooleanRepresentation program2Representation = (BooleanRepresentation) getSemanticModule().codeToBehaviour(program2); BDD rep1 = program1Representation.getBDD(); BDD rep2 = program2Representation.getBDD(); BDD diffRep1 = rep1.and(rep2.not()); BDD diffRep2 = rep2.and(rep1.not()); BDD finalDiff = diffRep1.or(diffRep2); score = finalDiff.satCount() * 100; // TODO figure out a better way of doing this if (super.getSemanticModule() instanceof BooleanSemanticModule) { ((BooleanSemanticModule) super.getSemanticModule()).stop(); } return score; }
@Override public BDD visitNot(BooleanFormula pOperand) { BDD operand = convert(pOperand); BDD result = operand.not(); operand.free(); return result; }