mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 16:28:51 -06:00
Minor edits to instance/read.jl
This commit is contained in:
@@ -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}()
|
||||||
|
|||||||
Reference in New Issue
Block a user