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(); } } }