Package aima.test.core.performance.logic.fol.inference

Source Code of aima.test.core.performance.logic.fol.inference.FOLTFMResolutionPerformance

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;
    }
  }
}
TOP

Related Classes of aima.test.core.performance.logic.fol.inference.FOLTFMResolutionPerformance

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.