Package aima.test.core.unit.search.informed

Source Code of aima.test.core.unit.search.informed.RecursiveBestFirstSearchTest$TestEnvironmentView

package aima.test.core.unit.search.informed;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import aima.core.agent.Action;
import aima.core.agent.Agent;
import aima.core.agent.EnvironmentState;
import aima.core.agent.EnvironmentView;
import aima.core.environment.map.Map;
import aima.core.environment.map.MapAgent;
import aima.core.environment.map.MapEnvironment;
import aima.core.environment.map.SimplifiedRoadMapOfPartOfRomania;
import aima.core.search.framework.HeuristicFunction;
import aima.core.search.informed.AStarEvaluationFunction;
import aima.core.search.informed.RecursiveBestFirstSearch;
import aima.core.util.datastructure.Point2D;

/**
* @author Ciaran O'Reilly
*
*/
public class RecursiveBestFirstSearchTest {

  StringBuffer envChanges;

  Map aMap;

  RecursiveBestFirstSearch recursiveBestFirstSearch;

  @Before
  public void setUp() {
    envChanges = new StringBuffer();

    aMap = new SimplifiedRoadMapOfPartOfRomania();

    HeuristicFunction heuristicFunction = new HeuristicFunction() {
      public double h(Object state) {
        Point2D pt1 = aMap.getPosition((String) state);
        Point2D pt2 = aMap
            .getPosition(SimplifiedRoadMapOfPartOfRomania.BUCHAREST);
        return pt1.distance(pt2);
      }
    };

    recursiveBestFirstSearch = new RecursiveBestFirstSearch(
        new AStarEvaluationFunction(heuristicFunction));
  }

  @Test
  public void testStartingAtGoal() {
    MapEnvironment me = new MapEnvironment(aMap);
    MapAgent ma = new MapAgent(me.getMap(), me, recursiveBestFirstSearch,
        new String[] { SimplifiedRoadMapOfPartOfRomania.BUCHAREST });

    me.addAgent(ma, SimplifiedRoadMapOfPartOfRomania.BUCHAREST);
    me.addEnvironmentView(new TestEnvironmentView());
    me.stepUntilDone();

    Assert.assertEquals(
        "CurrentLocation=In(Bucharest), Goal=In(Bucharest):Action[name==NoOp]:METRIC[pathCost]=0.0:METRIC[maxRecursiveDepth]=0:METRIC[nodesExpanded]=0:Action[name==NoOp]:",
        envChanges.toString());
  }

  @Test
  public void testAIMA3eFigure3_27() {
    MapEnvironment me = new MapEnvironment(aMap);
    MapAgent ma = new MapAgent(me.getMap(), me, recursiveBestFirstSearch,
        new String[] { SimplifiedRoadMapOfPartOfRomania.BUCHAREST });

    me.addAgent(ma, SimplifiedRoadMapOfPartOfRomania.ARAD);
    me.addEnvironmentView(new TestEnvironmentView());
    me.stepUntilDone();

    Assert.assertEquals(
        "CurrentLocation=In(Arad), Goal=In(Bucharest):Action[name==moveTo, location==Sibiu]:Action[name==moveTo, location==RimnicuVilcea]:Action[name==moveTo, location==Pitesti]:Action[name==moveTo, location==Bucharest]:METRIC[pathCost]=418.0:METRIC[maxRecursiveDepth]=4:METRIC[nodesExpanded]=6:Action[name==NoOp]:",
        envChanges.toString());
  }

  private class TestEnvironmentView implements EnvironmentView {
    public void notify(String msg) {
      envChanges.append(msg).append(":");
    }

    public void agentAdded(Agent agent, EnvironmentState state) {
      // Nothing.
    }

    public void agentActed(Agent agent, Action action,
        EnvironmentState state) {
      envChanges.append(action).append(":");
    }
  }
}
TOP

Related Classes of aima.test.core.unit.search.informed.RecursiveBestFirstSearchTest$TestEnvironmentView

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.