void UpPropagateReplacement(Obstacle obstacle, Formula f1, Formula f2) { if (visited.Contains(obstacle.Identifier)) { return; } visited.Add(obstacle.Identifier); if (obstacle.FormalSpec != null) { Replace(obstacle, f1, f2); } foreach (var r in _model.ObstacleRefinements(x => x.SubobstacleIdentifiers.Any(y => y.Identifier == obstacle.Identifier))) { UpPropagateReplacement(r.ParentObstacle(), f1, f2); } foreach (var r in obstacle.Resolutions()) { var sg = r.ResolvingGoal(); DownPropagateReplacement(sg, f1, f2); } }
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); } }
public ISatisfactionRate GetESR(Obstacle o) { if (obstacleCache.ContainsKey(o)) { return(obstacleCache[o]); } ISatisfactionRate esr; var refinements = _model.ObstacleRefinements(r => r.ParentObstacleIdentifier == o.Identifier); if (refinements.Count() > 0) { esr = refinements.Aggregate(DoubleSatisfactionRate.ONE, (x, y) => (DoubleSatisfactionRate)x.Product((GetESR(y).OneMinus()))).OneMinus(); _model.satisfactionRateRepository.AddObstacleSatisfactionRate(o.Identifier, esr); } else { esr = o.LatestEPS(); } obstacleCache.Add(o, esr); return(esr); }
private void Delete(Resolution resolution, bool others = true) { Obstacle obstacle = _model.Obstacle(resolution.ObstacleIdentifier); _model.obstacleRepository.Remove(resolution); if (!others) { return; } foreach (var obstruction in obstacle.Obstructions().ToList()) { _model.obstacleRepository.Remove(obstruction); } foreach (var refinement in _model.ObstacleRefinements(x => x.SubobstacleIdentifiers.Any(y => y.Identifier == obstacle.Identifier))) { foreach (var refinee in refinement.SubobstacleIdentifiers.Where(x => x.Identifier == obstacle.Identifier).ToList()) { refinement.SubobstacleIdentifiers.Remove(refinee); } } }