mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 08:18:51 -06:00
Minor changes to tests
This commit is contained in:
@@ -6,17 +6,17 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
||||
|
||||
@testset "read v0.2" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/ucjl-0.2.json.gz")
|
||||
for sc in instance.scenarios
|
||||
@test length(instance.scenarios) == 1
|
||||
sc = instance.scenarios[1]
|
||||
@test length(sc.reserves_by_name["r1"].amount) == 4
|
||||
@test sc.units_by_name["g2"].reserves[1].name == "r1"
|
||||
end
|
||||
end
|
||||
|
||||
@testset "read v0.3" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/ucjl-0.3.json.gz")
|
||||
for sc in instance.scenarios
|
||||
@test length(instance.scenarios) == 1
|
||||
sc = instance.scenarios[1]
|
||||
@test length(sc.units) == 6
|
||||
@test length(sc.buses) == 14
|
||||
@test length(sc.lines) == 20
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,7 +6,8 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
||||
|
||||
@testset "read_benchmark" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
@test length(instance.scenarios) == 1
|
||||
sc = instance.scenarios[1]
|
||||
@test length(sc.lines) == 20
|
||||
@test length(sc.buses) == 14
|
||||
@test length(sc.units) == 6
|
||||
@@ -109,7 +110,6 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
||||
@test load.revenue == [100.0 for t in 1:4]
|
||||
@test load.demand == [50.0 for t in 1:4]
|
||||
@test sc.price_sensitive_loads_by_name["ps1"].name == "ps1"
|
||||
end
|
||||
end
|
||||
|
||||
@testset "read_benchmark sub-hourly" begin
|
||||
|
||||
@@ -7,8 +7,8 @@ import UnitCommitment: _Violation, _offer, _query
|
||||
|
||||
@testset "_ViolationFilter" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
sc = instance.scenarios[1]
|
||||
filter = UnitCommitment._ViolationFilter(max_per_line = 1, max_total = 2)
|
||||
for sc in instance.scenarios
|
||||
_offer(
|
||||
filter,
|
||||
_Violation(
|
||||
@@ -80,5 +80,4 @@ import UnitCommitment: _Violation, _offer, _query
|
||||
),
|
||||
]
|
||||
@test actual == expected
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,7 +7,7 @@ import UnitCommitment: _Violation, _offer, _query
|
||||
|
||||
@testset "find_violations" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
sc = instance.scenarios[1]
|
||||
for line in sc.lines, t in 1:instance.time
|
||||
line.normal_flow_limit[t] = 1.0
|
||||
line.emergency_flow_limit[t] = 1.0
|
||||
@@ -34,5 +34,4 @@ import UnitCommitment: _Violation, _offer, _query
|
||||
max_per_period = 5,
|
||||
)
|
||||
@test length(violations) == 20
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,7 +6,7 @@ using UnitCommitment, Test, LinearAlgebra
|
||||
|
||||
@testset "_susceptance_matrix" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
sc = instance.scenarios[1]
|
||||
actual = UnitCommitment._susceptance_matrix(sc.lines)
|
||||
@test size(actual) == (20, 20)
|
||||
expected = Diagonal([
|
||||
@@ -32,12 +32,11 @@ using UnitCommitment, Test, LinearAlgebra
|
||||
5.02,
|
||||
])
|
||||
@test round.(actual, digits = 2) == expected
|
||||
end
|
||||
end
|
||||
|
||||
@testset "_reduced_incidence_matrix" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
sc = instance.scenarios[1]
|
||||
actual = UnitCommitment._reduced_incidence_matrix(
|
||||
lines = sc.lines,
|
||||
buses = sc.buses,
|
||||
@@ -81,12 +80,11 @@ end
|
||||
@test actual[20, 12] == 1.0
|
||||
@test actual[17, 13] == -1.0
|
||||
@test actual[20, 13] == -1.0
|
||||
end
|
||||
end
|
||||
|
||||
@testset "_injection_shift_factors" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
sc = instance.scenarios[1]
|
||||
actual = UnitCommitment._injection_shift_factors(
|
||||
lines = sc.lines,
|
||||
buses = sc.buses,
|
||||
@@ -114,12 +112,11 @@ end
|
||||
-0.0 -0.0 -0.0 0.0 0.03 -0.02 -0.02 -0.03 -0.02 0.01 0.48 -0.17 -0.09
|
||||
-0.0 -0.01 -0.01 0.01 0.14 -0.08 -0.08 -0.12 -0.07 0.03 0.2 0.24 -0.4
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
@testset "_line_outage_factors" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
sc = instance.scenarios[1]
|
||||
isf_before = UnitCommitment._injection_shift_factors(
|
||||
lines = sc.lines,
|
||||
buses = sc.buses,
|
||||
@@ -147,5 +144,4 @@ end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,7 +8,7 @@ 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
|
||||
sc = instance.scenarios[1]
|
||||
# All units should have unknown initial conditions
|
||||
for g in sc.units
|
||||
@test g.initial_power === nothing
|
||||
@@ -23,7 +23,6 @@ using UnitCommitment, Cbc, JuMP
|
||||
@test g.initial_power !== nothing
|
||||
@test g.initial_status !== nothing
|
||||
end
|
||||
end
|
||||
|
||||
# TODO: Check that initial conditions are feasible
|
||||
end
|
||||
|
||||
@@ -9,14 +9,17 @@ 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
|
||||
sc = get_scenario()
|
||||
# Check original costs
|
||||
unit = sc.units[10]
|
||||
test_approx(unit.min_power_cost[1], 825.023)
|
||||
@@ -46,40 +49,17 @@ test_approx(x, y) = @test isapprox(x, y, atol = 1e-3)
|
||||
# System load should not change
|
||||
@test prev_system_load ≈ curr_system_load
|
||||
end
|
||||
end
|
||||
|
||||
@testset "load profile" begin
|
||||
instance = get_instance()
|
||||
for sc in instance.scenarios
|
||||
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,
|
||||
]
|
||||
@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
|
||||
@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
|
||||
|
||||
@@ -7,10 +7,10 @@ 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
|
||||
@@ -35,7 +35,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
||||
@test length(ps.demand) == 2
|
||||
@test length(ps.revenue) == 2
|
||||
end
|
||||
end
|
||||
|
||||
# Should be able to build model without errors
|
||||
optimizer = optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0)
|
||||
model = UnitCommitment.build_model(
|
||||
|
||||
@@ -7,9 +7,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON
|
||||
@testset "usage" begin
|
||||
instance = UnitCommitment.read("$FIXTURES/case14.json.gz")
|
||||
for sc in instance.scenarios
|
||||
sc.power_balance_penalty = [100000 for _ in 1:instance.time]
|
||||
end
|
||||
for sc in instance.scenarios
|
||||
sc.power_balance_penalty = [100_000 for _ in 1:instance.time]
|
||||
for line in sc.lines, t in 1:4
|
||||
line.normal_flow_limit[t] = 10.0
|
||||
end
|
||||
|
||||
@@ -17,8 +17,6 @@ end
|
||||
json["Generators"]["g1"]["Production cost curve (MW)"] = [100, 150, 200]
|
||||
json["Generators"]["g1"]["Production cost curve (\$)"] = [10, 25, 30]
|
||||
sc = UnitCommitment._from_json(json, repair = false)
|
||||
sc.name = "s1"
|
||||
sc.probability = 1.0
|
||||
@test UnitCommitment.repair!(sc) == 4
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user