Parser: Allow scalars in timeseries fields

feature/composition2
Alinson S. Xavier 2 years ago
parent 6055eafcd6
commit 76b085e105
Signed by: isoron
GPG Key ID: 0DA8E4B9E1109DCA

@ -11,13 +11,17 @@ function parse(json)::Instance
building_period = json["parameters"]["building period (years)"] building_period = json["parameters"]["building period (years)"]
distance_metric = json["parameters"]["distance metric"] distance_metric = json["parameters"]["distance metric"]
timeseries(x::Union{Nothing,Number}) = repeat([x], time_horizon)
timeseries(x::Array) = x
timeseries(d::OrderedDict) = OrderedDict(k => timeseries(v) for (k,v) in d)
# Read products # Read products
products = Product[] products = Product[]
products_by_name = OrderedDict{String,Product}() products_by_name = OrderedDict{String,Product}()
for (pname, pdict) in json["products"] for (pname, pdict) in json["products"]
tr_cost = pdict["transportation cost (\$/km/tonne)"] tr_cost = timeseries(pdict["transportation cost (\$/km/tonne)"])
tr_energy = pdict["transportation energy (J/km/tonne)"] tr_energy = timeseries(pdict["transportation energy (J/km/tonne)"])
tr_emissions = pdict["transportation emissions (tonne/km/tonne)"] tr_emissions = timeseries(pdict["transportation emissions (tonne/km/tonne)"])
prod = Product(; name = pname, tr_cost, tr_energy, tr_emissions) prod = Product(; name = pname, tr_cost, tr_energy, tr_emissions)
push!(products, prod) push!(products, prod)
products_by_name[pname] = prod products_by_name[pname] = prod
@ -33,12 +37,12 @@ function parse(json)::Instance
revenue = [0.0 for t = 1:time_horizon] revenue = [0.0 for t = 1:time_horizon]
if cdict["input"] !== nothing if cdict["input"] !== nothing
input = products_by_name[cdict["input"]] input = products_by_name[cdict["input"]]
revenue = cdict["revenue (\$/tonne)"] revenue = timeseries(cdict["revenue (\$/tonne)"])
end end
outputs = [products_by_name[p] for p in cdict["outputs"]] outputs = [products_by_name[p] for p in cdict["outputs"]]
operating_cost = cdict["operating cost (\$)"] operating_cost = timeseries(cdict["operating cost (\$)"])
prod_dict(key, null_val) = OrderedDict( prod_dict(key, null_val) = OrderedDict(
p => [v === nothing ? null_val : v for v in cdict[key][p.name]] for p => [v === nothing ? null_val : v for v in timeseries(cdict[key][p.name])] for
p in outputs p in outputs
) )
fixed_output = prod_dict("fixed output (tonne)", 0.0) fixed_output = prod_dict("fixed output (tonne)", 0.0)

@ -6,10 +6,10 @@
}, },
"products": { "products": {
"P1": { "P1": {
"transportation cost ($/km/tonne)": [0.015, 0.015, 0.015, 0.015], "transportation cost ($/km/tonne)": 0.015,
"transportation energy (J/km/tonne)": [0.12, 0.12, 0.12, 0.12], "transportation energy (J/km/tonne)": 0.12,
"transportation emissions (tonne/km/tonne)": { "transportation emissions (tonne/km/tonne)": {
"CO2": [0.052, 0.052, 0.052, 0.052], "CO2": 0.052,
"CH4": [0.003, 0.003, 0.003, 0.003] "CH4": [0.003, 0.003, 0.003, 0.003]
} }
}, },
@ -52,7 +52,7 @@
"P2": [0.12, 0.25, 0.12, 0.0], "P2": [0.12, 0.25, 0.12, 0.0],
"P3": [0.25, 0.25, 0.25, 0.0] "P3": [0.25, 0.25, 0.25, 0.0]
}, },
"revenue ($/tonne)": [12.0, 12.0, 12.0, 12.0], "revenue ($/tonne)": 12.0,
"collection cost ($/tonne)": { "collection cost ($/tonne)": {
"P2": [0.25, 0.25, 0.25, 0.25], "P2": [0.25, 0.25, 0.25, 0.25],
"P3": [0.37, 0.37, 0.37, 0.37] "P3": [0.37, 0.37, 0.37, 0.37]
@ -73,21 +73,21 @@
"input": null, "input": null,
"outputs": ["P4"], "outputs": ["P4"],
"variable output (tonne/tonne)": { "variable output (tonne/tonne)": {
"P4": [0, 0, 0, 0] "P4": 0
}, },
"fixed output (tonne)": { "fixed output (tonne)": {
"P4": [50, 60, 70, 80] "P4": [50, 60, 70, 80]
}, },
"revenue ($/tonne)": null, "revenue ($/tonne)": null,
"collection cost ($/tonne)": { "collection cost ($/tonne)": {
"P4": [0.25, 0.25, 0.25, 0.25] "P4": 0.25
}, },
"operating cost ($)": [150.0, 150.0, 150.0, 150.0], "operating cost ($)": [150.0, 150.0, 150.0, 150.0],
"disposal limit (tonne)": { "disposal limit (tonne)": {
"P4": [null, null, null, null] "P4": null
}, },
"disposal cost ($/tonne)": { "disposal cost ($/tonne)": {
"P4": [0, 0, 0, 0] "P4": 0
} }
}, },
"C3": { "C3": {
@ -99,7 +99,7 @@
"constant output (tonne)": {}, "constant output (tonne)": {},
"revenue ($/tonne)": [12.0, 12.0, 12.0, 12.0], "revenue ($/tonne)": [12.0, 12.0, 12.0, 12.0],
"collection cost ($/tonne)": {}, "collection cost ($/tonne)": {},
"operating cost ($)": [150.0, 150.0, 150.0, 150.0], "operating cost ($)": 150.0,
"disposal limit (tonne)": {}, "disposal limit (tonne)": {},
"disposal cost ($/tonne)": {} "disposal cost ($/tonne)": {}
} }

Loading…
Cancel
Save