@@ -239,6 +239,66 @@ function MOI.add_variables(m::CachingOptimizer, n)
239
239
return vindices
240
240
end
241
241
242
+ function MOI. add_constrained_variable (m:: CachingOptimizer , set:: MOI.AbstractScalarSet )
243
+ if m. state == MOIU. ATTACHED_OPTIMIZER
244
+ if m. mode == MOIU. AUTOMATIC
245
+ try
246
+ vindex_optimizer, cindex_optimizer =
247
+ MOI. add_constrained_variable (m. optimizer, set)
248
+ catch err
249
+ if err isa MOI. NotAllowedError
250
+ reset_optimizer (m)
251
+ else
252
+ rethrow (err)
253
+ end
254
+ end
255
+ else
256
+ vindex_optimizer, cindex_optimizer =
257
+ MOI. add_constrained_variable (m. optimizer, set)
258
+ end
259
+ end
260
+ vindex = MOI. add_variable (m. model_cache)
261
+ cindex = MOI. add_constraint (m. model_cache, MOI. SingleVariable (vindex), set)
262
+ if m. state == MOIU. ATTACHED_OPTIMIZER
263
+ m. model_to_optimizer_map[vindex] = vindex_optimizer
264
+ m. optimizer_to_model_map[vindex_optimizer] = vindex
265
+ m. model_to_optimizer_map[cindex] = cindex_optimizer
266
+ m. optimizer_to_model_map[cindex_optimizer] = cindex
267
+ end
268
+ return vindex, cindex
269
+ end
270
+
271
+ function MOI. add_constrained_variables (m:: CachingOptimizer , set:: MOI.AbstractVectorSet )
272
+ if m. state == ATTACHED_OPTIMIZER
273
+ if m. mode == AUTOMATIC
274
+ try
275
+ vindices_optimizer, cindex_optimizer =
276
+ MOI. add_constrained_variables (m. optimizer, set)
277
+ catch err
278
+ if err isa MOI. NotAllowedError
279
+ reset_optimizer (m)
280
+ else
281
+ rethrow (err)
282
+ end
283
+ end
284
+ else
285
+ vindices_optimizer, cindex_optimizer =
286
+ MOI. add_constrained_variables (m. optimizer, set)
287
+ end
288
+ end
289
+ vindices = MOI. add_variables (m. model_cache, MOI. dimension (set))
290
+ cindex = MOI. add_constraint (m. model_cache, MOI. VectorOfVariables (vindices), set)
291
+ if m. state == ATTACHED_OPTIMIZER
292
+ for (vindex, vindex_optimizer) in zip (vindices, vindices_optimizer)
293
+ m. model_to_optimizer_map[vindex] = vindex_optimizer
294
+ m. optimizer_to_model_map[vindex_optimizer] = vindex
295
+ end
296
+ m. model_to_optimizer_map[cindex] = cindex_optimizer
297
+ m. optimizer_to_model_map[cindex_optimizer] = cindex
298
+ end
299
+ return vindices, cindex
300
+ end
301
+
242
302
function MOI. supports_constraint (m:: CachingOptimizer , F:: Type{<:MOI.AbstractFunction} , S:: Type{<:MOI.AbstractSet} )
243
303
MOI. supports_constraint (m. model_cache, F, S) && (m. state == NO_OPTIMIZER || MOI. supports_constraint (m. optimizer, F, S))
244
304
end
0 commit comments