Package aima.test.core.unit.search.framework

Source Code of aima.test.core.unit.search.framework.SolutionCheckerTest$DualMapGoalTest

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

import java.util.HashSet;
import java.util.List;
import java.util.Set;

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

import aima.core.agent.Action;
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.search.framework.GraphSearch;
import aima.core.search.framework.Problem;
import aima.core.search.framework.Search;
import aima.core.search.framework.SearchAgent;
import aima.core.search.framework.SolutionChecker;
import aima.core.search.uninformed.BreadthFirstSearch;

public class SolutionCheckerTest {

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

    Search search = new BreadthFirstSearch(new GraphSearch());

    SearchAgent agent = new SearchAgent(problem, search);
    Assert.assertEquals(
        "[Action[name==moveTo, location==Sibiu], Action[name==moveTo, location==Fagaras], Action[name==moveTo, location==Bucharest], Action[name==moveTo, location==Urziceni], Action[name==moveTo, location==Hirsova]]",
        agent.getActions().toString());
    Assert.assertEquals(5, agent.getActions().size());
    Assert.assertEquals("14",
        agent.getInstrumentation().getProperty("nodesExpanded"));
    Assert.assertEquals("1",
        agent.getInstrumentation().getProperty("queueSize"));
    Assert.assertEquals("5",
        agent.getInstrumentation().getProperty("maxQueueSize"));
  }

  class DualMapGoalTest implements SolutionChecker {
    public String goalState1 = null;
    public String goalState2 = null;

    private Set<String> goals = new HashSet<String>();

    public DualMapGoalTest(String goalState1, String goalState2) {
      this.goalState1 = goalState1;
      this.goalState2 = goalState2;
      goals.add(goalState1);
      goals.add(goalState2);
    }

    public boolean isGoalState(Object state) {
      return goalState1.equals(state) || goalState2.equals(state);
    }

    public boolean isAcceptableSolution(List<Action> actions, Object goal) {
      goals.remove(goal);
      return goals.isEmpty();
    }
  }
}
TOP

Related Classes of aima.test.core.unit.search.framework.SolutionCheckerTest$DualMapGoalTest

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.