private bool CheckNearestObservation(ScenarioDescription scenarioDescription, int actualTime, int nextObservationTime, int nextTime) { if (actualTime <= nextObservationTime && nextObservationTime < nextTime) { ScenarioObservationRecord nextObservation = scenarioDescription.GetObservationFromTime(nextObservationTime); if (!nextObservation.CheckState(ActualState, actualTime)) { _logger.Warn("Leaf is incopatibile with observation!\n" + "State: " + ActualState.ToString() + "Observation: " + nextObservation); return(false); } } return(true); }
private List <State> CreateStatesBasedOnObservations(List <string> fluentNames, ScenarioDescription scenarioDescription, ref int time) { List <State> states = new List <State>(); time = scenarioDescription.GetNextObservationTime(0); if (time == -1 || time > _TInf) { return(states); } ScenarioObservationRecord observation = scenarioDescription.GetObservationFromTime(time); if (observation == null) { _logger.Warn("Scenario has no observations!"); State state = new State(); state.AddFluents(fluentNames); states.Add(state); } else { _logicExpression = new SimpleLogicExpression(observation.Expr as SimpleLogicExpression); List <Fluent[]> possibleInitialValues = _logicExpression.CalculatePossibleFluents(); foreach (var valuation in possibleInitialValues) { State state = new State(); state.AddFluents(fluentNames); foreach (var fluent in valuation) { try { state.Fluents.First(f => f.Name == fluent.Name).Value = fluent.Value; } catch (System.ArgumentNullException) { _logger.Error("Fluent " + fluent.Name + " doesn't exist!"); } } states.Add(state); } } return(states); }