示例#1
0
 /// <summary>
 /// Evaluates the conditions with the given reference state and variable substitution.
 /// </summary>
 /// <param name="conditions">Conditions to be evaluated.</param>
 /// <param name="substitution">Used variables substitution.</param>
 /// <param name="referenceState">Reference state.</param>
 /// <returns>True if all conditions are met in the given state, false otherwise.</returns>
 public bool Evaluate(Conditions conditions, ISubstitution substitution, IState referenceState = null)
 {
     // the conditions is lifted, but no direct variable substitution provided -> try whether there is a valid grounding to satisfy the conditions
     if (conditions.Parameters != null && substitution == null)
     {
         IEnumerable <ISubstitution> localSubstitutions = GroundingManager.GenerateAllLocalSubstitutions(conditions.Parameters);
         foreach (var localSubstitution in localSubstitutions)
         {
             if (conditions.TrueForAll(expression => Evaluate(expression, localSubstitution, referenceState)))
             {
                 return(true);
             }
         }
         return(false);
     }
     else
     {
         return(conditions.TrueForAll(expression => Evaluate(expression, substitution, referenceState)));
     }
 }
示例#2
0
 /// <summary>
 /// Evaluates whether the conditions are in compliance with the rigid relations of the planning problem. Ignores non-rigid relations.
 /// </summary>
 /// <param name="conditions">Conditions.</param>
 /// <param name="substitution">Substitution.</param>
 /// <returns>True if the conditions are in compliance with the rigid relations, false otherwise.</returns>
 public bool EvaluateRigidRelationsCompliance(Conditions conditions, ISubstitution substitution)
 {
     return(conditions.TrueForAll(expression => EvaluateRigidRelationsCompliance(expression, substitution)));
 }