|
|
@ -5,134 +5,66 @@
|
|
|
|
using UnitCommitment, DataStructures
|
|
|
|
using UnitCommitment, DataStructures
|
|
|
|
|
|
|
|
|
|
|
|
@testset "determine_initial_status" begin
|
|
|
|
@testset "determine_initial_status" begin
|
|
|
|
t_increment = 24
|
|
|
|
|
|
|
|
t_model = 36
|
|
|
|
|
|
|
|
hot_start = 100
|
|
|
|
hot_start = 100
|
|
|
|
cold_start = -100
|
|
|
|
cold_start = -100
|
|
|
|
|
|
|
|
|
|
|
|
# all on throughout
|
|
|
|
# all on throughout
|
|
|
|
stat_seq = ones(t_model)
|
|
|
|
stat_seq = ones(36)
|
|
|
|
# hot start
|
|
|
|
# hot start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(hot_start, stat_seq)
|
|
|
|
hot_start,
|
|
|
|
@test new_stat == 136
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 124
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
# cold start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(cold_start, stat_seq)
|
|
|
|
cold_start,
|
|
|
|
@test new_stat == 36
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 24
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# off in the last 12 periods
|
|
|
|
# off in the last 12 periods
|
|
|
|
stat_seq = ones(t_model)
|
|
|
|
stat_seq = ones(36)
|
|
|
|
stat_seq[25:end] .= 0
|
|
|
|
stat_seq[25:end] .= 0
|
|
|
|
# hot start
|
|
|
|
# hot start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(hot_start, stat_seq)
|
|
|
|
hot_start,
|
|
|
|
@test new_stat == -12
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 124
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
# cold start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(cold_start, stat_seq)
|
|
|
|
cold_start,
|
|
|
|
@test new_stat == -12
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 24
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# off in one of the first 24 periods
|
|
|
|
# off in one period
|
|
|
|
stat_seq = ones(t_model)
|
|
|
|
stat_seq = ones(36)
|
|
|
|
stat_seq[10] = 0
|
|
|
|
stat_seq[10] = 0
|
|
|
|
# hot start
|
|
|
|
# hot start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(hot_start, stat_seq)
|
|
|
|
hot_start,
|
|
|
|
@test new_stat == 26
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 14
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
# cold start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(cold_start, stat_seq)
|
|
|
|
cold_start,
|
|
|
|
@test new_stat == 26
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 14
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# off in several of the first 24 periods
|
|
|
|
# off in several of the first 24 periods
|
|
|
|
stat_seq = ones(t_model)
|
|
|
|
stat_seq = ones(36)
|
|
|
|
stat_seq[[10, 11, 20]] .= 0
|
|
|
|
stat_seq[[10, 11, 20]] .= 0
|
|
|
|
# hot start
|
|
|
|
# hot start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(hot_start, stat_seq)
|
|
|
|
hot_start,
|
|
|
|
@test new_stat == 16
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 4
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
# cold start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(cold_start, stat_seq)
|
|
|
|
cold_start,
|
|
|
|
@test new_stat == 16
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == 4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# off in several of the first 24 periods
|
|
|
|
|
|
|
|
stat_seq = ones(t_model)
|
|
|
|
|
|
|
|
stat_seq[20:24] .= 0
|
|
|
|
|
|
|
|
# hot start
|
|
|
|
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
|
|
|
|
hot_start,
|
|
|
|
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == -5
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
|
|
|
|
cold_start,
|
|
|
|
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == -5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# all off throughout
|
|
|
|
# all off throughout
|
|
|
|
stat_seq = zeros(t_model)
|
|
|
|
stat_seq = zeros(36)
|
|
|
|
# hot start
|
|
|
|
# hot start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(hot_start, stat_seq)
|
|
|
|
hot_start,
|
|
|
|
@test new_stat == -36
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == -24
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
# cold start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(cold_start, stat_seq)
|
|
|
|
cold_start,
|
|
|
|
@test new_stat == -136
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == -124
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# on in the last 12 periods
|
|
|
|
# on in the last 12 periods
|
|
|
|
stat_seq = zeros(t_model)
|
|
|
|
stat_seq = zeros(36)
|
|
|
|
stat_seq[25:end] .= 1
|
|
|
|
stat_seq[25:end] .= 1
|
|
|
|
# hot start
|
|
|
|
# hot start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(hot_start, stat_seq)
|
|
|
|
hot_start,
|
|
|
|
@test new_stat == 12
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == -24
|
|
|
|
|
|
|
|
# cold start
|
|
|
|
# cold start
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(
|
|
|
|
new_stat = UnitCommitment._determine_initial_status(cold_start, stat_seq)
|
|
|
|
cold_start,
|
|
|
|
@test new_stat == 12
|
|
|
|
stat_seq,
|
|
|
|
|
|
|
|
t_increment,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
@test new_stat == -124
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
@testset "set_initial_status" begin
|
|
|
|
@testset "set_initial_status" begin
|
|
|
@ -140,28 +72,28 @@ end
|
|
|
|
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
|
|
|
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
|
|
|
psuedo_solution = OrderedDict(
|
|
|
|
psuedo_solution = OrderedDict(
|
|
|
|
"Thermal production (MW)" => OrderedDict(
|
|
|
|
"Thermal production (MW)" => OrderedDict(
|
|
|
|
"g1" => [110.0, 112.0, 114.0, 116.0],
|
|
|
|
"g1" => [0.0, 112.0, 114.0, 116.0],
|
|
|
|
"g2" => [100.0, 102.0, 0.0, 0.0],
|
|
|
|
"g2" => [0.0, 102.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g4" => [33.0, 34.0, 66.0, 99.0],
|
|
|
|
"g4" => [0.0, 34.0, 66.0, 99.0],
|
|
|
|
"g5" => [33.0, 34.0, 66.0, 99.0],
|
|
|
|
"g5" => [0.0, 34.0, 66.0, 99.0],
|
|
|
|
"g6" => [100.0, 100.0, 100.0, 100.0],
|
|
|
|
"g6" => [0.0, 100.0, 100.0, 100.0],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
"Is on" => OrderedDict(
|
|
|
|
"Is on" => OrderedDict(
|
|
|
|
"g1" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g1" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g2" => [1.0, 1.0, 0.0, 0.0],
|
|
|
|
"g2" => [0.0, 1.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g4" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g4" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g5" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g5" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g6" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g6" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
UnitCommitment._set_initial_status!(instance, psuedo_solution, 3)
|
|
|
|
UnitCommitment._set_initial_status!(instance, psuedo_solution, 3)
|
|
|
|
thermal_units = instance.scenarios[1].thermal_units
|
|
|
|
thermal_units = instance.scenarios[1].thermal_units
|
|
|
|
@test thermal_units[1].initial_power == 114.0
|
|
|
|
@test thermal_units[1].initial_power == 116.0
|
|
|
|
@test thermal_units[1].initial_status == 3.0
|
|
|
|
@test thermal_units[1].initial_status == 3.0
|
|
|
|
@test thermal_units[2].initial_power == 0.0
|
|
|
|
@test thermal_units[2].initial_power == 0.0
|
|
|
|
@test thermal_units[2].initial_status == -1.0
|
|
|
|
@test thermal_units[2].initial_status == -2.0
|
|
|
|
@test thermal_units[3].initial_power == 0.0
|
|
|
|
@test thermal_units[3].initial_power == 0.0
|
|
|
|
@test thermal_units[3].initial_status == -9.0
|
|
|
|
@test thermal_units[3].initial_status == -9.0
|
|
|
|
|
|
|
|
|
|
|
@ -173,47 +105,47 @@ end
|
|
|
|
psuedo_solution = OrderedDict(
|
|
|
|
psuedo_solution = OrderedDict(
|
|
|
|
"case14" => OrderedDict(
|
|
|
|
"case14" => OrderedDict(
|
|
|
|
"Thermal production (MW)" => OrderedDict(
|
|
|
|
"Thermal production (MW)" => OrderedDict(
|
|
|
|
"g1" => [110.0, 112.0, 114.0, 116.0],
|
|
|
|
"g1" => [0.0, 112.0, 114.0, 116.0],
|
|
|
|
"g2" => [100.0, 102.0, 0.0, 0.0],
|
|
|
|
"g2" => [0.0, 102.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g4" => [33.0, 34.0, 66.0, 99.0],
|
|
|
|
"g4" => [0.0, 34.0, 66.0, 99.0],
|
|
|
|
"g5" => [33.0, 34.0, 66.0, 99.0],
|
|
|
|
"g5" => [0.0, 34.0, 66.0, 99.0],
|
|
|
|
"g6" => [100.0, 100.0, 100.0, 100.0],
|
|
|
|
"g6" => [0.0, 100.0, 100.0, 100.0],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
"Is on" => OrderedDict(
|
|
|
|
"Is on" => OrderedDict(
|
|
|
|
"g1" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g1" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g2" => [1.0, 1.0, 0.0, 0.0],
|
|
|
|
"g2" => [0.0, 1.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g4" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g4" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g5" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g5" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g6" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g6" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
"case14-profiled" => OrderedDict(
|
|
|
|
"case14-profiled" => OrderedDict(
|
|
|
|
"Thermal production (MW)" => OrderedDict(
|
|
|
|
"Thermal production (MW)" => OrderedDict(
|
|
|
|
"g1" => [112.0, 113.0, 116.0, 115.0],
|
|
|
|
"g1" => [0.0, 113.0, 116.0, 115.0],
|
|
|
|
"g2" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g2" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 20.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 20.0],
|
|
|
|
"g4" => [33.0, 34.0, 66.0, 99.0],
|
|
|
|
"g4" => [0.0, 34.0, 66.0, 98.0],
|
|
|
|
"g5" => [33.0, 34.0, 66.0, 99.0],
|
|
|
|
"g5" => [0.0, 34.0, 66.0, 97.0],
|
|
|
|
"g6" => [100.0, 100.0, 100.0, 100.0],
|
|
|
|
"g6" => [0.0, 100.0, 100.0, 100.0],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
"Is on" => OrderedDict(
|
|
|
|
"Is on" => OrderedDict(
|
|
|
|
"g1" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g1" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g2" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g2" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 0.0],
|
|
|
|
"g3" => [0.0, 0.0, 0.0, 1.0],
|
|
|
|
"g4" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g4" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g5" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g5" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
"g6" => [1.0, 1.0, 1.0, 1.0],
|
|
|
|
"g6" => [0.0, 1.0, 1.0, 1.0],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
UnitCommitment._set_initial_status!(instance, psuedo_solution, 3)
|
|
|
|
UnitCommitment._set_initial_status!(instance, psuedo_solution, 3)
|
|
|
|
thermal_units_sc2 = instance.scenarios[2].thermal_units
|
|
|
|
thermal_units_sc2 = instance.scenarios[2].thermal_units
|
|
|
|
@test thermal_units_sc2[1].initial_power == 116.0
|
|
|
|
@test thermal_units_sc2[1].initial_power == 115.0
|
|
|
|
@test thermal_units_sc2[1].initial_status == 3.0
|
|
|
|
@test thermal_units_sc2[1].initial_status == 3.0
|
|
|
|
@test thermal_units_sc2[2].initial_power == 0.0
|
|
|
|
@test thermal_units_sc2[2].initial_power == 0.0
|
|
|
|
@test thermal_units_sc2[2].initial_status == -11.0
|
|
|
|
@test thermal_units_sc2[2].initial_status == -11.0
|
|
|
|
@test thermal_units_sc2[3].initial_power == 0.0
|
|
|
|
@test thermal_units_sc2[3].initial_power == 20.0
|
|
|
|
@test thermal_units_sc2[3].initial_status == -9.0
|
|
|
|
@test thermal_units_sc2[3].initial_status == 1.0
|
|
|
|
end
|
|
|
|
end
|
|
|
|