|
|
@ -43,47 +43,30 @@ function read_benchmark(
|
|
|
|
return UnitCommitment.read(filename)
|
|
|
|
return UnitCommitment.read(filename)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
function _repair_scenario_names_and_probabilities!(
|
|
|
|
read(path::AbstractString)::UnitCommitmentInstance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Read instance from a file. The file may be gzipped.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Example
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```julia
|
|
|
|
|
|
|
|
instance = UnitCommitment.read("/path/to/input.json.gz")
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function _repair_scenario_name_and_probability(
|
|
|
|
|
|
|
|
scenarios::Vector{UnitCommitmentScenario},
|
|
|
|
scenarios::Vector{UnitCommitmentScenario},
|
|
|
|
path::Vector{String},
|
|
|
|
path::Vector{String},
|
|
|
|
)::Vector{UnitCommitmentScenario}
|
|
|
|
)::Nothing
|
|
|
|
number_of_scenarios = length(scenarios)
|
|
|
|
total_weight = sum([sc.probability for sc in scenarios])
|
|
|
|
probs = [sc.probability for sc in scenarios]
|
|
|
|
|
|
|
|
total_weight = number_of_scenarios
|
|
|
|
|
|
|
|
if Float64 in typeof.(probs)
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
|
|
total_weight = sum(probs)
|
|
|
|
|
|
|
|
catch e
|
|
|
|
|
|
|
|
if isa(e, MethodError)
|
|
|
|
|
|
|
|
error(
|
|
|
|
|
|
|
|
"If any of the scenarios is assigned a weight, then all scenarios must be assigned weights.",
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
[sc.probability = 1 for sc in scenarios]
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (sc_path, sc) in zip(path, scenarios)
|
|
|
|
for (sc_path, sc) in zip(path, scenarios)
|
|
|
|
sc.name !== "" ||
|
|
|
|
sc.name !== "" ||
|
|
|
|
(sc.name = first(split(last(split(sc_path, "/")), ".")))
|
|
|
|
(sc.name = first(split(last(split(sc_path, "/")), ".")))
|
|
|
|
sc.probability = (sc.probability / total_weight)
|
|
|
|
sc.probability = (sc.probability / total_weight)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return scenarios
|
|
|
|
return
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
read(path::AbstractString)::UnitCommitmentInstance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Read a deterministic test case from the given file. The file may be gzipped.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Example
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```julia
|
|
|
|
|
|
|
|
instance = UnitCommitment.read("s1.json.gz")
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
"""
|
|
|
|
function read(path::String)::UnitCommitmentInstance
|
|
|
|
function read(path::String)::UnitCommitmentInstance
|
|
|
|
scenarios = Vector{UnitCommitmentScenario}()
|
|
|
|
scenarios = Vector{UnitCommitmentScenario}()
|
|
|
|
scenario = _read_scenario(path)
|
|
|
|
scenario = _read_scenario(path)
|
|
|
@ -95,13 +78,24 @@ function read(path::String)::UnitCommitmentInstance
|
|
|
|
return instance
|
|
|
|
return instance
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function read(path::Vector{String})::UnitCommitmentInstance
|
|
|
|
"""
|
|
|
|
scenarios = Vector{UnitCommitmentScenario}()
|
|
|
|
read(path::Vector{String})::UnitCommitmentInstance
|
|
|
|
for scenario_path in path
|
|
|
|
|
|
|
|
scenario = _read_scenario(scenario_path)
|
|
|
|
Read a stochastic unit commitment instance from the given files. Each file
|
|
|
|
push!(scenarios, scenario)
|
|
|
|
describes a scenario. The files may be gzipped.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Example
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```julia
|
|
|
|
|
|
|
|
instance = UnitCommitment.read(["s1.json.gz", "s2.json.gz"])
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
function read(paths::Vector{String})::UnitCommitmentInstance
|
|
|
|
|
|
|
|
scenarios = UnitCommitmentScenario[]
|
|
|
|
|
|
|
|
for p in paths
|
|
|
|
|
|
|
|
push!(scenarios, _read_scenario(p))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
scenarios = _repair_scenario_name_and_probability(scenarios, path)
|
|
|
|
_repair_scenario_names_and_probabilities!(scenarios, paths)
|
|
|
|
instance =
|
|
|
|
instance =
|
|
|
|
UnitCommitmentInstance(time = scenarios[1].time, scenarios = scenarios)
|
|
|
|
UnitCommitmentInstance(time = scenarios[1].time, scenarios = scenarios)
|
|
|
|
return instance
|
|
|
|
return instance
|
|
|
@ -157,10 +151,12 @@ function _from_json(json; repair = true)::UnitCommitmentScenario
|
|
|
|
error("Time step $time_step is not a divisor of 60")
|
|
|
|
error("Time step $time_step is not a divisor of 60")
|
|
|
|
time_multiplier = 60 ÷ time_step
|
|
|
|
time_multiplier = 60 ÷ time_step
|
|
|
|
T = time_horizon * time_multiplier
|
|
|
|
T = time_horizon * time_multiplier
|
|
|
|
probability = nothing
|
|
|
|
|
|
|
|
probability = json["Parameters"]["Scenario weight"]
|
|
|
|
probability = json["Parameters"]["Scenario weight"]
|
|
|
|
|
|
|
|
probability !== nothing || (probability = 1)
|
|
|
|
scenario_name = json["Parameters"]["Scenario name"]
|
|
|
|
scenario_name = json["Parameters"]["Scenario name"]
|
|
|
|
scenario_name !== nothing || (scenario_name = "")
|
|
|
|
scenario_name !== nothing || (scenario_name = "")
|
|
|
|
|
|
|
|
|
|
|
|
name_to_bus = Dict{String,Bus}()
|
|
|
|
name_to_bus = Dict{String,Bus}()
|
|
|
|
name_to_line = Dict{String,TransmissionLine}()
|
|
|
|
name_to_line = Dict{String,TransmissionLine}()
|
|
|
|
name_to_unit = Dict{String,Unit}()
|
|
|
|
name_to_unit = Dict{String,Unit}()
|
|
|
|