Skip to content

Commit f764901

Browse files
committed
Update
1 parent 5e52de8 commit f764901

File tree

2 files changed

+155
-0
lines changed

2 files changed

+155
-0
lines changed

src/Utilities/cachingoptimizer.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ function MOI.supports_add_constrained_variable(
394394
MOI.supports_add_constrained_variable(m.optimizer, S)::Bool
395395
)
396396
end
397+
397398
function MOI.add_constrained_variable(
398399
m::CachingOptimizer,
399400
set::S,

test/Utilities/cachingoptimizer.jl

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,6 +1106,160 @@ function test_show()
11061106
return
11071107
end
11081108

1109+
function test_add_variable()
1110+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1111+
cache = MOI.Utilities.Model{Float64}()
1112+
optimizer = MOI.Utilities.MockOptimizer(
1113+
MOI.Utilities.Model{Float64}(),
1114+
)
1115+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1116+
MOI.Utilities.reset_optimizer(model, optimizer)
1117+
MOI.Utilities.attach_optimizer(model)
1118+
x = MOI.add_variable(model)
1119+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[x])
1120+
end
1121+
return
1122+
end
1123+
1124+
function test_add_variables()
1125+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1126+
cache = MOI.Utilities.Model{Float64}()
1127+
optimizer = MOI.Utilities.MockOptimizer(
1128+
MOI.Utilities.Model{Float64}(),
1129+
)
1130+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1131+
MOI.Utilities.reset_optimizer(model, optimizer)
1132+
MOI.Utilities.attach_optimizer(model)
1133+
x = MOI.add_variables(model, 2)
1134+
for xi in x
1135+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[xi])
1136+
end
1137+
end
1138+
return
1139+
end
1140+
1141+
function test_add_constrained_variable()
1142+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1143+
cache = MOI.Utilities.Model{Float64}()
1144+
optimizer = MOI.Utilities.MockOptimizer(
1145+
MOI.Utilities.Model{Float64}(),
1146+
)
1147+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1148+
MOI.Utilities.reset_optimizer(model, optimizer)
1149+
MOI.Utilities.attach_optimizer(model)
1150+
x, c = MOI.add_constrained_variable(model, MOI.ZeroOne())
1151+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[x])
1152+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[c])
1153+
end
1154+
return
1155+
end
1156+
1157+
function test_add_constrained_variables()
1158+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1159+
cache = MOI.Utilities.Model{Float64}()
1160+
optimizer = MOI.Utilities.MockOptimizer(
1161+
MOI.Utilities.Model{Float64}(),
1162+
)
1163+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1164+
MOI.Utilities.reset_optimizer(model, optimizer)
1165+
MOI.Utilities.attach_optimizer(model)
1166+
x, c = MOI.add_constrained_variables(model, MOI.Zeros(2))
1167+
for xi in x
1168+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[xi])
1169+
end
1170+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[c])
1171+
end
1172+
return
1173+
end
1174+
1175+
function test_modify_constraint()
1176+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1177+
cache = MOI.Utilities.Model{Float64}()
1178+
optimizer = MOI.Utilities.MockOptimizer(
1179+
MOI.Utilities.Model{Float64}(),
1180+
)
1181+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1182+
MOI.Utilities.reset_optimizer(model, optimizer)
1183+
MOI.Utilities.attach_optimizer(model)
1184+
x = MOI.add_variable(model)
1185+
c = MOI.add_constraint(model, 1.0 * x, MOI.EqualTo(1.0))
1186+
c_opt = model.model_to_optimizer_map[c]
1187+
f = MOI.get(optimizer, MOI.ConstraintFunction(), c_opt)
1188+
@test f 1.0 * model.model_to_optimizer_map[x]
1189+
MOI.modify(
1190+
model,
1191+
c,
1192+
MOI.ScalarCoefficientChange(x, 2.0),
1193+
)
1194+
c_opt = model.model_to_optimizer_map[c]
1195+
f = MOI.get(optimizer, MOI.ConstraintFunction(), c_opt)
1196+
@test f 2.0 * model.model_to_optimizer_map[x]
1197+
end
1198+
return
1199+
end
1200+
1201+
function test_modify_constraint()
1202+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1203+
cache = MOI.Utilities.Model{Float64}()
1204+
optimizer = MOI.Utilities.MockOptimizer(
1205+
MOI.Utilities.Model{Float64}(),
1206+
)
1207+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1208+
MOI.Utilities.reset_optimizer(model, optimizer)
1209+
MOI.Utilities.attach_optimizer(model)
1210+
x = MOI.add_variable(model)
1211+
f = 1.0 * x
1212+
attr = MOI.ObjectiveFunction{typeof(f)}()
1213+
MOI.set(model, attr, f)
1214+
@test MOI.get(optimizer, attr) 1.0 * model.model_to_optimizer_map[x]
1215+
MOI.modify(
1216+
model,
1217+
attr,
1218+
MOI.ScalarCoefficientChange(x, 2.0),
1219+
)
1220+
@test MOI.get(optimizer, attr) 2.0 * model.model_to_optimizer_map[x]
1221+
end
1222+
return
1223+
end
1224+
1225+
function test_delete_invalid_index()
1226+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1227+
cache = MOI.Utilities.Model{Float64}()
1228+
optimizer = MOI.Utilities.MockOptimizer(
1229+
MOI.Utilities.Model{Float64}(),
1230+
)
1231+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1232+
MOI.Utilities.reset_optimizer(model, optimizer)
1233+
MOI.Utilities.attach_optimizer(model)
1234+
x = MOI.add_variable(model)
1235+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[x])
1236+
MOI.delete(model, x)
1237+
@test !MOI.is_valid(optimizer, model.model_to_optimizer_map[x])
1238+
@test_throws(MOI.InvalidIndex, MOI.delete(model, x))
1239+
end
1240+
return
1241+
end
1242+
1243+
function test_delete_variables()
1244+
for mode in (MOI.Utilities.AUTOMATIC, MOI.Utilities.MANUAL)
1245+
cache = MOI.Utilities.Model{Float64}()
1246+
optimizer = MOI.Utilities.MockOptimizer(
1247+
MOI.Utilities.Model{Float64}(),
1248+
)
1249+
model = MOI.Utilities.CachingOptimizer(cache, mode)
1250+
MOI.Utilities.reset_optimizer(model, optimizer)
1251+
MOI.Utilities.attach_optimizer(model)
1252+
x, y = MOI.add_variables(model, 2)
1253+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[x])
1254+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[y])
1255+
MOI.delete(model, [x])
1256+
@test_throws KeyError model.model_to_optimizer_map[x]
1257+
@test MOI.is_valid(optimizer, model.model_to_optimizer_map[y])
1258+
@test_throws(MOI.InvalidIndex, MOI.delete(model, x))
1259+
end
1260+
return
1261+
end
1262+
11091263
end # module
11101264

11111265
TestCachingOptimizer.runtests()

0 commit comments

Comments
 (0)