Ejemplo n.º 1
0
    //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);
    }
Ejemplo n.º 2
0
 public void SetUInt32(WorldStateId id, uint value)
 {
     SetUInt32(WorldStates.GetState(id), value);
 }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
 void Awake()
 {
     beliefs         = this.GetComponent <GAgent>().beliefs;
     initialStrength = stateStrength;
 }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
 static GWorld()
 {
     world    = new WorldStates();
     patients = new Queue <GameObject>();
 }
Ejemplo n.º 7
0
        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);
        }