public void Render(KAOSModel model) { //var goalsInRefinements = model.GoalRefinements ().SelectMany (x => x.SubGoals ().Union (new[] { // x.ParentGoal () //})).Distinct (); foreach (var g in model.Goals()) { Render(g); } foreach (var d in model.GoalRefinements().SelectMany(x => x.DomainProperties()).Distinct()) { Render(d); } foreach (var d in model.GoalRefinements().SelectMany(x => x.DomainHypotheses()).Distinct()) { Render(d); } foreach (var r in model.GoalRefinements()) { Render(r); } foreach (var r in model.GoalAgentAssignments()) { Render(r, true); } }
public void Render(KAOSModel model) { //var goalsInRefinements = model.GoalRefinements ().SelectMany (x => x.SubGoals ().Union (new[] { // x.ParentGoal () //})).Distinct (); foreach (var g in model.Goals()) { Render(g); } foreach (var d in model.GoalRefinements().SelectMany(x => x.DomainProperties()).Distinct()) { Render(d); } foreach (var r in model.GoalRefinements()) { Render(r); } foreach (var o in model.Obstacles()) { Render(o); } foreach (var o in model.ObstacleRefinements()) { Render(o); } foreach (var o in model.Obstructions()) { Render(o); } foreach (var o in model.Resolutions()) { Render(o); } foreach (var r in model.GoalAgentAssignments()) { Render(r, true); } foreach (var o in model.Resolutions()) { RenderAnchorArrow(o); } }
void KeepObstructedGoal(Resolution resolution) { // Get the anchor goal var anchor = resolution.AnchorIdentifier; var anchor_goal = _model.Goal(anchor); // Get the refinements in which the anchor goal is involved var refinements = _model.GoalRefinements(x => x.SubGoalIdentifiers.Any(y => y.Identifier == anchor)); // Create a new goal var new_anchor = new Goal(_model); new_anchor.Name = anchor_goal.Name; new_anchor.FormalSpec = anchor_goal.FormalSpec; _model.Add(new_anchor); // Replace anchor goal by new goal in refinements foreach (var r in refinements) { r.SubGoalIdentifiers = new HashSet <GoalRefinee> (r.SubGoalIdentifiers.Where(x => x.Identifier != anchor)); r.Add(new_anchor); } // Create a new refinement with anchor goal and cm goal var new_refinement = new GoalRefinement(_model); new_refinement.ParentGoalIdentifier = new_anchor.Identifier; new_refinement.Add(anchor); new_refinement.Add(resolution.ResolvingGoalIdentifier); _model.Add(new_refinement); Obstacle obstacle = resolution.Obstacle(); propagator.DownPropagateAddConjunct (resolution, new Not(obstacle.FormalSpec), obstacle.Name != null ? "Not " + obstacle.Name : null); // Set the probability of the resolved obstacle to 0 // TODO Use a flag "resolved" obstacle.Resolved = true; //_model.satisfactionRateRepository.AddObstacleSatisfactionRate (obstacle.Identifier, new DoubleSatisfactionRate (0)); // Remove the resolution, its appearans in refinements and obstructions //Delete (resolution); }
void RemoveObstructedGoal(Resolution resolution) { // Get the obstructed goals var obstructed = resolution.GetObstructedGoalIdentifiers(); // Get the obstructed goals in the refinment of the anchor goal var anchorRefinements = _model.GoalRefinements(x => x.ParentGoalIdentifier == resolution.AnchorIdentifier); if (anchorRefinements.Count() > 1) { throw new IntegrationException(IntegrationException.SINGLE_REFINEMENT_ONLY); } if (anchorRefinements.Count() == 0) { throw new IntegrationException(IntegrationException.ANCHOR_NO_REFINEMENT); } var anchorRefinement = anchorRefinements.Single(); var obstructedChildren = anchorRefinement.SubGoalIdentifiers.Select(x => x.Identifier) .Intersect(obstructed); // Remove these anchorRefinement.SubGoalIdentifiers = new HashSet <GoalRefinee> ( anchorRefinement.SubGoalIdentifiers.Where( x => !obstructedChildren.Contains(x.Identifier))); // Adds the countermeasure goal to the refinement anchorRefinement.Add(resolution.ResolvingGoalIdentifier); Console.WriteLine("Anchor goal : " + anchorRefinement.ParentGoalIdentifier); Console.WriteLine("New refinement = " + string.Join(",", anchorRefinement.SubGoalIdentifiers.Select(x => x.Identifier))); // Add replacement annotation var replacement = new GoalReplacement(_model); replacement.AnchorGoalIdentifier = resolution.AnchorIdentifier; replacement.ResolvedObstacleIdentifier = resolution.ObstacleIdentifier; replacement.ResolvingGoalIdentifier = resolution.ResolvingGoalIdentifier; replacement.ReplacedGoals = obstructedChildren.ToList(); _model.Add(replacement); }
public ISatisfactionRate GetESR(Goal g) { if (goalCache.ContainsKey(g)) { return(goalCache[g]); } ISatisfactionRate cps = null; var refinements = _model.GoalRefinements(r => r.ParentGoalIdentifier == g.Identifier); if (refinements.Count() > 1) { throw new PropagationException(PropagationException.MULTIPLE_REFINEMENTS); } if (refinements.Count() == 1) { cps = GetESR(refinements.Single()); } if (refinements.Count() == 0) { var obstructions = _model.Obstructions(r => r.ObstructedGoalIdentifier == g.Identifier); if (obstructions.Count() == 0) { cps = DoubleSatisfactionRate.ONE; } else { cps = obstructions.Select(x => GetESR(x).OneMinus()).Aggregate(DoubleSatisfactionRate.ONE, (x, y) => (DoubleSatisfactionRate)x.Product(y)); } } _model.satisfactionRateRepository.AddGoalSatisfactionRate(g.Identifier, cps); goalCache.Add(g, cps); return(cps); }