package aima.test.core.performance.logic.fol.inference; import java.util.Set; import org.junit.Test; import aima.core.logic.fol.inference.FOLTFMResolution; import aima.core.logic.fol.inference.InferenceResult; import aima.core.logic.fol.inference.trace.FOLTFMResolutionTracer; import aima.core.logic.fol.kb.data.Clause; import aima.test.core.unit.logic.fol.CommonFOLInferenceProcedureTests; /** * @author Ciaran O'Reilly * */ public class FOLTFMResolutionPerformance extends CommonFOLInferenceProcedureTests { @Test public void testFullFOLKBLovesAnimalQueryKillsJackTunaFalse() { // This query will not return using TFM as keep expanding // clauses through resolution for this KB. FOLTFMResolution ip = new FOLTFMResolution(1000 * 1000); ip.setTracer(new RegressionFOLTFMResolutionTracer()); testFullFOLKBLovesAnimalQueryKillsJackTunaFalse(ip, true); } private class RegressionFOLTFMResolutionTracer implements FOLTFMResolutionTracer { private int outerCnt = 1; private int noPairsConsidered = 0; private int noPairsResolved = 0; private int maxClauseSizeSeen = 0; public void stepStartWhile(Set<Clause> clauses, int totalNoClauses, int totalNoNewCandidateClauses) { outerCnt = 1; System.out.println(""); System.out.println("Total # clauses=" + totalNoClauses + ", total # new candidate clauses=" + totalNoNewCandidateClauses); } public void stepOuterFor(Clause i) { System.out.print(" " + outerCnt); if (outerCnt % 50 == 0) { System.out.println(""); } outerCnt++; } public void stepInnerFor(Clause i, Clause j) { noPairsConsidered++; } public void stepResolved(Clause iFactor, Clause jFactor, Set<Clause> resolvents) { noPairsResolved++; Clause egLargestClause = null; for (Clause c : resolvents) { if (c.getNumberLiterals() > maxClauseSizeSeen) { egLargestClause = c; maxClauseSizeSeen = c.getNumberLiterals(); } } if (null != egLargestClause) { System.out.println(""); System.out.println("E.g. largest clause so far=" + maxClauseSizeSeen + ", " + egLargestClause); System.out.println("i=" + iFactor); System.out.println("j=" + jFactor); } } public void stepFinished(Set<Clause> clauses, InferenceResult result) { System.out.println("Total # Pairs of Clauses Considered:" + noPairsConsidered); System.out.println("Total # Pairs of Clauses Resolved :" + noPairsResolved); noPairsConsidered = 0; noPairsResolved = 0; maxClauseSizeSeen = 0; } } }