//Returns a Queue object containing GActions, called "plan" and requires a list of GActions, the goal and required beliefstates public Queue <GAction> plan(List <GAction> actions, Dictionary <string, int> goal, WorldStates beliefStates) { //Find out which actions are actually usable in this plan, filter out those that can't List <GAction> usableActions = new List <GAction>(); foreach (GAction a in actions) { if (a.isAchievable()) { usableActions.Add(a); } } //A list of all nodes (or 'leaves') List <Node> leaves = new List <Node>(); //First leaf in plan has null/no parent, 0 cost and ALL world states available Node start = new Node(null, 0, GWorld.Instance.GetWorld().GetStates(), beliefStates.GetStates(), null); //If the graph is successfully built, success = 1 bool success = BuildGraph(start, leaves, usableActions, goal); if (!success) { //Debug.Log("NO PLAN"); return(null); } Node cheapest = null; foreach (Node leaf in leaves) { if (cheapest == null) { cheapest = leaf; } else { if (leaf.cost < cheapest.cost) { cheapest = leaf; } } } List <GAction> result = new List <GAction>(); Node n = cheapest; while (n != null) { if (n.action != null) { result.Insert(0, n.action); } n = n.parent; } Queue <GAction> queue = new Queue <GAction>(); foreach (GAction a in result) { queue.Enqueue(a); } //Debug.Log("The plan is: "); foreach (GAction a in queue) { //Debug.Log("Q: " + a.actionName); } return(queue); }
public void SetUInt32(WorldStateId id, uint value) { SetUInt32(WorldStates.GetState(id), value); }
public Queue <GAction> plan(List <GAction> actions, Dictionary <string, int> goal, WorldStates beliefstates) { List <GAction> usableActions = new List <GAction>(); foreach (GAction a in actions) { if (a.IsAchievable()) { usableActions.Add(a); } } List <Node> leaves = new List <Node>(); Node start = new Node(null, 0, GWorld.Instance.GetWorld().GetStates(), beliefstates.GetStates(), null); bool success = BuildGraph(start, leaves, usableActions, goal); if (!success) { Debug.Log("NO PLAN"); return(null); } Node cheapest = null; foreach (Node leaf in leaves) { if (cheapest == null) { cheapest = leaf; } else { if (leaf.cost < cheapest.cost) { cheapest = leaf; } } } List <GAction> result = new List <GAction>(); Node n = cheapest; while (n != null) { if (n.action != null) { result.Insert(0, n.action); } n = n.parent; } Queue <GAction> queue = new Queue <GAction>(); foreach (GAction a in result) { queue.Enqueue(a); } Debug.Log("The Plan is: "); foreach (GAction a in queue) { Debug.Log("Q: " + a.actionName); } return(queue); }
void Awake() { beliefs = this.GetComponent <GAgent>().beliefs; initialStrength = stateStrength; }
public Queue <GAction> plan(List <GAction> actions, Dictionary <string, int> goal, WorldStates states) { List <GAction> usableActions = new List <GAction>(); foreach (GAction a in actions) { if (a.isAcheivable()) { usableActions.Add(a); } } List <GNode> leaves = new List <GNode>(); GNode start = new GNode(null, 0, GWorld.Instance.GetWorld().GetStates(), null); bool success = BuildGraph(start, leaves, usableActions, goal); if (!success) { Debug.Log("No Plan"); return(null); } GNode cheapest = null; foreach (GNode leaf in leaves) { if (cheapest == null) { cheapest = leaf; } else { if (leaf.cost < cheapest.cost) { cheapest = leaf; } } } List <GAction> result = new List <GAction>(); GNode n = cheapest; while (n != null) { if (n.action != null) { result.Insert(0, n.action); } n = n.parent; } Queue <GAction> queue = new Queue <GAction>(); foreach (GAction a in result) { queue.Enqueue(a); } //---------------------------------------- Debug.Log("Plan Found: "); // foreach (GAction a in queue) // { // Debug.Log("Q: " + a.actionName); // } // //---------------------------------------- return(queue); }
static GWorld() { world = new WorldStates(); patients = new Queue <GameObject>(); }
public Queue <GAction> plan(List <GAction> actions, Dictionary <string, int> goal, WorldStates beliefStates) { List <GAction> usableActions = new List <GAction>(); //of all the actions available find the ones that can be achieved. foreach (GAction a in actions) { if (a.IsAchievable()) { usableActions.Add(a); } } //create the first node in the graph List <Node> leaves = new List <Node>(); Node start = new Node(null, 0.0f, GWorld.Instance.GetWorld().GetStates(), beliefStates.GetStates(), null); //pass the first node through to start branching out the graph of plans from bool success = BuildGraph(start, leaves, usableActions, goal); //if a plan wasn't found if (!success) { // Debug.Log("NO PLAN"); return(null); } //of all the plans found, find the one that's cheapest to execute //and use that Node cheapest = null; foreach (Node leaf in leaves) { if (cheapest == null) { cheapest = leaf; } else if (leaf.cost < cheapest.cost) { cheapest = leaf; } } List <GAction> result = new List <GAction>(); Node n = cheapest; while (n != null) { if (n.action != null) { result.Insert(0, n.action); } n = n.parent; } //make a queue out of the actions represented by the nodes in the plan //for the agent to work its way through Queue <GAction> queue = new Queue <GAction>(); foreach (GAction a in result) { queue.Enqueue(a); } // Debug.Log("The Plan is: "); // foreach (GAction a in queue) { // Debug.Log("Q: " + a.actionName); // } return(queue); }