public AccesibleConditionQuery(QuestionType questionType, string condition, ScenarioDescription scenario) : base(QueryType.AccesibleCondition, questionType) { _queryType = QueryType.AccesibleCondition; _condition = condition; var logicExp = new SimpleLogicExpression(this._condition); _fluentNames = logicExp.GetFluentNames(); _scenario = scenario; ExecQuery = new ExecutableScenarioQuery(QuestionType.Ever, _scenario); CondAtTimeQuery = new ConditionAtTimeQuery(QuestionType.Ever, _condition); _logger.Info("Creates:\n " + this); }
public static QueryResult ExecuteQuery(Query query, ScenarioDescription scenarioDescription) { return pageSwitcher.ExecuteQuery(query, scenarioDescription); }
public void SetUp() { // BASIC WORLD DESCRIPTION _worldDescription = new WorldDescription(); _worldDescription.Descriptions.Add(new Tuple<WorldDescriptionRecordType, WorldDescriptionRecord>(WorldDescriptionRecordType.Initially, new InitialRecord("a || b || c || d"))); _worldDescription.Descriptions.Add(new Tuple<WorldDescriptionRecordType, WorldDescriptionRecord>(WorldDescriptionRecordType.ActionCausesIf, new ActionCausesIfRecord(this._actionA2, "a && !b", "c"))); _worldDescription.Descriptions.Add(new Tuple<WorldDescriptionRecordType, WorldDescriptionRecord>(WorldDescriptionRecordType.ActionCausesIf, new ActionCausesIfRecord(this._actionB3, "a || b", "d"))); // BASIC SCENARIO _scenarioDescription = new ScenarioDescription("basic"); _scenarioDescription.addObservation(new SimpleLogicExpression("a && b && c && d"), 0); _scenarioDescription.addACS(this._actionA2, 1); _scenarioDescription.addObservation(new SimpleLogicExpression("a && !b && c && d"), 4); _reasoning = new Reasoning(); foreach (var description in _worldDescription.Descriptions.Select(t => t.Item2)) _reasoning.AddWorldDescriptionRecord(description); }
public void Initialize(List<Fluent> fluents, List<WorldAction> actions, List<WorldDescriptionRecord> statements, int maxTime) { ActionAdd.SetActions(actions); _scenarioDescription = new ScenarioDescription(); _fluents = fluents; InitializeStatements(statements); this.ObservationAdd.Fluents = new ObservableCollection<Fluent>(fluents); this.ActionAdd.MaxTime = maxTime; this.ObservationAdd.MaxTime = maxTime; }
private void AddScenario_Click(object sender, RoutedEventArgs e) { if (String.IsNullOrEmpty(ScenarioName)) { LabelValidationScenario.Content = "It is necessary to fill scenario name."; } else { foreach(ScenarioDescription item in SavedScenarios) { if(item.Name == ScenarioName) { LabelValidationScenario.Content = "Scenario with this name already exists."; return; } } _scenarioDescription.Name = ScenarioName; SavedScenarios.Add(_scenarioDescription); _scenarioDescription = new ScenarioDescription(); ScenarioName = ""; CleanValues(); } }
public QueryResult ExecuteQuery(Query query, ScenarioDescription scenarioDescription) { QueryResultsContainer queryResultsContainer = new QueryResultsContainer(query.questionType); //tree initialization Tree tree = new Tree(TInf); //add first level int numberOfImpossibleLeaf = 0; tree.AddFirstLevel(worldDescription, scenarioDescription, out numberOfImpossibleLeaf); queryResultsContainer.AddMany(QueryResult.False, numberOfImpossibleLeaf); if (tree.LastLevel.Count > 0 && CheckIfLeafIsPossible(tree.LastLevel[0], scenarioDescription)) { QueryResult result = query.CheckCondition(tree.LastLevel[0]); if (result == QueryResult.True || result == QueryResult.False) { queryResultsContainer.AddMany(result); } } //generate next level if query can't answer yet while (!queryResultsContainer.CanQuickAnswer() && tree.LastLevel.Count > 0) { int childsCount = tree.LastLevel.Count; for (int i = 0; i < childsCount; ++i) { Vertex leaf = tree.LastLevel[i]; if (!CheckIfLeafIsPossible(leaf, scenarioDescription)) { tree.DeleteChild(i); queryResultsContainer.AddMany(QueryResult.False); if (queryResultsContainer.CanQuickAnswer()) { break; } } else { tree.DeleteChild(i); List<Vertex> nextLevel = leaf.GenerateChildsForLeaf(worldDescription, scenarioDescription, TInf); foreach (var child in nextLevel) { if (!CheckIfLeafIsPossible(child, scenarioDescription)) { queryResultsContainer.AddMany(QueryResult.False); if (queryResultsContainer.CanQuickAnswer()) { break; } } QueryResult result = query.CheckCondition(child); if (result == QueryResult.True || result == QueryResult.False) { queryResultsContainer.AddMany(result); } else { tree.Add(child); } } } } } return queryResultsContainer.CollectResults(); }
private bool CheckIfLeafIsPossible(Vertex leaf, ScenarioDescription scenarioDescription) { return leaf.IsPossible && leaf.ValidateActions() && worldDescription.Validate(leaf) && scenarioDescription.CheckIfLeafIsPossible(leaf); }
public QueryResult ExecuteQuery(Query query, ScenarioDescription scenarioDescription) { return _reasoning.ExecuteQuery(query, scenarioDescription); }
public ExecutableScenarioQuery(QuestionType questionType, ScenarioDescription scenario) : base(QueryType.ExecutableScenario, questionType) { _scenario = scenario; }
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; }