Minor changes to tests

This commit is contained in:
2023-03-16 10:21:31 -05:00
parent 31e0613134
commit cb9334c0a3
10 changed files with 401 additions and 432 deletions

View File

@@ -8,21 +8,20 @@ using UnitCommitment, Cbc, JuMP
# Load instance
instance = UnitCommitment.read("$FIXTURES/case118-initcond.json.gz")
optimizer = optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0)
for sc in instance.scenarios
# All units should have unknown initial conditions
for g in sc.units
@test g.initial_power === nothing
@test g.initial_status === nothing
end
sc = instance.scenarios[1]
# All units should have unknown initial conditions
for g in sc.units
@test g.initial_power === nothing
@test g.initial_status === nothing
end
# Generate initial conditions
UnitCommitment.generate_initial_conditions!(sc, optimizer)
# Generate initial conditions
UnitCommitment.generate_initial_conditions!(sc, optimizer)
# All units should now have known initial conditions
for g in sc.units
@test g.initial_power !== nothing
@test g.initial_status !== nothing
end
# All units should now have known initial conditions
for g in sc.units
@test g.initial_power !== nothing
@test g.initial_status !== nothing
end
# TODO: Check that initial conditions are feasible

View File

@@ -9,77 +9,57 @@ using Distributions
using Random
using UnitCommitment, Cbc, JuMP
get_instance() = UnitCommitment.read_benchmark("matpower/case118/2017-02-01")
function get_scenario()
return UnitCommitment.read_benchmark(
"matpower/case118/2017-02-01",
).scenarios[1]
end
system_load(sc) = sum(b.load for b in sc.buses)
test_approx(x, y) = @test isapprox(x, y, atol = 1e-3)
@testset "XavQiuAhm2021" begin
@testset "cost and load share" begin
instance = get_instance()
for sc in instance.scenarios
# Check original costs
unit = sc.units[10]
test_approx(unit.min_power_cost[1], 825.023)
test_approx(unit.cost_segments[1].cost[1], 36.659)
test_approx(unit.startup_categories[1].cost[1], 7570.42)
sc = get_scenario()
# Check original costs
unit = sc.units[10]
test_approx(unit.min_power_cost[1], 825.023)
test_approx(unit.cost_segments[1].cost[1], 36.659)
test_approx(unit.startup_categories[1].cost[1], 7570.42)
# Check original load share
bus = sc.buses[1]
prev_system_load = system_load(sc)
test_approx(bus.load[1] / prev_system_load[1], 0.012)
# Check original load share
bus = sc.buses[1]
prev_system_load = system_load(sc)
test_approx(bus.load[1] / prev_system_load[1], 0.012)
randomize!(
sc,
XavQiuAhm2021.Randomization(randomize_load_profile = false),
rng = MersenneTwister(42),
)
randomize!(
sc,
XavQiuAhm2021.Randomization(randomize_load_profile = false),
rng = MersenneTwister(42),
)
# Check randomized costs
test_approx(unit.min_power_cost[1], 831.977)
test_approx(unit.cost_segments[1].cost[1], 36.968)
test_approx(unit.startup_categories[1].cost[1], 7634.226)
# Check randomized costs
test_approx(unit.min_power_cost[1], 831.977)
test_approx(unit.cost_segments[1].cost[1], 36.968)
test_approx(unit.startup_categories[1].cost[1], 7634.226)
# Check randomized load share
curr_system_load = system_load(sc)
test_approx(bus.load[1] / curr_system_load[1], 0.013)
# Check randomized load share
curr_system_load = system_load(sc)
test_approx(bus.load[1] / curr_system_load[1], 0.013)
# System load should not change
@test prev_system_load curr_system_load
end
# System load should not change
@test prev_system_load curr_system_load
end
@testset "load profile" begin
instance = get_instance()
for sc in instance.scenarios
# Check original load profile
@test round.(system_load(sc), digits = 1)[1:8] [
3059.5,
2983.2,
2937.5,
2953.9,
3073.1,
3356.4,
4068.5,
4018.8,
]
sc = get_scenario()
# Check original load profile
@test round.(system_load(sc), digits = 1)[1:8]
[3059.5, 2983.2, 2937.5, 2953.9, 3073.1, 3356.4, 4068.5, 4018.8]
randomize!(
sc,
XavQiuAhm2021.Randomization();
rng = MersenneTwister(42),
)
randomize!(sc, XavQiuAhm2021.Randomization(); rng = MersenneTwister(42))
# Check randomized load profile
@test round.(system_load(sc), digits = 1)[1:8] [
4854.7,
4849.2,
4732.7,
4848.2,
4948.4,
5231.1,
5874.8,
5934.8,
]
end
# Check randomized load profile
@test round.(system_load(sc), digits = 1)[1:8]
[4854.7, 4849.2, 4732.7, 4848.2, 4948.4, 5231.1, 5874.8, 5934.8]
end
end

View File

@@ -7,35 +7,35 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
@testset "slice" begin
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
modified = UnitCommitment.slice(instance, 1:2)
sc = modified.scenarios[1]
# Should update all time-dependent fields
@test modified.time == 2
for sc in modified.scenarios
@test length(sc.power_balance_penalty) == 2
@test length(sc.reserves_by_name["r1"].amount) == 2
for u in sc.units
@test length(u.max_power) == 2
@test length(u.min_power) == 2
@test length(u.must_run) == 2
@test length(u.min_power_cost) == 2
for s in u.cost_segments
@test length(s.mw) == 2
@test length(s.cost) == 2
end
end
for b in sc.buses
@test length(b.load) == 2
end
for l in sc.lines
@test length(l.normal_flow_limit) == 2
@test length(l.emergency_flow_limit) == 2
@test length(l.flow_limit_penalty) == 2
end
for ps in sc.price_sensitive_loads
@test length(ps.demand) == 2
@test length(ps.revenue) == 2
@test length(sc.power_balance_penalty) == 2
@test length(sc.reserves_by_name["r1"].amount) == 2
for u in sc.units
@test length(u.max_power) == 2
@test length(u.min_power) == 2
@test length(u.must_run) == 2
@test length(u.min_power_cost) == 2
for s in u.cost_segments
@test length(s.mw) == 2
@test length(s.cost) == 2
end
end
for b in sc.buses
@test length(b.load) == 2
end
for l in sc.lines
@test length(l.normal_flow_limit) == 2
@test length(l.emergency_flow_limit) == 2
@test length(l.flow_limit_penalty) == 2
end
for ps in sc.price_sensitive_loads
@test length(ps.demand) == 2
@test length(ps.revenue) == 2
end
# Should be able to build model without errors
optimizer = optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0)
model = UnitCommitment.build_model(