Example #1
0
        private List <Action> RemoveConditions(List <Action> lActions)
        {
            List <Action> lNoConditions = new List <Action>();

            foreach (Action a in lActions)
            {
                HashSet <Predicate>    lMandatory  = a.GetMandatoryEffects();
                List <CompoundFormula> lConditions = a.GetConditions();
                if (lConditions.Count == 0)
                {
                    lNoConditions.Add(a);
                }
                else
                {
                    int iCondition = 0;
                    foreach (CompoundFormula cfCondition in lConditions)
                    {
                        Action          aNew            = new Action(a.Name + "." + iCondition);
                        CompoundFormula cfPreconditions = new CompoundFormula("and");
                        cfPreconditions.AddOperand(a.Preconditions);
                        cfPreconditions.AddOperand(cfCondition.Operands[0]);
                        if (!cfPreconditions.IsFalse(null))
                        {
                            aNew.Preconditions = cfPreconditions;
                            CompoundFormula cfEffects = new CompoundFormula("and");
                            cfEffects.AddOperand(cfCondition.Operands[1]);
                            foreach (Predicate p in lMandatory)
                            {
                                cfEffects.AddOperand(p);
                            }
                            aNew.Effects = cfEffects;
                            lNoConditions.Add(aNew);
                            iCondition++;
                        }
                    }
                }
            }
            return(lNoConditions);
        }