static void PathFinding()
{
QLearning q = new QLearning();
QAction fromTo;
QState state;
string stateName;
string stateNameNext;
// ----------- Begin Insert the path setup here -----------
// insert the end states here, e.g. goal state
q.EndStates.Add(StateNameEnum.Kitchen.EnumToString());
// State Bedroom
stateName = StateNameEnum.Bedroom.EnumToString();
q.AddState(state = new QState(stateName, q));
// action up
stateNameNext = StateNameEnum.Bedroom.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("up")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action right
stateNameNext = StateNameEnum.Hallway.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("right")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action down
stateNameNext = StateNameEnum.Bedroom.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("down")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action left
stateNameNext = StateNameEnum.Bedroom.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("left")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// State Hallway
stateName = StateNameEnum.Hallway.EnumToString();
q.AddState(state = new QState(stateName, q));
// action up
stateNameNext = StateNameEnum.Hallway.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("up")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action right
stateNameNext = StateNameEnum.Hallway.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("right")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action down
stateNameNext = StateNameEnum.Stairwell.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("down")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action left
stateNameNext = StateNameEnum.Bedroom.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("left")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// State Stairwell
stateName = StateNameEnum.Stairwell.EnumToString();
q.AddState(state = new QState(stateName, q));
// action up
stateNameNext = StateNameEnum.Hallway.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("up")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action right
stateNameNext = StateNameEnum.Stairwell.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("right")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action down
stateNameNext = StateNameEnum.Stairwell.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("down")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0));
// action left
stateNameNext = StateNameEnum.Kitchen.EnumToString();
state.AddAction(fromTo = new QAction(stateName, new QActionName("left")));
fromTo.AddActionResult(new QActionResult(fromTo, stateNameNext, 1.0){Reward = 100});
// ----------- End Insert the path setup here -----------
q.RunTraining();
q.PrintQLearningStructure();
q.ShowPolicy();
}
}
}