LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
MathematicalModelConstrainedMetaheuristicProblem.cs
Go to the documentation of this file.
2using MetaheuristicsPlatform.Constraints;
3using MetaheuristicsPlatform.Core;
4using MetaheuristicsPlatform.SearchSpaces.Continuous;
5
7
9 IContinuousConstrainedOptimizationProblem
10{
11 private readonly MathematicalModel _model;
12 private readonly MathematicalModelMetaheuristicEncoding _encoding;
13 private readonly MathematicalModelCandidateEvaluator _evaluator;
14 private readonly LinearConstraint[] _inequalities;
15 private readonly LinearConstraint[] _equalities;
16
20 double equalityTolerance = 1.0e-6)
21 {
22 ArgumentNullException.ThrowIfNull(
23 model);
24
25 ArgumentNullException.ThrowIfNull(
26 encoding);
27
28 if (!double.IsFinite(
29 equalityTolerance) ||
30 equalityTolerance < 0.0)
31 {
32 throw new ArgumentOutOfRangeException(
33 nameof(equalityTolerance));
34 }
35
36 model.EnsureValid();
37
38 _model =
39 model;
40
41 _encoding =
42 encoding;
43
44 _evaluator =
46 model);
47
48 if (_encoding.ModelDimension !=
49 _evaluator.Dimension)
50 {
51 throw new InvalidOperationException(
52 "Metaheuristic encoding and mathematical model dimensions differ.");
53 }
54
55 _inequalities =
56 model.Constraints
57 .Where(
58 constraint =>
59 constraint.IsEnabled &&
60 constraint.Sense is
61 MathematicalConstraintSense.LessThanOrEqual or
62 MathematicalConstraintSense.GreaterThanOrEqual)
63 .OrderBy(
64 constraint =>
65 constraint.Id)
66 .ToArray();
67
68 _equalities =
69 model.Constraints
70 .Where(
71 constraint =>
72 constraint.IsEnabled &&
73 constraint.Sense ==
75 .OrderBy(
76 constraint =>
77 constraint.Id)
78 .ToArray();
79
81 equalityTolerance;
82 }
83
84 public IBoundedContinuousSearchSpace SearchSpace =>
85 _encoding.SearchSpace;
86
87 public OptimizationSense Sense =>
88 _model.Objective.Sense switch
89 {
91 OptimizationSense.Minimize,
92
94 OptimizationSense.Maximize,
95
96 _ =>
97 throw new NotSupportedException(
98 $"Objective sense '{_model.Objective.Sense}' is not supported by the MetaheuristicsPlatform bridge.")
99 };
100
101 public int InequalityCount =>
102 _inequalities.Length;
103
104 public int EqualityCount =>
105 _equalities.Length;
106
107 public double EqualityTolerance
108 {
109 get;
110 }
111
112 public double EvaluateObjective(
113 ReadOnlySpan<double> solution)
114 {
115 double[] decoded =
116 _encoding.Decode(
117 solution);
118
119 return _evaluator.EvaluateObjective(
120 decoded);
121 }
122
124 ReadOnlySpan<double> solution,
125 Span<double> inequalities,
126 Span<double> equalities)
127 {
128 if (inequalities.Length !=
130 equalities.Length !=
132 {
133 throw new ArgumentException(
134 "Constraint output dimensions do not match the mathematical model.");
135 }
136
137 double[] decoded =
138 _encoding.Decode(
139 solution);
140
141 for (int index = 0;
142 index < _inequalities.Length;
143 index++)
144 {
145 inequalities[index] =
146 _evaluator.EvaluateCanonicalConstraintResidual(
147 _inequalities[index],
148 decoded);
149 }
150
151 for (int index = 0;
152 index < _equalities.Length;
153 index++)
154 {
155 equalities[index] =
156 _evaluator.EvaluateCanonicalConstraintResidual(
157 _equalities[index],
158 decoded);
159 }
160 }
161
162 public double[] DecodeCandidate(
163 ReadOnlySpan<double> solution)
164 {
165 return _encoding.Decode(
166 solution);
167 }
168
170 ReadOnlySpan<double> solution)
171 {
172 double[] decoded =
174 solution);
175
176 return _evaluator.IsFeasible(
177 decoded,
179 }
180}
void EvaluateConstraints(ReadOnlySpan< double > solution, Span< double > inequalities, Span< double > equalities)
MathematicalModelConstrainedMetaheuristicProblem(MathematicalModel model, MathematicalModelMetaheuristicEncoding encoding, double equalityTolerance=1.0e-6)
Represents one linear constraint in a mathematical optimization model.
Represents a solver-independent mathematical optimization model.
void EnsureValid()
Validates the complete mathematical model.
@ Maximize
The objective value must be maximized.
@ Minimize
The objective value must be minimized.
MathematicalConstraintSense
Identifies the relational sense of a mathematical constraint.