Beispiel #1
0
        private void ReadConstants(CompoundExpression exp, Domain d)
        {
            string        sType = "?", sExp = "";
            List <string> lUndefined = new List <string>();

            for (int iExpression = 0; iExpression < exp.SubExpressions.Count; iExpression++)
            {
                sExp = exp.SubExpressions[iExpression].ToString().Trim();
                if (sExp == "-")
                {
                    sType = exp.SubExpressions[iExpression + 1].ToString();
                    iExpression++;
                    foreach (string sName in lUndefined)
                    {
                        d.AddConstant(new Constant(sType, sName));
                    }
                    lUndefined.Clear();
                }
                else if (!sExp.StartsWith(":"))
                {
                    lUndefined.Add(sExp);
                }
            }
            if (lUndefined.Count > 0)
            {
                //supporting objects with undefined types as type "OBJ"
                foreach (string sName in lUndefined)
                {
                    d.AddConstant(new Constant("OBJ", sName));
                }
                //throw new NotImplementedException();
            }
        }
Beispiel #2
0
        private void AddCollabActionReq(out List <Action> exctractedActions)
        {
            exctractedActions = new List <Action>();
            if (m_ReqCollabActions == null || m_ReqCollabActions.Count == 0)
            {
                return;
            }

            // If there are collaborative constraints - remove the general action of join push.
            // TODO in future work - consider the case if you allow a general joint action push - the agent will be able to
            // activate new joint pushes before the constraint joint push from other agent - and by that he might create for
            //himself the ability to use the artifitial joint push by pushing earlier the big box
            //
            // For example - constraint joint push send to be activated at t4
            // +------------+
            // | B0, a0, a1 | B0 is an heavy box
            // +------------+
            //
            // Iteration 1:
            // a1 plan : 1. Observe big box -->(t) 2. No-op               --> 3. No-op --> 4. Joint-Push (with a1, new)
            //
            // Iteration 2:
            // a2 plan : 1. Observe big box -->(t) 2. Joint-Push t2 (new) --> 3. No-op --> 4. Art-Joint-Push
            //                                 (f) 2. No-op               --> 3. No-op --> 4. Art-Joint-Push

            // Until then -- > remove general collaborative action
            HashSet <string> JointActionsUsed = new HashSet <string>();

            foreach (var reqAction in m_ReqCollabActions)
            {
                JointActionsUsed.Add(reqAction.GetOperationName());
            }
            if (JointActionsUsed.Count > 1)
            {
                // Multiple joint actions type is not yet supported!
                throw new Exception();
            }
            else
            {
                if (JointActionsUsed.Count == 1)
                {
                    // Remove general joint action of the same name
                    string jointActionName       = JointActionsUsed.ElementAt(0);
                    Action generalActionToRemove = null;
                    foreach (var item in m_AgentDomain.Actions)
                    {
                        if (item.GetOperationName() == jointActionName)
                        {
                            generalActionToRemove = item;
                        }
                    }
                    if (generalActionToRemove != null)
                    {
                        m_AgentDomain.Actions.Remove(generalActionToRemove);
                        exctractedActions.Add(generalActionToRemove);
                    }
                }
            }


            // Add the notion of sub goals to the domain.
            m_AgentDomain.AddPredicate("sub-goal", "?g", "aGoal");

            // Count the number of artifitial goals.
            int artGoals = 0;

            // For each required action that needs attention:
            foreach (var reqAction in m_ReqCollabActions)
            {
                // Create sub-goal for this action
                string            predicateName = "sub-goal" + (artGoals++);
                GroundedPredicate gp            = new GroundedPredicate("sub-goal");
                gp.AddConstant(new Constant("aGoal", predicateName));
                m_AgentDomain.AddConstant("aGoal", predicateName);
                // Update this goal to the domain and problem;
                m_ActiveGoals.Add(gp);
                // Let it be known that this goal has not been achieved yet
                m_AgentProblem.AddKnown(gp.Negate());
                // This action now achieves this goal
                reqAction.AddEffect(gp);
                // OK, action is ready. add it to the set of actions
                m_AgentDomain.AddAction(reqAction);

                // We also need to create a counter-action that can be used in cases in which the previous action
                // cannot be used. - only when the agent observes that

                Action counterAction = new Action("art-" + reqAction.Name);

                Formula cgf = reqAction.Preconditions.GetUnknownPredicates(m_AgentDomain.m_lObservable);
                counterAction.Preconditions = cgf.Negate(true);
                //counterAction.Preconditions.AddTime
                //counterAction.Preconditions = counterAction.Preconditions.AddTime(reqAction.GetTime());
                counterAction.AddEffect(gp);
                //Formula cf = reqAction.Effects.Clone();
                //cf.RemoveTime();
                //counterAction.Effects = cf;
                //counterAction.AddEffect(reqAction.Effects);
                m_AgentDomain.AddAction(counterAction);
            }
        }
 private void ReadConstants(CompoundExpression exp, Domain d)
 {
     string sType = "?", sExp = "";
     List<string> lUndefined = new List<string>();
     for( int iExpression  = 0 ; iExpression < exp.SubExpressions.Count ; iExpression++)
     {
         sExp = exp.SubExpressions[iExpression].ToString().Trim();
         if ( sExp == "-")
         {
             sType = exp.SubExpressions[iExpression + 1].ToString();
             iExpression++;
             foreach (string sName in lUndefined)
                 d.AddConstant(new Constant(sType, sName));
             lUndefined.Clear();
         }
         else if( !sExp.StartsWith(":"))
         {
             lUndefined.Add(sExp);
         }
     }
     if (lUndefined.Count > 0)
     {
         //supporting objects with undefined types as type "OBJ"
         foreach(string sName in lUndefined)
             d.AddConstant(new Constant("OBJ", sName));
         //throw new NotImplementedException();
     }
 }