Beispiel #1
0
        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);
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }