@@ -1201,7 +1201,11 @@ end
1201
1201
# ##
1202
1202
1203
1203
function _zero_objective (model:: Optimizer )
1204
- num_vars = length (model. variable_info)
1204
+ _update_if_necessary (model)
1205
+ pInt = Ref {Cint} (0 )
1206
+ ret = GRBgetintattr (model, " NumVars" , pInt)
1207
+ _check_ret (model, ret)
1208
+ num_vars = pInt[]
1205
1209
obj = zeros (Float64, num_vars)
1206
1210
ret = GRBdelq (model)
1207
1211
_check_ret (model, ret)
@@ -1275,7 +1279,11 @@ function MOI.set(
1275
1279
ret = GRBdelq (model)
1276
1280
_check_ret (model, ret)
1277
1281
end
1278
- num_vars = length (model. variable_info)
1282
+ _update_if_necessary (model)
1283
+ pInt = Ref {Cint} (0 )
1284
+ ret = GRBgetintattr (model, " NumVars" , pInt)
1285
+ _check_ret (model, ret)
1286
+ num_vars = pInt[]
1279
1287
obj = zeros (Float64, num_vars)
1280
1288
for term in f. terms
1281
1289
obj[column (model, term. variable)] += term. coefficient
@@ -1292,9 +1300,13 @@ end
1292
1300
1293
1301
function _get_affine_objective (model:: Optimizer ; is_multiobjective:: Bool )
1294
1302
_update_if_necessary (model)
1295
- dest = zeros (length (model. variable_info))
1303
+ pInt = Ref {Cint} (0 )
1304
+ ret = GRBgetintattr (model, " NumVars" , pInt)
1305
+ _check_ret (model, ret)
1306
+ num_vars = pInt[]
1307
+ dest = zeros (num_vars)
1296
1308
name = is_multiobjective ? " ObjN" : " Obj"
1297
- ret = GRBgetdblattrarray (model, name, 0 , length (dest) , dest)
1309
+ ret = GRBgetdblattrarray (model, name, 0 , num_vars , dest)
1298
1310
_check_ret (model, ret)
1299
1311
terms = MOI. ScalarAffineTerm{Float64}[]
1300
1312
for (index, info) in model. variable_info
@@ -1330,7 +1342,11 @@ function MOI.set(
1330
1342
affine_indices, affine_coefficients, I, J, V =
1331
1343
_indices_and_coefficients (model, f)
1332
1344
# We need to zero out any existing linear objective.
1333
- obj = zeros (length (model. variable_info))
1345
+ _update_if_necessary (model)
1346
+ pInt = Ref {Cint} (0 )
1347
+ ret = GRBgetintattr (model, " NumVars" , pInt)
1348
+ _check_ret (model, ret)
1349
+ obj = zeros (pInt[])
1334
1350
for (i, c) in zip (affine_indices, affine_coefficients)
1335
1351
obj[i+ 1 ] = c
1336
1352
end
@@ -1354,8 +1370,12 @@ function MOI.get(
1354
1370
:: MOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{Float64}} ,
1355
1371
)
1356
1372
_update_if_necessary (model)
1357
- dest = zeros (length (model. variable_info))
1358
- ret = GRBgetdblattrarray (model, " Obj" , 0 , length (dest), dest)
1373
+ pInt = Ref {Cint} (0 )
1374
+ ret = GRBgetintattr (model, " NumVars" , pInt)
1375
+ _check_ret (model, ret)
1376
+ num_vars = pInt[]
1377
+ dest = zeros (num_vars)
1378
+ ret = GRBgetdblattrarray (model, " Obj" , 0 , num_vars, dest)
1359
1379
_check_ret (model, ret)
1360
1380
terms = MOI. ScalarAffineTerm{Float64}[]
1361
1381
for (index, info) in model. variable_info
@@ -3448,6 +3468,7 @@ function MOI.set(model::Optimizer, attr::MOI.Name, name::String)
3448
3468
end
3449
3469
3450
3470
MOI. get (model:: Optimizer , :: MOI.NumberOfVariables ) = length (model. variable_info)
3471
+
3451
3472
function MOI. get (model:: Optimizer , :: MOI.ListOfVariableIndices )
3452
3473
return sort! (collect (keys (model. variable_info)), by = x -> x. value)
3453
3474
end
0 commit comments