Skip to content

Commit 44d0eb4

Browse files
add new tests and fix affine cache
1 parent 842e275 commit 44d0eb4

2 files changed

Lines changed: 112 additions & 27 deletions

File tree

src/parametric_functions.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -705,10 +705,12 @@ function _parametric_affine_terms(
705705
base + term.scalar_term.coefficient * model.parameters[p_idx_val]
706706
end
707707

708-
for (term, coef) in f.affine_data
709-
output_idx = term.output_index
710-
var = term.scalar_term.variable
711-
param_terms_dict[(var, output_idx)] = coef
708+
# TODO: check if affine data should only contains variables that appear in pv
709+
for (var, coef) in f.affine_data
710+
if !haskey(param_terms_dict, var)
711+
param_terms_dict[var] = zero(T)
712+
end
713+
param_terms_dict[var] += coef
712714
end
713715

714716
return param_terms_dict

test/jump_tests.jl

Lines changed: 106 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,27 +1390,110 @@ end
13901390
# @test is_valid(model, con)
13911391
# optimize!(model)
13921392
# @test value(x) ≈ 0.416888 atol = 1e-5
1393-
# function test_jump_psd_cone_with_parameter_quadratic()
1394-
# cached = MOI.Bridges.full_bridge_optimizer(
1395-
# MOI.Utilities.CachingOptimizer(
1396-
# MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
1397-
# SCS.Optimizer(),
1398-
# ),
1399-
# Float64,
1400-
# )
1401-
# optimizer = POI.Optimizer(cached)
1402-
# model = direct_model(optimizer)
1403-
# @variable(model, x)
1404-
# @variable(model, p in MOI.Parameter(1.0))
1405-
# @constraint(
1406-
# model,
1407-
# con,
1408-
# [p * x, (2 * x - 3), p * 3 * x] in MOI.PositiveSemidefiniteConeTriangle(2)
1409-
# )
1410-
# @objective(model, Min, x)
1411-
# @test is_valid(model, con)
1412-
# optimize!(model)
1413-
# @test value(x) ≈ 0.803845 atol = 1e-5
1414-
# end
1393+
function test_jump_psd_cone_with_parameter_px_x_px()
1394+
cached = MOI.Bridges.full_bridge_optimizer(
1395+
MOI.Utilities.CachingOptimizer(
1396+
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
1397+
SCS.Optimizer(),
1398+
),
1399+
Float64,
1400+
)
1401+
optimizer = POI.Optimizer(cached)
1402+
model = direct_model(optimizer)
1403+
@variable(model, x)
1404+
@variable(model, p in MOI.Parameter(1.0))
1405+
@constraint(
1406+
model,
1407+
con,
1408+
[p * x, (2 * x - 3), p * 3 * x] in MOI.PositiveSemidefiniteConeTriangle(2)
1409+
)
1410+
@objective(model, Min, x)
1411+
@test is_valid(model, con)
1412+
optimize!(model)
1413+
@test value(x) 0.803845 atol = 1e-5
1414+
set_parameter_value(p, 3.0)
1415+
optimize!(model)
1416+
@test value(x) 0.416888 atol = 1e-5
1417+
delete(model, con)
1418+
end
14151419

1416-
1420+
function test_jump_psd_cone_with_parameter_pp_x_px()
1421+
cached = MOI.Bridges.full_bridge_optimizer(
1422+
MOI.Utilities.CachingOptimizer(
1423+
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
1424+
SCS.Optimizer(),
1425+
),
1426+
Float64,
1427+
)
1428+
optimizer = POI.Optimizer(cached)
1429+
model = direct_model(optimizer)
1430+
@variable(model, x)
1431+
@variable(model, p in MOI.Parameter(1.0))
1432+
@constraint(
1433+
model,
1434+
con,
1435+
[p * p, (2 * x - 3), p * 3 * x] in MOI.PositiveSemidefiniteConeTriangle(2)
1436+
)
1437+
@objective(model, Min, x)
1438+
@test is_valid(model, con)
1439+
optimize!(model)
1440+
@test value(x) 0.7499854 atol = 1e-5
1441+
set_parameter_value(p, 3.0)
1442+
optimize!(model)
1443+
@test value(x) 0.0971795 atol = 1e-5
1444+
delete(model, con)
1445+
end
1446+
1447+
function test_jump_psd_cone_with_parameter_p_x_px()
1448+
cached = MOI.Bridges.full_bridge_optimizer(
1449+
MOI.Utilities.CachingOptimizer(
1450+
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
1451+
SCS.Optimizer(),
1452+
),
1453+
Float64,
1454+
)
1455+
optimizer = POI.Optimizer(cached)
1456+
model = direct_model(optimizer)
1457+
@variable(model, x)
1458+
@variable(model, p in MOI.Parameter(1.0))
1459+
@constraint(
1460+
model,
1461+
con,
1462+
[p, (2 * x - 3), p * 3 * x] in MOI.PositiveSemidefiniteConeTriangle(2)
1463+
)
1464+
@objective(model, Min, x)
1465+
@test is_valid(model, con)
1466+
optimize!(model)
1467+
@test value(x) 0.7499854 atol = 1e-5
1468+
set_parameter_value(p, 3.0)
1469+
optimize!(model)
1470+
@test value(x) 0.0971795 atol = 1e-5
1471+
delete(model, con)
1472+
end
1473+
1474+
function test_jump_psd_cone_with_parameter_p_x_pp()
1475+
cached = MOI.Bridges.full_bridge_optimizer(
1476+
MOI.Utilities.CachingOptimizer(
1477+
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
1478+
SCS.Optimizer(),
1479+
),
1480+
Float64,
1481+
)
1482+
optimizer = POI.Optimizer(cached)
1483+
model = direct_model(optimizer)
1484+
@variable(model, x)
1485+
@variable(model, p in MOI.Parameter(1.0))
1486+
@constraint(
1487+
model,
1488+
con,
1489+
[p, (2 * x - 3), p * 3 * p] in MOI.PositiveSemidefiniteConeTriangle(2)
1490+
)
1491+
@objective(model, Min, x)
1492+
@test is_valid(model, con)
1493+
optimize!(model)
1494+
@test value(x) 0.633969 atol = 1e-5
1495+
set_parameter_value(p, 3.0)
1496+
optimize!(model)
1497+
@test value(x) -2.9999734 atol = 1e-5
1498+
delete(model, con)
1499+
end

0 commit comments

Comments
 (0)