package aima.gui.demo.search;
import aima.core.environment.vacuum.FullyObservableVacuumEnvironmentPerceptToStateFunction;
import aima.core.environment.vacuum.NondeterministicVacuumAgent;
import aima.core.environment.vacuum.NondeterministicVacuumEnvironment;
import aima.core.environment.vacuum.VacuumEnvironment;
import aima.core.environment.vacuum.VacuumEnvironmentState;
import aima.core.environment.vacuum.VacuumEnvironmentViewActionTracker;
import aima.core.environment.vacuum.VacuumWorldActions;
import aima.core.environment.vacuum.VacuumWorldGoalTest;
import aima.core.environment.vacuum.VacuumWorldResults;
import aima.core.search.framework.DefaultStepCostFunction;
import aima.core.search.nondeterministic.NondeterministicProblem;
/**
* Applies AND-OR-GRAPH-SEARCH to a non-deterministic version of the Vacuum World.
*
*
* @author Andrew Brown
*/
public class NondeterministicVacuumEnvironmentDemo {
public static void main(String[] args) {
System.out.println("NON-DETERMINISTIC-VACUUM-ENVIRONMENT DEMO");
System.out.println("");
startAndOrSearch();
}
private static void startAndOrSearch() {
System.out.println("AND-OR-GRAPH-SEARCH");
NondeterministicVacuumAgent agent = new NondeterministicVacuumAgent(
new FullyObservableVacuumEnvironmentPerceptToStateFunction());
// create state: both rooms are dirty and the vacuum is in room A
VacuumEnvironmentState state = new VacuumEnvironmentState();
state.setLocationState(VacuumEnvironment.LOCATION_A, VacuumEnvironment.LocationState.Dirty);
state.setLocationState(VacuumEnvironment.LOCATION_B, VacuumEnvironment.LocationState.Dirty);
state.setAgentLocation(agent, VacuumEnvironment.LOCATION_A);
// create problem
NondeterministicProblem problem = new NondeterministicProblem(
state,
new VacuumWorldActions(),
new VacuumWorldResults(agent),
new VacuumWorldGoalTest(agent),
new DefaultStepCostFunction());
// set the problem and agent
agent.setProblem(problem);
// create world
NondeterministicVacuumEnvironment world = new NondeterministicVacuumEnvironment(VacuumEnvironment.LocationState.Dirty, VacuumEnvironment.LocationState.Dirty);
world.addAgent(agent, VacuumEnvironment.LOCATION_A);
// execute and show plan
System.out.println("Initial Plan: " + agent.getContingencyPlan());
StringBuilder sb = new StringBuilder();
world.addEnvironmentView(new VacuumEnvironmentViewActionTracker(sb));
world.stepUntilDone();
System.out.println("Remaining Plan: " + agent.getContingencyPlan());
System.out.println("Actions Taken: " + sb);
System.out.println("Final State: " + world.getCurrentState());
}
}