initcond: Apply to instance instead of scenario

pull/33/merge
Alinson S. Xavier 2 years ago
parent beaf0b785f
commit d49712f41b
Signed by: isoron
GPG Key ID: 0DA8E4B9E1109DCA

@ -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

@ -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

Loading…
Cancel
Save