Example #1
0
        private void GenerateGroundEffect(Dictionary <string, Ground <Predicate> > preGndPredDict)
        {
            CUDDVars oldVars = new CUDDVars();
            CUDDVars newVars = new CUDDVars();

            Dictionary <string, string> abstractParmMap = new Dictionary <string, string>();

            //Console.WriteLine("  Ground action constant list count:{0}", gndAction.ConstantList.Count);

            for (int i = 0; i < ConstantList.Count; i++)
            {
                string abstractParm = Container.VariableList[i].Item1;
                string gndParm      = ConstantList[i];
                abstractParmMap.Add(abstractParm, gndParm);
                //Console.WriteLine("    Parameter:{0}, constant:{1}", abstractParm, gndParm);
            }

            foreach (var pair in Container.AbstractPredicateDict)
            {
                oldVars.AddVar(CUDD.Var(pair.Value.CuddIndex));
                List <string> collection = new List <string>();
                foreach (var parm in pair.Value.ParameterList)
                {
                    collection.Add(abstractParmMap[parm]);
                }

                string             gndPredFullName = VariableContainer.GetFullName(pair.Value.Predicate.Name, collection);
                Ground <Predicate> gndPred         = preGndPredDict[gndPredFullName];
                newVars.AddVar(CUDD.Var(gndPred.CuddIndex));

                //Console.WriteLine("  old cuddIndex:{0}, new cuddIndex:{1}", pair.Value.CuddIndex, gndPred.CuddIndex);
            }

            foreach (var cEffect in Container.Effect)
            {
                CUDDNode abstractCondition = cEffect.Item1;
                CUDDNode gndCondition      = CUDD.Variable.SwapVariables(abstractCondition, oldVars, newVars);
                CUDD.Ref(gndCondition);

                var gndLiteralList      = new List <Tuple <Ground <Predicate>, bool> >();
                var abstractLiteralList = cEffect.Item2;
                foreach (var abstractLiteral in abstractLiteralList)
                {
                    List <string> collection = new List <string>();
                    foreach (var parm in abstractLiteral.Item1.ParameterList)
                    {
                        collection.Add(abstractParmMap[parm]);
                    }

                    string gndPredFullName = VariableContainer.GetFullName(abstractLiteral.Item1.Predicate.Name,
                                                                           collection);
                    Ground <Predicate> gndPred = preGndPredDict[gndPredFullName];
                    var gndLiteral             = new Tuple <Ground <Predicate>, bool>(gndPred, abstractLiteral.Item2);
                    gndLiteralList.Add(gndLiteral);
                }

                var gndCEffect = new Tuple <CUDDNode, List <Tuple <Ground <Predicate>, bool> > >(gndCondition, gndLiteralList);
                _effect.Add(gndCEffect);
            }
        }
Example #2
0
        internal void BuildTruePredicateSet(PlanningParser.InitContext context)
        {
            foreach (var atomicFormula in context.atomicFormulaName())
            {
                var           nameNodes = atomicFormula.NAME();
                List <string> termList  = new List <string>();
                foreach (var nameNode in nameNodes)
                {
                    termList.Add(nameNode.GetText());
                }
                string gndPredName = VariableContainer.GetFullName(atomicFormula.predicate().GetText(), termList);

                TruePredSet.Add(gndPredName);
            }
        }
Example #3
0
 public override string ToString()
 {
     return(VariableContainer.GetFullName(Container.Name, _constantList));
 }
Example #4
0
 public override string ToString()
 {
     return(VariableContainer.GetFullName(Predicate.Name, _parameterList));
 }