# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment # Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. # Released under the modified BSD license. See COPYING.md for more details. using UnitCommitment, Test, LinearAlgebra import UnitCommitment: Violation, _offer, _query @testset "Screening" begin @testset "Violation filter" begin instance = UnitCommitment.read_benchmark("test/case14") filter = UnitCommitment.ViolationFilter(max_per_line=1, max_total=2) _offer( filter, Violation( time=1, monitored_line=instance.lines[1], outage_line=nothing, amount=100., ), ) _offer( filter, Violation( time=1, monitored_line=instance.lines[1], outage_line=instance.lines[1], amount=300., ), ) _offer( filter, Violation( time=1, monitored_line=instance.lines[1], outage_line=instance.lines[5], amount=500., ), ) _offer( filter, Violation( time=1, monitored_line=instance.lines[1], outage_line=instance.lines[4], amount=400., ), ) _offer( filter, Violation( time=1, monitored_line=instance.lines[2], outage_line=instance.lines[1], amount=200., ), ) _offer( filter, Violation( time=1, monitored_line=instance.lines[2], outage_line=instance.lines[8], amount=100., ) ) actual = _query(filter) expected = [ Violation( time=1, monitored_line=instance.lines[2], outage_line=instance.lines[1], amount=200., ), Violation( time=1, monitored_line=instance.lines[1], outage_line=instance.lines[5], amount=500., ), ] @test actual == expected end @testset "find_violations" begin instance = UnitCommitment.read_benchmark("test/case14") for line in instance.lines, t in 1:instance.time line.normal_flow_limit[t] = 1.0 line.emergency_flow_limit[t] = 1.0 end isf = UnitCommitment._injection_shift_factors( lines=instance.lines, buses=instance.buses, ) lodf = UnitCommitment._line_outage_factors( lines=instance.lines, buses=instance.buses, isf=isf, ) inj = [1000.0 for b in 1:13, t in 1:instance.time] overflow = [0.0 for l in instance.lines, t in 1:instance.time] violations = UnitCommitment._find_violations( instance=instance, net_injections=inj, overflow=overflow, isf=isf, lodf=lodf, ) @test length(violations) == 20 end end