From d49712f41b7acc396d61664a5aae3c0fc13b036e Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Thu, 27 Jul 2023 11:49:47 -0500 Subject: [PATCH] initcond: Apply to instance instead of scenario --- src/transform/initcond.jl | 24 +++++++++++++++++++++--- test/src/transform/initcond_test.jl | 25 +++++++++++++++---------- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/transform/initcond.jl b/src/transform/initcond.jl index 9e2e178..d25e94b 100644 --- a/src/transform/initcond.jl +++ b/src/transform/initcond.jl @@ -5,13 +5,31 @@ using JuMP """ - generate_initial_conditions!(sc, optimizer) + generate_initial_conditions!(instance, optimizer) -Generates feasible initial conditions for the given scenario, by constructing +Generates feasible initial conditions for the given instance, by constructing and solving a single-period mixed-integer optimization problem, using the given -optimizer. The scenario is modified in-place. +optimizer. The instance is modified in-place. """ function generate_initial_conditions!( + instance::UnitCommitmentInstance, + optimizer, +)::Nothing + # Process first scenario + _generate_initial_conditions!(instance.scenarios[1], optimizer) + + # Copy initial conditions to remaining scenarios + for (si, sc) in enumerate(instance.scenarios) + si > 1 || continue + for (gi, g) in sc.thermal_units + g_ref = instance.scenarios[1].thermal_units[gi] + g.initial_power = g_ref.initial_power + g.initial_status = g_ref.initial_status + end + end +end + +function _generate_initial_conditions!( sc::UnitCommitmentScenario, optimizer, )::Nothing diff --git a/test/src/transform/initcond_test.jl b/test/src/transform/initcond_test.jl index 24c23dd..7e63bc3 100644 --- a/test/src/transform/initcond_test.jl +++ b/test/src/transform/initcond_test.jl @@ -2,27 +2,32 @@ # Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. # Released under the modified BSD license. See COPYING.md for more details. -using UnitCommitment, Cbc, JuMP +using UnitCommitment, HiGHS, JuMP function transform_initcond_test() @testset "generate_initial_conditions!" begin # Load instance instance = UnitCommitment.read(fixture("case118-initcond.json.gz")) - optimizer = optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0) - sc = instance.scenarios[1] + optimizer = + optimizer_with_attributes(HiGHS.Optimizer, MOI.Silent() => true) + # All units should have unknown initial conditions - for g in sc.thermal_units - @test g.initial_power === nothing - @test g.initial_status === nothing + for sc in instance.scenarios + for g in sc.thermal_units + @test g.initial_power === nothing + @test g.initial_status === nothing + end end # Generate initial conditions - UnitCommitment.generate_initial_conditions!(sc, optimizer) + UnitCommitment.generate_initial_conditions!(instance, optimizer) # All units should now have known initial conditions - for g in sc.thermal_units - @test g.initial_power !== nothing - @test g.initial_status !== nothing + for sc in instance.scenarios + for g in sc.thermal_units + @test g.initial_power !== nothing + @test g.initial_status !== nothing + end end # TODO: Check that initial conditions are feasible