Package aima.core.learning.knowledge

Source Code of aima.core.learning.knowledge.FOLExample

package aima.core.learning.knowledge;

import java.util.ArrayList;
import java.util.List;

import aima.core.learning.framework.Example;
import aima.core.logic.fol.Connectors;
import aima.core.logic.fol.parsing.ast.ConnectedSentence;
import aima.core.logic.fol.parsing.ast.Constant;
import aima.core.logic.fol.parsing.ast.NotSentence;
import aima.core.logic.fol.parsing.ast.Predicate;
import aima.core.logic.fol.parsing.ast.Sentence;
import aima.core.logic.fol.parsing.ast.Term;

/**
* @author Ciaran O'Reilly
*
*/
public class FOLExample {
  private FOLDataSetDomain folDSDomain = null;
  private Example example = null;
  private int egNo = 0;
  //
  private Constant ithExampleConstant = null;
  private Sentence classification = null;
  private Sentence description = null;

  //
  // PUBLIC METHODS
  //
  public FOLExample(FOLDataSetDomain folDSDomain, Example example, int egNo) {
    this.folDSDomain = folDSDomain;
    this.example = example;
    this.egNo = egNo;
    constructFOLEg();
  }

  public int getExampleNumber() {
    return egNo;
  }

  public Sentence getClassification() {
    return classification;
  }

  public Sentence getDescription() {
    return description;
  }

  @Override
  public String toString() {
    return classification.toString() + " " + Connectors.AND + " "
        + description.toString();
  }

  //
  // PRIVATE METHODS
  //
  private void constructFOLEg() {
    ithExampleConstant = new Constant(folDSDomain.getExampleConstant(egNo));

    List<Term> terms = new ArrayList<Term>();
    terms.add(ithExampleConstant);
    // Create the classification sentence
    classification = new Predicate(folDSDomain.getGoalPredicateName(),
        terms);
    if (!example.getAttributeValueAsString(
        folDSDomain.getDataSetTargetName()).equals(
        folDSDomain.getTrueGoalValue())) {
      // if not true then needs to be a Not sentence
      classification = new NotSentence(classification);
    }

    // Create the description sentence
    List<Sentence> descParts = new ArrayList<Sentence>();
    for (String dname : folDSDomain.getDescriptionDataSetNames()) {
      String foldDName = folDSDomain.getFOLName(dname);
      terms = new ArrayList<Term>();
      terms.add(ithExampleConstant);
      // If multivalued becomes a two place predicate
      // e.g: Patrons(X1, Some)
      // otherwise: Hungry(X1) or ~ Hungry(X1)
      // see pg 769 of AIMA
      Sentence part = null;
      if (folDSDomain.isMultivalued(dname)) {
        terms.add(new Constant(folDSDomain.getFOLName(example
            .getAttributeValueAsString(dname))));
        part = new Predicate(foldDName, terms);
      } else {
        part = new Predicate(foldDName, terms);
        // Need to determine if false
        if (!folDSDomain.getTrueGoalValue().equals(
            example.getAttributeValueAsString(dname))) {
          part = new NotSentence(part);
        }
      }
      descParts.add(part);
    }
    if (descParts.size() == 1) {
      description = descParts.get(0);
    } else if (descParts.size() > 1) {
      description = new ConnectedSentence(Connectors.AND,
          descParts.get(0), descParts.get(1));
      for (int i = 2; i < descParts.size(); i++) {
        description = new ConnectedSentence(Connectors.AND,
            description, descParts.get(i));
      }
    }
  }
}
TOP

Related Classes of aima.core.learning.knowledge.FOLExample

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.