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); } }
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))))); }