Example #1
0
        OptimizationSolver(OptimizationProblem optimizationProblem, OptimizationSubstitutions optimizationSubstitutions)
        {
            if (optimizationProblem == null)
            {
                throw new ArgumentNullException("optimizationProblem");
            }
            if (optimizationSubstitutions == null)
            {
                throw new ArgumentNullException("optimizationSubstitutions");
            }

            this.optimizationProblem       = optimizationProblem;
            this.optimizationSubstitutions = optimizationSubstitutions;

            this.solver = new IpoptSolver(optimizationProblem.Problem.Substitute(optimizationSubstitutions.Substitutions), new Settings());
        }
Example #2
0
 public static OptimizationSolver Create(OptimizationProblem optimizationProblem, OptimizationSubstitutions optimizationSubstitutions)
 {
     return(new OptimizationSolver(optimizationProblem, optimizationSubstitutions));
 }
Example #3
0
 public bool NeedsRebuild(OptimizationProblem newOptimizationProblem, OptimizationSubstitutions newOptimizationSubstitutions)
 {
     return
         (optimizationProblem != newOptimizationProblem ||
          optimizationSubstitutions != newOptimizationSubstitutions);
 }
Example #4
0
        static IEnumerable <Substitution> GetSubstitutions(OptimizationSegments optimizationSegments, OptimizationProblem optimizationProblem, double curveLength, IEnumerable <CurveSpecification> curveSpecifications)
        {
            yield return(new Substitution(optimizationProblem.CurveLength, Terms.Constant(curveLength)));

            IEnumerable <PointCurveSpecification>     pointCurveSpecifications     = curveSpecifications.OfType <PointCurveSpecification>();
            IEnumerable <DirectionCurveSpecification> directionCurveSpecifications = curveSpecifications.OfType <DirectionCurveSpecification>();
            IEnumerable <CurvatureCurveSpecification> curvatureCurveSpecifications = curveSpecifications.OfType <CurvatureCurveSpecification>();

            foreach (int pointSpecificationTemplateIndex in Enumerable.Range(0, optimizationProblem.PointSpecificationTemplates.Count()))
            {
                SpecificationTemplate pointSpecificationTemplate = optimizationProblem.PointSpecificationTemplates.ElementAt(pointSpecificationTemplateIndex);

                if (pointSpecificationTemplateIndex < pointCurveSpecifications.Count())
                {
                    PointCurveSpecification pointCurveSpecification = pointCurveSpecifications.ElementAt(pointSpecificationTemplateIndex);

                    ValueTerm position = Terms.Constant(pointCurveSpecification.Position);
                    ValueTerm value    = Terms.Constant(pointCurveSpecification.Point.X, pointCurveSpecification.Point.Y);

                    foreach (Substitution substitution in pointSpecificationTemplate.GetSubstitutions(optimizationSegments.Segments, pointCurveSpecification.Position, position, value))
                    {
                        yield return(substitution);
                    }
                }
                else
                {
                    foreach (Substitution substitution in pointSpecificationTemplate.GetSubstitutions(optimizationSegments.Segments))
                    {
                        yield return(substitution);
                    }
                }
            }

            foreach (int directionSpecificationTemplateIndex in Enumerable.Range(0, optimizationProblem.DirectionSpecificationTemplates.Count()))
            {
                SpecificationTemplate directionSpecificationTemplate = optimizationProblem.DirectionSpecificationTemplates.ElementAt(directionSpecificationTemplateIndex);

                if (directionSpecificationTemplateIndex < directionCurveSpecifications.Count())
                {
                    DirectionCurveSpecification directionCurveSpecification = directionCurveSpecifications.ElementAt(directionSpecificationTemplateIndex);

                    ValueTerm position = Terms.Constant(directionCurveSpecification.Position);
                    ValueTerm value    = Terms.Constant(directionCurveSpecification.Direction);

                    foreach (Substitution substitution in directionSpecificationTemplate.GetSubstitutions(optimizationSegments.Segments, directionCurveSpecification.Position, position, value))
                    {
                        yield return(substitution);
                    }
                }
                else
                {
                    foreach (Substitution substitution in directionSpecificationTemplate.GetSubstitutions(optimizationSegments.Segments))
                    {
                        yield return(substitution);
                    }
                }
            }

            foreach (int curvatureSpecificationTemplateIndex in Enumerable.Range(0, optimizationProblem.CurvatureSpecificationTemplates.Count()))
            {
                SpecificationTemplate curvatureSpecificationTemplate = optimizationProblem.CurvatureSpecificationTemplates.ElementAt(curvatureSpecificationTemplateIndex);

                if (curvatureSpecificationTemplateIndex < curvatureCurveSpecifications.Count())
                {
                    CurvatureCurveSpecification curvatureCurveSpecification = curvatureCurveSpecifications.ElementAt(curvatureSpecificationTemplateIndex);

                    ValueTerm position = Terms.Constant(curvatureCurveSpecification.Position);
                    ValueTerm value    = Terms.Constant(curvatureCurveSpecification.Curvature);

                    foreach (Substitution substitution in curvatureSpecificationTemplate.GetSubstitutions(optimizationSegments.Segments, curvatureCurveSpecification.Position, position, value))
                    {
                        yield return(substitution);
                    }
                }
                else
                {
                    foreach (Substitution substitution in curvatureSpecificationTemplate.GetSubstitutions(optimizationSegments.Segments))
                    {
                        yield return(substitution);
                    }
                }
            }
        }
Example #5
0
 public static OptimizationSubstitutions Create(OptimizationSegments optimizationSegments, OptimizationProblem optimizationProblem, Specification specification)
 {
     return(new OptimizationSubstitutions
            (
                optimizationSegments,
                optimizationProblem,
                specification.BasicSpecification.CurveLength,
                specification.BasicSpecification.CurveSpecifications
            ));
 }