public override void Handle(Obstacle element, ParsedRefinedByAttribute attribute, KAOSModel model)
        {
            var refinement = new ObstacleRefinement(model);

            refinement.SetParentObstacle(element);

            // Parse the reference to children
            foreach (var child in attribute.ParsedRefinees)
            {
                var id    = child.Identifier;
                var param = child.Parameters;
                IRefineeParameter refineeParameter = null;

                if (param != null)
                {
                    if (param is ParsedPrimitiveRefineeParameter <double> )
                    {
                        var cast = ((ParsedPrimitiveRefineeParameter <double>)param);
                        refineeParameter = new PrimitiveRefineeParameter <double> (cast.Value);
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }

                Obstacle         refinee;
                DomainProperty   domprop;
                DomainHypothesis domhyp;

                if ((refinee = model.obstacleRepository.GetObstacle(id)) != null)
                {
                    refinement.Add(refinee, refineeParameter);
                }
                else if ((domprop = model.domainRepository.GetDomainProperty(id)) != null)
                {
                    refinement.Add(domprop, refineeParameter);
                }
                else if ((domhyp = model.domainRepository.GetDomainHypothesis(id)) != null)
                {
                    refinement.Add(domhyp, refineeParameter);
                }
                else
                {
                    refinee = new Obstacle(model, id)
                    {
                        Implicit = true
                    };
                    model.obstacleRepository.Add(refinee);
                    refinement.Add(refinee);
                }
            }

            if (!refinement.IsEmpty)
            {
                model.Add(refinement);
            }
        }
        public void Add(ObstacleRefinement refinement)
        {
            if (ObstacleRefinements.ContainsKey(refinement.Identifier))
            {
                throw new ArgumentException(string.Format("Obstacle refinement identifier already exist: {0}", refinement.Identifier));
            }

            ObstacleRefinements.Add(refinement.Identifier, refinement);
        }
        ObstacleRefinement GenerateObstacleRefinement(Obstacle parent)
        {
            var mode    = (_options.MinObstacleANDBranchingFactor + _options.MaxObstacleANDBranchingFactor) / 2;
            var nbchild = Triangular.Sample(_random, _options.MinObstacleANDBranchingFactor,
                                            _options.MaxObstacleANDBranchingFactor,
                                            mode);

            var refinement = new ObstacleRefinement(_model)
            {
                ParentObstacleIdentifier = parent.Identifier
            };

            for (int i = 0; i < nbchild; i++)
            {
                var c = GenerateObstacle();
                refinement.Add(c);
            }
            _model.Add(refinement);
            return(refinement);
        }
        protected void Render(ObstacleRefinement refinement)
        {
            var circle = GetCircle();

            Add(refinement.Identifier, circle);

            if (shapes.ContainsKey(refinement.ParentObstacleIdentifier))
            {
                var parentGraphic = shapes[refinement.ParentObstacleIdentifier].First();
                var topArrow      = GetFilledArrow(circle, parentGraphic);
                sheet.GraphicsList.Add(topArrow);
            }

            foreach (var child in refinement.SubobstacleIdentifiers)
            {
                if (!shapes.ContainsKey(child.Identifier))
                {
                    continue;
                }

                var childGraphic = shapes [child.Identifier].First();
                var line         = GetLine(childGraphic, circle);
                sheet.GraphicsList.Add(line);
            }

            foreach (var child in refinement.DomainHypothesisIdentifiers)
            {
                if (!shapes.ContainsKey(child.Identifier))
                {
                    continue;
                }

                var childGraphic = shapes [child.Identifier].First();
                var line         = GetLine(childGraphic, circle);
                sheet.GraphicsList.Add(line);
            }
        }
Exemple #5
0
 ISatisfactionRate GetESR(ObstacleRefinement o)
 {
     return(o.SubObstacles().Aggregate(DoubleSatisfactionRate.ONE, (x, y) => (DoubleSatisfactionRate)x.Product(GetESR(y)))
            .Product(o.DomainProperties().Aggregate(DoubleSatisfactionRate.ONE, (x, y) => (DoubleSatisfactionRate)x.Product(GetESR(y))))
            .Product(o.DomainHypotheses().Aggregate(DoubleSatisfactionRate.ONE, (x, y) => (DoubleSatisfactionRate)x.Product(GetESR(y)))));
 }