@@ -142,22 +142,9 @@ function _update!(
142
142
return
143
143
end
144
144
145
- function optimize_multiobjective! (algorithm:: DominguezRios , model:: Optimizer )
145
+ function minimize_multiobjective! (algorithm:: DominguezRios , model:: Optimizer )
146
+ @assert MOI. get (model. inner, MOI. ObjectiveSense ()) == MOI. MIN_SENSE
146
147
start_time = time ()
147
- sense = MOI. get (model. inner, MOI. ObjectiveSense ())
148
- if sense == MOI. MAX_SENSE
149
- old_obj, neg_obj = copy (model. f), - model. f
150
- MOI. set (model, MOI. ObjectiveFunction {typeof(neg_obj)} (), neg_obj)
151
- MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
152
- status, solutions = optimize_multiobjective! (algorithm, model)
153
- MOI. set (model, MOI. ObjectiveFunction {typeof(old_obj)} (), old_obj)
154
- MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
155
- if solutions != = nothing
156
- solutions = [SolutionPoint (s. x, - s. y) for s in solutions]
157
- end
158
- model. ideal_point .*= - 1
159
- return status, solutions
160
- end
161
148
n = MOI. output_dimension (model. f)
162
149
L = [_DominguezRiosBox[] for i in 1 : n]
163
150
scalars = MOI. Utilities. scalarize (model. f)
@@ -166,7 +153,7 @@ function optimize_multiobjective!(algorithm::DominguezRios, model::Optimizer)
166
153
# Ideal and Nadir point estimation
167
154
for (i, f_i) in enumerate (scalars)
168
155
MOI. set (model. inner, MOI. ObjectiveFunction {typeof(f_i)} (), f_i)
169
- MOI. set (model. inner, MOI. ObjectiveSense (), sense )
156
+ MOI. set (model. inner, MOI. ObjectiveSense (), MOI . MIN_SENSE )
170
157
MOI. optimize! (model. inner)
171
158
status = MOI. get (model. inner, MOI. TerminationStatus ())
172
159
if ! _is_scalar_status_optimal (status)
@@ -175,18 +162,17 @@ function optimize_multiobjective!(algorithm::DominguezRios, model::Optimizer)
175
162
_, Y = _compute_point (model, variables, f_i)
176
163
yI[i] = Y
177
164
model. ideal_point[i] = Y
178
- rev_sense = sense == MOI. MIN_SENSE ? MOI. MAX_SENSE : MOI. MIN_SENSE
179
- MOI. set (model. inner, MOI. ObjectiveSense (), rev_sense)
165
+ MOI. set (model. inner, MOI. ObjectiveSense (), MOI. MAX_SENSE)
180
166
MOI. optimize! (model. inner)
181
167
status = MOI. get (model. inner, MOI. TerminationStatus ())
182
168
if ! _is_scalar_status_optimal (status)
183
- _warn_on_nonfinite_anti_ideal (algorithm, sense , i)
169
+ _warn_on_nonfinite_anti_ideal (algorithm, MOI . MIN_SENSE , i)
184
170
return status, nothing
185
171
end
186
172
_, Y = _compute_point (model, variables, f_i)
187
173
yN[i] = Y + 1
188
174
end
189
- MOI. set (model. inner, MOI. ObjectiveSense (), sense )
175
+ MOI. set (model. inner, MOI. ObjectiveSense (), MOI . MIN_SENSE )
190
176
ϵ = 1 / (2 * n * (maximum (yN - yI) - 1 ))
191
177
# If ϵ is small, then the scalar objectives can contain terms that fall
192
178
# below the tolerance level of the solver. To fix this, we rescale the
0 commit comments