Esempio n. 1
0
 private void GenerateAbstractPredicates(PlanningParser.CEffectContext context, IReadOnlyDictionary <string, Predicate> predDict)
 {
     if (context.WHEN() != null)
     {
         GenerateAbstractPredicates(context.gd(), predDict);
         foreach (var literalTermContext in context.condEffect().literalTerm())
         {
             GenerateAbstractPredicates(literalTermContext, predDict);
         }
     }
     else
     {
         GenerateAbstractPredicates(context.literalTerm(), predDict);
     }
 }
Esempio n. 2
0
        public static List <Tuple <CUDDNode, Tuple <Predicate, bool>[]> > GetCondEffectList(
            this PlanningParser.CEffectContext context, CUDDNode currentConditionNode,
            IReadOnlyDictionary <string, Predicate> predicateDict, StringDictionary assignment)
        {
            List <Tuple <CUDDNode, Tuple <Predicate, bool>[]> > result;

            if (context.FORALL() != null)
            {
                CEffectEnumerator enumerator = new CEffectEnumerator(context, currentConditionNode, predicateDict,
                                                                     assignment);
                Algorithms.IterativeScanMixedRadix(enumerator);
                result = enumerator.CondEffectList;
            }
            else if (context.WHEN() != null)
            {
                result = new List <Tuple <CUDDNode, Tuple <Predicate, bool>[]> >();
                CUDD.Ref(currentConditionNode);
                CUDDNode gdNode        = context.gd().GetCuddNode(predicateDict, assignment);
                CUDDNode conditionNode = CUDD.Function.And(currentConditionNode, gdNode);
                if (!conditionNode.Equals(CUDD.ZERO))
                {
                    var literaCollection = context.condEffect().GetLiteralArray(predicateDict, assignment);
                    var condEffect       = new Tuple <CUDDNode, Tuple <Predicate, bool>[]>(conditionNode, literaCollection);
                    result.Add(condEffect);
                }
                else
                {
                    CUDD.Deref(conditionNode);
                }
            }
            else
            {
                result = new List <Tuple <CUDDNode, Tuple <Predicate, bool>[]> >();
                var literals   = context.condEffect().GetLiteralArray(predicateDict, assignment);
                var condEffect = new Tuple <CUDDNode, Tuple <Predicate, bool>[]>(currentConditionNode, literals);
                result.Add(condEffect);
            }
            return(result);
        }
Esempio n. 3
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="PlanningParser.cEffect"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitCEffect([NotNull] PlanningParser.CEffectContext context)
 {
 }
Esempio n. 4
0
        private Tuple <CUDDNode, List <Tuple <AbstractPredicate, bool> > > GetCondEffect(PlanningParser.CEffectContext context)
        {
            CUDDNode condition;
            var      abstractLiterals = new List <Tuple <AbstractPredicate, bool> >();

            if (context.literalTerm() != null)
            {
                condition = CUDD.ONE;
                var literal = GetAbstractLiteral(context.literalTerm());
                abstractLiterals.Add(literal);
            }
            else
            {
                condition = GetCuddNode(context.gd());
                foreach (var literalTermNode in context.condEffect().literalTerm())
                {
                    var literal = GetAbstractLiteral(literalTermNode);
                    abstractLiterals.Add(literal);
                }
            }

            var result = new Tuple <CUDDNode, List <Tuple <AbstractPredicate, bool> > >(condition, abstractLiterals);

            return(result);
        }