/// <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))); } }
/// <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))); }