@@ -159,23 +159,13 @@ function MOI.modify(
159
159
constant = - constant
160
160
end
161
161
vi = obj_change. variable
162
- # if haskey(primal_dual_map.primal_convar_to_primal_convarcon_and_index, vi)
163
- # ci_primal, index =
164
- # primal_dual_map.primal_convar_to_primal_convarcon_and_index[vi]
165
- # ci_dual = primal_dual_map.primal_convarcon_to_dual_con[ci_primal]
166
- # if ci_dual === NO_CONSTRAINT
167
- # return
168
- # end
169
- # constant = -constant
170
- # else
171
- # ci_dual = primal_dual_map.primal_var_to_dual_con[vi]
172
- # index = 1
173
- # end
174
162
data = get (primal_dual_map. primal_variable_data, vi, nothing )
175
163
if data === nothing
176
164
# error
177
- elseif data. dual_constraint == NO_CONSTRAINT
165
+ elseif data. dual_constraint === nothing
178
166
return
167
+ elseif data. primal_constrained_variable_constraint != = nothing
168
+ constant = - constant
179
169
end
180
170
_change_constant (
181
171
optimizer. dual_problem. dual_model,
@@ -257,53 +247,28 @@ function MOI.get(
257
247
data = get (primal_dual_map. primal_variable_data, vi, nothing )
258
248
if data === nothing
259
249
# error
260
- elseif data. dual_constraint == NO_CONSTRAINT
250
+ elseif data. dual_constraint === nothing
261
251
return zero (T)
262
252
elseif data. primal_constrained_variable_constraint === nothing
263
253
return - MOI. get (
264
254
optimizer. dual_problem. dual_model,
265
255
MOI. ConstraintDual (),
266
- primal_dual_map . primal_var_to_dual_con[vi] ,
256
+ data . dual_constraint ,
267
257
)
268
- elseif data. dual_constraint isa MOI. ConstraintIndex{<: MOI.AbstractVectorFunction }
258
+ elseif data. dual_constraint isa
259
+ MOI. ConstraintIndex{<: MOI.AbstractVectorFunction }
269
260
return MOI. get (
270
- optimizer. dual_problem. dual_model,
271
- MOI. ConstraintDual (),
272
- data. dual_constraint,
273
- )[data. primal_constrained_variable_index]
261
+ optimizer. dual_problem. dual_model,
262
+ MOI. ConstraintDual (),
263
+ data. dual_constraint,
264
+ )[data. primal_constrained_variable_index]
274
265
else
275
266
return MOI. get (
276
- optimizer. dual_problem. dual_model,
277
- MOI. ConstraintDual (),
278
- ci_dual ,
279
- )
267
+ optimizer. dual_problem. dual_model,
268
+ MOI. ConstraintDual (),
269
+ data . dual_constraint ,
270
+ )
280
271
end
281
- # if haskey(primal_dual_map.primal_convar_to_primal_convarcon_and_index, vi)
282
- # ci_primal, idx =
283
- # primal_dual_map.primal_convar_to_primal_convarcon_and_index[vi]
284
- # ci_dual = primal_dual_map.primal_convarcon_to_dual_con[ci_primal]
285
- # if ci_dual === NO_CONSTRAINT
286
- # return zero(T)
287
- # elseif ci_dual isa MOI.ConstraintIndex{<:MOI.AbstractVectorFunction}
288
- # return MOI.get(
289
- # optimizer.dual_problem.dual_model,
290
- # MOI.ConstraintDual(),
291
- # ci_dual,
292
- # )[idx]
293
- # else
294
- # return MOI.get(
295
- # optimizer.dual_problem.dual_model,
296
- # MOI.ConstraintDual(),
297
- # ci_dual,
298
- # )
299
- # end
300
- # else
301
- # return -MOI.get(
302
- # optimizer.dual_problem.dual_model,
303
- # MOI.ConstraintDual(),
304
- # primal_dual_map.primal_var_to_dual_con[vi],
305
- # )
306
- # end
307
272
end
308
273
309
274
function MOI. get (
@@ -312,16 +277,17 @@ function MOI.get(
312
277
ci:: MOI.ConstraintIndex{F,S} ,
313
278
) where {F<: MOI.AbstractScalarFunction ,S<: MOI.AbstractScalarSet }
314
279
primal_dual_map = optimizer. dual_problem. primal_dual_map
315
- if haskey (primal_dual_map. primal_convarcon_to_dual_con, ci)
316
- ci_dual = primal_dual_map. primal_convarcon_to_dual_con[ci]
317
- if ci_dual === NO_CONSTRAINT
280
+ if haskey (primal_dual_map. primal_constrained_variables, ci)
281
+ vi = primal_dual_map. primal_constrained_variables[ci][]
282
+ ci_dual = primal_dual_map. primal_variable_data[vi]. dual_constraint
283
+ if ci_dual === nothing
318
284
return MOI. Utilities. eval_variables (
319
- primal_dual_map. primal_convarcon_to_dual_function[ci] ,
320
- ) do vi
285
+ primal_dual_map. primal_variable_data[vi] . primal_function ,
286
+ ) do inner_vi
321
287
return MOI. get (
322
288
optimizer. dual_problem. dual_model,
323
289
MOI. VariablePrimal (),
324
- vi ,
290
+ inner_vi ,
325
291
)
326
292
end
327
293
end
@@ -339,7 +305,7 @@ function MOI.get(
339
305
return MOI. get (
340
306
optimizer. dual_problem. dual_model,
341
307
MOI. VariablePrimal (),
342
- primal_dual_map. primal_con_to_dual_var_vec [ci][],
308
+ primal_dual_map. primal_constraint_data [ci]. dual_variables [],
343
309
)
344
310
end
345
311
end
@@ -350,29 +316,32 @@ function MOI.get(
350
316
ci:: MOI.ConstraintIndex{F,S} ,
351
317
) where {F<: MOI.AbstractVectorFunction ,S<: MOI.AbstractVectorSet }
352
318
primal_dual_map = optimizer. dual_problem. primal_dual_map
353
- if haskey (primal_dual_map. primal_convarcon_to_dual_con, ci)
354
- ci_dual = primal_dual_map. primal_convarcon_to_dual_con[ci]
355
- if ci_dual === NO_CONSTRAINT
356
- return MOI. Utilities. eval_variables (
357
- primal_dual_map. primal_convarcon_to_dual_function[ci],
358
- ) do vi
359
- return MOI. get (
360
- optimizer. dual_problem. dual_model,
361
- MOI. VariablePrimal (),
362
- vi,
363
- )
364
- end
319
+ if ! haskey (primal_dual_map. primal_constraint_data, ci)
320
+ vis = primal_dual_map. primal_constrained_variables[ci]
321
+ ci_dual = primal_dual_map. primal_variable_data[vis[1 ]]. dual_constraint
322
+ if ci_dual === nothing
323
+ return [
324
+ MOI. Utilities. eval_variables (
325
+ primal_dual_map. primal_variable_data[vi]. primal_function,
326
+ ) do inner_vi
327
+ return MOI. get (
328
+ optimizer. dual_problem. dual_model,
329
+ MOI. VariablePrimal (),
330
+ inner_vi,
331
+ )
332
+ end for vi in vis
333
+ ]
365
334
end
366
335
return MOI. get (
367
336
optimizer. dual_problem. dual_model,
368
337
MOI. ConstraintPrimal (),
369
- primal_dual_map . primal_convarcon_to_dual_con[ci] ,
338
+ ci_dual ,
370
339
)
371
340
else
372
341
return MOI. get .(
373
342
optimizer. dual_problem. dual_model,
374
343
MOI. VariablePrimal (),
375
- primal_dual_map. primal_con_to_dual_var_vec [ci],
344
+ primal_dual_map. primal_constraint_data [ci]. dual_variables ,
376
345
)
377
346
end
378
347
end
@@ -383,9 +352,11 @@ function MOI.get(
383
352
ci:: MOI.ConstraintIndex{F,S} ,
384
353
) where {T,F<: MOI.AbstractScalarFunction ,S<: MOI.AbstractScalarSet }
385
354
primal_dual_map = optimizer. dual_problem. primal_dual_map
386
- if haskey (primal_dual_map. primal_convarcon_to_dual_con, ci)
387
- ci_dual = primal_dual_map. primal_convarcon_to_dual_con[ci]
388
- if ci_dual === NO_CONSTRAINT
355
+ data = get (primal_dual_map. primal_constraint_data, ci, nothing )
356
+ if data === nothing
357
+ first_vi = primal_dual_map. primal_constrained_variables[ci][1 ]
358
+ ci_dual = primal_dual_map. primal_variable_data[first_vi]. dual_constraint
359
+ if ci_dual === nothing
389
360
return zero (T)
390
361
else
391
362
return MOI. get (
@@ -395,17 +366,16 @@ function MOI.get(
395
366
)
396
367
end
397
368
else
398
- primal_ci_constant =
399
- primal_dual_map. primal_con_to_primal_constants_vec[ci][1 ]
369
+ primal_ci_constant = data. primal_set_constants[1 ]
400
370
# If it has no key then there is no dual constraint
401
- if ! haskey (primal_dual_map. primal_con_to_dual_convarcon, ci)
371
+ ci_dual = data. dual_constrained_variable_constraint
372
+ if ci_dual === nothing
402
373
return - primal_ci_constant
403
374
end
404
- ci_dual_problem = primal_dual_map. primal_con_to_dual_convarcon[ci]
405
375
return MOI. get (
406
376
optimizer. dual_problem. dual_model,
407
377
MOI. ConstraintDual (),
408
- ci_dual_problem ,
378
+ ci_dual ,
409
379
) - primal_ci_constant
410
380
end
411
381
end
@@ -416,13 +386,12 @@ function MOI.get(
416
386
ci:: MOI.ConstraintIndex{F,S} ,
417
387
) where {T,F<: MOI.AbstractVectorFunction ,S<: MOI.AbstractVectorSet }
418
388
primal_dual_map = optimizer. dual_problem. primal_dual_map
419
- if haskey (primal_dual_map. primal_convarcon_to_dual_con, ci)
420
- ci_dual = primal_dual_map. primal_convarcon_to_dual_con[ci]
421
- if ci_dual === NO_CONSTRAINT
422
- n = MOI. output_dimension (
423
- primal_dual_map. primal_convarcon_to_dual_function[ci],
424
- )
425
- return zeros (T, n)
389
+ data = get (primal_dual_map. primal_constraint_data, ci, nothing )
390
+ if data === nothing
391
+ vis = primal_dual_map. primal_constrained_variables[ci]
392
+ ci_dual = primal_dual_map. primal_variable_data[vis[1 ]]. dual_constraint
393
+ if ci_dual === nothing
394
+ return zeros (T, length (vis))
426
395
else
427
396
return MOI. get (
428
397
optimizer. dual_problem. dual_model,
@@ -431,18 +400,17 @@ function MOI.get(
431
400
)
432
401
end
433
402
else
403
+ ci_dual = data. dual_constrained_variable_constraint
434
404
# If it has no key then there is no dual constraint
435
- if ! haskey (primal_dual_map . primal_con_to_dual_convarcon, ci)
405
+ if ci_dual === nothing
436
406
# The number of dual variable associated with the primal constraint is the ci dimension
437
- ci_dimension =
438
- length (primal_dual_map. primal_con_to_dual_var_vec[ci])
407
+ ci_dimension = length (data. dual_variables)
439
408
return zeros (T, ci_dimension)
440
409
end
441
- ci_dual_problem = primal_dual_map. primal_con_to_dual_convarcon[ci]
442
410
return MOI. get (
443
411
optimizer. dual_problem. dual_model,
444
412
MOI. ConstraintDual (),
445
- ci_dual_problem ,
413
+ ci_dual ,
446
414
)
447
415
end
448
416
end
0 commit comments