Exemplo n.º 1
0
        private bool RecursiveScanMixedRaio(PlanningParser.SubjectGdContext context, IReadOnlyList <string> variableNameList,
                                            IReadOnlyList <IList <string> > collection, StringDictionary assignment, int currentLevel = 0,
                                            bool isForall = true)
        {
            bool result;

            if (currentLevel != variableNameList.Count)
            {
                string variableName = variableNameList[currentLevel];
                result = isForall;

                bool terminateCondition = !isForall;
                Func <bool, bool, bool> boolFunc;
                if (isForall)
                {
                    boolFunc = (b1, b2) => b1 && b2;
                }
                else
                {
                    boolFunc = (b1, b2) => b1 || b2;
                }

                foreach (string value in collection[currentLevel])
                {
                    assignment[variableName] = value;

                    bool gdResult = RecursiveScanMixedRaio(context, variableNameList, collection,
                                                           assignment,
                                                           currentLevel + 1, isForall);

                    if (gdResult == terminateCondition)
                    {
                        result = terminateCondition;
                        break;
                    }

                    result = boolFunc(result, gdResult);
                }
            }
            else
            {
                result = Implies(context, assignment);
            }

            return(result);
        }
Exemplo n.º 2
0
        public bool Implies(PlanningParser.SubjectGdContext context, StringDictionary assignment)
        {
            //Console.WriteLine("Enter implies");
            bool result;

            if (context.KNOW() != null)
            {
                //Console.WriteLine("Enter Know");
                //CUDD.Print.PrintMinterm(Knowledge);
                //Console.WriteLine("Whether knowledge is equal to false: {0}", Knowledge.Equals(CUDD.ZERO));
                CUDDNode objectNode = context.gd().GetCuddNode(_predicateDict, assignment);
                //CUDD.Print.PrintMinterm(objectNode);
                CUDD.Ref(Knowledge);
                CUDDNode impliesNode = CUDD.Function.Implies(Knowledge, objectNode);
                result = impliesNode.Equals(CUDD.ONE);
            }
            else if (context.BEL() != null)
            {
                //Console.WriteLine("Enter belief");
                //Console.WriteLine("Belief");
                //CUDD.Print.PrintMinterm(Belief);
                CUDDNode objectNode = context.gd().GetCuddNode(_predicateDict, assignment);
                //Console.WriteLine("objectNode");
                //Console.WriteLine(context.gd().GetText());
                //CUDD.Print.PrintMinterm(objectNode);
                CUDD.Ref(Belief);
                CUDDNode impliesNode = CUDD.Function.Implies(Belief, objectNode);
                result = impliesNode.Equals(CUDD.ONE);
            }
            else if (context.NOT() != null)
            {
                result = !Implies(context.subjectGd(0), assignment);
            }
            else if (context.AND() != null)
            {
                result = true;
                for (int i = 0; i < context.subjectGd().Count; i++)
                {
                    if (!Implies(context.subjectGd(i), assignment))
                    {
                        result = false;
                        break;
                    }
                }
            }
            else if (context.OR() != null)
            {
                result = false;
                for (int i = 0; i < context.subjectGd().Count; i++)
                {
                    if (Implies(context.subjectGd(i), assignment))
                    {
                        result = true;
                        break;
                    }
                }
            }
            else
            {
                var  listVariableContext = context.listVariable();
                var  collection          = listVariableContext.GetCollection();
                var  varNameList         = listVariableContext.GetVariableNameList();
                bool isForall            = context.FORALL() != null;
                result = RecursiveScanMixedRaio(context.subjectGd(0), varNameList, collection, assignment, 0, isForall);
            }

            //Console.WriteLine("Implies result: {0}", result);
            //Console.ReadLine();
            return(result);
        }
Exemplo n.º 3
0
        public bool Implies(PlanningParser.SubjectGdContext context)
        {
            StringDictionary emtpyAssignment = new StringDictionary();

            return(Implies(context, emtpyAssignment));
        }