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

Source Code of aima.test.core.unit.search.informed.AStarSearchTest

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

import java.util.List;

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

import aima.core.agent.Action;
import aima.core.environment.eightpuzzle.EightPuzzleBoard;
import aima.core.environment.eightpuzzle.EightPuzzleFunctionFactory;
import aima.core.environment.eightpuzzle.EightPuzzleGoalTest;
import aima.core.environment.eightpuzzle.ManhattanHeuristicFunction;
import aima.core.environment.map.ExtendableMap;
import aima.core.environment.map.Map;
import aima.core.environment.map.MapFunctionFactory;
import aima.core.environment.map.MapStepCostFunction;
import aima.core.environment.map.SimplifiedRoadMapOfPartOfRomania;
import aima.core.environment.map.StraightLineDistanceHeuristicFunction;
import aima.core.search.framework.DefaultGoalTest;
import aima.core.search.framework.GraphSearch;
import aima.core.search.framework.HeuristicFunction;
import aima.core.search.framework.Problem;
import aima.core.search.framework.QueueSearch;
import aima.core.search.framework.Search;
import aima.core.search.framework.SearchAgent;
import aima.core.search.framework.TreeSearch;
import aima.core.search.informed.AStarSearch;

public class AStarSearchTest {

  @Test
  public void testAStarSearch() {
    // added to narrow down bug report filed by L.N.Sudarshan of
    // Thoughtworks and Xin Lu of UCI
    try {
      // EightPuzzleBoard extreme = new EightPuzzleBoard(new int[]
      // {2,0,5,6,4,8,3,7,1});
      // EightPuzzleBoard extreme = new EightPuzzleBoard(new int[]
      // {0,8,7,6,5,4,3,2,1});
      EightPuzzleBoard board = new EightPuzzleBoard(new int[] { 7, 1, 8,
          0, 4, 6, 2, 3, 5 });

      Problem problem = new Problem(board,
          EightPuzzleFunctionFactory.getActionsFunction(),
          EightPuzzleFunctionFactory.getResultFunction(),
          new EightPuzzleGoalTest());
      Search search = new AStarSearch(new GraphSearch(),
          new ManhattanHeuristicFunction());
      SearchAgent agent = new SearchAgent(problem, search);
      Assert.assertEquals(23, agent.getActions().size());
      Assert.assertEquals("926",
          agent.getInstrumentation().getProperty("nodesExpanded"));
      Assert.assertEquals("534",
          agent.getInstrumentation().getProperty("queueSize"));
      Assert.assertEquals("535",
          agent.getInstrumentation().getProperty("maxQueueSize"));
    } catch (Exception e) {
      e.printStackTrace();
      Assert.fail("Exception thrown");
    }
  }

  @Test
  public void testAIMA3eFigure3_15() throws Exception {
    Map romaniaMap = new SimplifiedRoadMapOfPartOfRomania();
    Problem problem = new Problem(SimplifiedRoadMapOfPartOfRomania.SIBIU,
        MapFunctionFactory.getActionsFunction(romaniaMap),
        MapFunctionFactory.getResultFunction(), new DefaultGoalTest(
            SimplifiedRoadMapOfPartOfRomania.BUCHAREST),
        new MapStepCostFunction(romaniaMap));

    Search search = new AStarSearch(new GraphSearch(),
        new StraightLineDistanceHeuristicFunction(
            SimplifiedRoadMapOfPartOfRomania.BUCHAREST, romaniaMap));
    SearchAgent agent = new SearchAgent(problem, search);

    List<Action> actions = agent.getActions();

    Assert.assertEquals(
        "[Action[name==moveTo, location==RimnicuVilcea], Action[name==moveTo, location==Pitesti], Action[name==moveTo, location==Bucharest]]",
        actions.toString());
    Assert.assertEquals("278.0",
        search.getMetrics().get(QueueSearch.METRIC_PATH_COST));
  }

  @Test
  public void testAIMA3eFigure3_24() throws Exception {
    Map romaniaMap = new SimplifiedRoadMapOfPartOfRomania();
    Problem problem = new Problem(SimplifiedRoadMapOfPartOfRomania.ARAD,
        MapFunctionFactory.getActionsFunction(romaniaMap),
        MapFunctionFactory.getResultFunction(), new DefaultGoalTest(
            SimplifiedRoadMapOfPartOfRomania.BUCHAREST),
        new MapStepCostFunction(romaniaMap));

    Search search = new AStarSearch(new TreeSearch(),
        new StraightLineDistanceHeuristicFunction(
            SimplifiedRoadMapOfPartOfRomania.BUCHAREST, romaniaMap));
    SearchAgent agent = new SearchAgent(problem, search);
    Assert.assertEquals(
        "[Action[name==moveTo, location==Sibiu], Action[name==moveTo, location==RimnicuVilcea], Action[name==moveTo, location==Pitesti], Action[name==moveTo, location==Bucharest]]",
        agent.getActions().toString());
    Assert.assertEquals(4, agent.getActions().size());
    Assert.assertEquals("5",
        agent.getInstrumentation().getProperty("nodesExpanded"));
    Assert.assertEquals("10",
        agent.getInstrumentation().getProperty("queueSize"));
    Assert.assertEquals("11",
        agent.getInstrumentation().getProperty("maxQueueSize"));
  }

  @Test
  public void testAIMA3eFigure3_24_using_GraphSearch() throws Exception {
    Map romaniaMap = new SimplifiedRoadMapOfPartOfRomania();
    Problem problem = new Problem(SimplifiedRoadMapOfPartOfRomania.ARAD,
        MapFunctionFactory.getActionsFunction(romaniaMap),
        MapFunctionFactory.getResultFunction(), new DefaultGoalTest(
            SimplifiedRoadMapOfPartOfRomania.BUCHAREST),
        new MapStepCostFunction(romaniaMap));

    Search search = new AStarSearch(new GraphSearch(),
        new StraightLineDistanceHeuristicFunction(
            SimplifiedRoadMapOfPartOfRomania.BUCHAREST, romaniaMap));
    SearchAgent agent = new SearchAgent(problem, search);
    Assert.assertEquals(
        "[Action[name==moveTo, location==Sibiu], Action[name==moveTo, location==RimnicuVilcea], Action[name==moveTo, location==Pitesti], Action[name==moveTo, location==Bucharest]]",
        agent.getActions().toString());
    Assert.assertEquals(4, agent.getActions().size());
    Assert.assertEquals("5",
        agent.getInstrumentation().getProperty("nodesExpanded"));
    Assert.assertEquals("4",
        agent.getInstrumentation().getProperty("queueSize"));
    Assert.assertEquals("6",
        agent.getInstrumentation().getProperty("maxQueueSize"));
  }

  @Test
  public void testCheckFrontierPathCost() throws Exception {
    ExtendableMap map = new ExtendableMap();
    map.addBidirectionalLink("start", "b", 2.5);
    map.addBidirectionalLink("start", "c", 1.0);
    map.addBidirectionalLink("b", "d", 2.0);
    map.addBidirectionalLink("c", "d", 4.0);
    map.addBidirectionalLink("c", "e", 1.0);
    map.addBidirectionalLink("d", "goal", 1.0);
    map.addBidirectionalLink("e", "goal", 5.0);
    Problem problem = new Problem("start",
        MapFunctionFactory.getActionsFunction(map),
        MapFunctionFactory.getResultFunction(), new DefaultGoalTest(
            "goal"), new MapStepCostFunction(map));

    HeuristicFunction hf = new HeuristicFunction() {
      public double h(Object state) {
        return 0; // Don't have one for this test
      }
    };
    Search search = new AStarSearch(new GraphSearch(), hf);
    SearchAgent agent = new SearchAgent(problem, search);

    List<Action> actions = agent.getActions();

    Assert.assertEquals(
        "[Action[name==moveTo, location==b], Action[name==moveTo, location==d], Action[name==moveTo, location==goal]]",
        actions.toString());
    Assert.assertEquals("5.5",
        search.getMetrics().get(QueueSearch.METRIC_PATH_COST));
  }
}
TOP

Related Classes of aima.test.core.unit.search.informed.AStarSearchTest

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.