Implement global disposal limits

circular
Alinson S. Xavier 1 week ago
parent 67b1e5fd40
commit e4d4ee1cc8

@ -1,6 +1,7 @@
# Input data format
RELOG accepts as input a JSON file with four sections: `parameters`, `products`, `centers` and `plants`. Below, we describe each section in more detail.
RELOG accepts as input a JSON file with four sections: `parameters`, `products`,
`centers` and `plants`. Below, we describe each section in more detail.
## Parameters
@ -24,11 +25,12 @@ RELOG accepts as input a JSON file with four sections: `parameters`, `products`,
## Products
| Key | Description |
| :------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `transportation cost ($/km/tonne)` | The cost to transport this product. Must be a time series. |
| `transportation energy (J/km/tonne)` | The energy required to transport this product. Must be a time series. Optional. |
| `transportation emissions (tonne/km/tonne)` | A dictionary mapping the name of each greenhouse gas, produced to transport one tonne of this product along one kilometer, to the amount of gas produced (in tonnes). Must be a time series. Optional. |
| Key | Description |
| :------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `transportation cost ($/km/tonne)` | The cost to transport this product. Must be a time series. |
| `transportation energy (J/km/tonne)` | The energy required to transport this product. Must be a time series. Optional. |
| `transportation emissions (tonne/km/tonne)` | A dictionary mapping the name of each greenhouse gas, produced to transport one tonne of this product along one kilometer, to the amount of gas produced (in tonnes). Must be a time series. Optional. |
| `disposal limit (tonne)` | Global disposal limit for this product, per year, across all plants and centers. Entry may be `null` if unlimited. Note that individual plants and centers may also have their individual disposal limits for this product. |
#### Example
@ -41,7 +43,8 @@ RELOG accepts as input a JSON file with four sections: `parameters`, `products`,
"transportation emissions (tonne/km/tonne)": {
"CO2": 0.052,
"CH4": 0.003
}
},
"disposal limit (tonne)": 100.0,
}
}
}

@ -5,8 +5,8 @@
The mathematical model employed by RELOG is based on three main components:
1. **Products and Materials:** Inputs and outputs for both manufacturing and
recycling plants. This include raw materials, whether virgin or recovered, and
final products, whether new or at their end-of-life. Each product has
recycling plants. This include raw materials, whether virgin or recovered,
and final products, whether new or at their end-of-life. Each product has
associated transportation parameters, such as costs, energy and emissions.
2. **Manufacturing and Recycling Plants:** Facilities that take in specific
@ -48,23 +48,24 @@ The mathematical model employed by RELOG is based on three main components:
## Constants
| Symbol | Description | Unit |
| :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ |
| $K^{\text{dist}}_{uv}$ | Distance between plants/centers $u$ and $v$ | km |
| $K^\text{cap}_{p}$ | Capacity of plant $p$, if the plant is open | tonne |
| $K^\text{disp-limit}_{pmt}$ | Maximum amount of material $m$ that can be disposed of at plant $p$ at time $t$ | tonne |
| $K^\text{mix}_{pmt}$ | If plant $p$ receives one tonne of input material at time $t$, then $K^\text{mix}_{pmt}$ is the amount of product $m$ in this mix. Must be between zero and one, and the sum of these amounts must equal to one. | tonne |
| $K^\text{output}_{pmt}$ | Amount of material $m$ produced by plant $p$ at time $t$ for each tonne of input material processed | tonne |
| $R^\text{tr}_{mt}$ | Cost to send material $m$ at time $t$ | \$/km-tonne |
| $R^\text{collect}_{cmt}$ | Cost of collecting material $m$ at center $c$ at time $t$ | \$/tonne |
| $R^\text{disp}_{umt}$ | Cost to dispose of material at plant/center $u$ at time $t$ | \$/tonne |
| $R^\text{fix}_{ut}$ | Fixed operating cost for plant/center $u$ at time $t$ | \$ |
| $R^\text{open}_{pt}$ | Cost to open plant $p$ at time $t$ | \$ |
| $R^\text{rev}_{ct}$ | Revenue for selling the input product of center $c$ at this center at time $t$ | \$/tonne |
| $R^\text{var}_{pt}$ | Cost to process one tonne of input material at plant $p$ at time $t$ | \$/tonne |
| $K^\text{out-fix}_{cmt}$ | Fixed amount of material $m$ collected at center $m$ at time $t$ | \$/tonne |
| $K^\text{out-var}_{c,m,i}$ | Factor used to calculate variable amount of material $m$ collected at center $m$. See `eq_z_collected` for more details. | -- |
| $K^\text{out-var-len}_{cm}$ | Length of the $K^\text{out-var}_{c,m,*}$ vector. | -- |
| Symbol | Description | Unit |
| :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- |
| $K^{\text{dist}}_{uv}$ | Distance between plants/centers $u$ and $v$ | km |
| $K^\text{cap}_{p}$ | Capacity of plant $p$, if the plant is open | tonne |
| $K^\text{disp-limit}_{mt}$ | Maximum amount of material $m$ that can be disposed of (globally) at time $t$ | tonne |
| $K^\text{disp-limit}_{mut}$ | Maximum amount of material $m$ that can be disposed of at plant/center $u$ at time $t$ | tonne |
| $K^\text{mix}_{pmt}$ | If plant $p$ receives one tonne of input material at time $t$, then $K^\text{mix}_{pmt}$ is the amount of product $m$ in this mix. Must be between zero and one, and the sum of these amounts must equal to one. | tonne |
| $K^\text{output}_{pmt}$ | Amount of material $m$ produced by plant $p$ at time $t$ for each tonne of input material processed | tonne |
| $R^\text{tr}_{mt}$ | Cost to send material $m$ at time $t$ | \$/km-tonne |
| $R^\text{collect}_{cmt}$ | Cost of collecting material $m$ at center $c$ at time $t$ | \$/tonne |
| $R^\text{disp}_{umt}$ | Cost to dispose of material at plant/center $u$ at time $t$ | \$/tonne |
| $R^\text{fix}_{ut}$ | Fixed operating cost for plant/center $u$ at time $t$ | \$ |
| $R^\text{open}_{pt}$ | Cost to open plant $p$ at time $t$ | \$ |
| $R^\text{rev}_{ct}$ | Revenue for selling the input product of center $c$ at this center at time $t$ | \$/tonne |
| $R^\text{var}_{pt}$ | Cost to process one tonne of input material at plant $p$ at time $t$ | \$/tonne |
| $K^\text{out-fix}_{cmt}$ | Fixed amount of material $m$ collected at center $m$ at time $t$ | \$/tonne |
| $K^\text{out-var}_{c,m,i}$ | Factor used to calculate variable amount of material $m$ collected at center $m$. See `eq_z_collected` for more details. | -- |
| $K^\text{out-var-len}_{cm}$ | Length of the $K^\text{out-var}_{c,m,*}$ vector. | -- |
## Decision variables
@ -196,7 +197,7 @@ The goals is to minimize a linear objective function with the following terms:
\end{align*}
```
- Disposal limit at the plants (`eq_keep_open[p.name, t]`):
- Disposal limit at the plants (`eq_disposal_limit[p.name, m.name, t]`):
```math
\begin{align*}
@ -255,3 +256,12 @@ The goals is to minimize a linear objective function with the following terms:
& \forall c \in C, m \in M^+_c, t \in T
\end{align*}
```
- Global disposal limit (`eq_disposal_limit[m.name, t]`)
```math
\begin{align*}
& \sum_{p \in P} z^\text{disp}_{pmt} + \sum_{c \in C} z^\text{disp}_{cmt} \leq K^\text{disp-limit}_{mt}
& \forall m \in M, t \in T
\end{align*}
```

@ -20,9 +20,10 @@ function parse(json)::Instance
error("Invalid distance metric: $distance_metric_str")
end
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)
timeseries(::Nothing; null_val=nothing) = repeat([null_val], time_horizon)
timeseries(x::Number; null_val=nothing) = repeat([x], time_horizon)
timeseries(x::Array; null_val=nothing) = [xi === nothing ? null_val : xi for xi in x]
timeseries(d::OrderedDict; null_val=nothing) = OrderedDict(k => timeseries(v; null_val) for (k, v) in d)
# Read products
products = Product[]
@ -31,7 +32,8 @@ function parse(json)::Instance
tr_cost = timeseries(pdict["transportation cost (\$/km/tonne)"])
tr_energy = timeseries(pdict["transportation energy (J/km/tonne)"])
tr_emissions = timeseries(pdict["transportation emissions (tonne/km/tonne)"])
prod = Product(; name, tr_cost, tr_energy, tr_emissions)
disposal_limit = timeseries(pdict["disposal limit (tonne)"], null_val=Inf)
prod = Product(; name, tr_cost, tr_energy, tr_emissions, disposal_limit)
push!(products, prod)
products_by_name[name] = prod
end
@ -51,7 +53,7 @@ function parse(json)::Instance
outputs = [products_by_name[p] for p in cdict["outputs"]]
operating_cost = timeseries(cdict["operating cost (\$)"])
prod_dict(key, null_val) = OrderedDict(
p => [v === nothing ? null_val : v for v in timeseries(cdict[key][p.name])]
p => timeseries(cdict[key][p.name]; null_val)
for p in outputs
)
fixed_output = prod_dict("fixed output (tonne)", 0.0)

@ -14,6 +14,7 @@ Base.@kwdef struct Product
tr_cost::Vector{Float64}
tr_energy::Vector{Float64}
tr_emissions::OrderedDict{String,Vector{Float64}}
disposal_limit::Vector{Float64}
end
Base.@kwdef struct Center

@ -298,6 +298,18 @@ function build_model(instance::Instance; optimizer, variable_names::Bool = false
@constraint(model, z_disp[c.name, m.name, t] <= c.disposal_limit[m][t])
end
# Global disposal limit
eq_disposal_limit = _init(model, :eq_disposal_limit)
for m in products, t in T
isfinite(m.disposal_limit[t]) || continue
eq_disposal_limit[m.name, t] = @constraint(
model,
sum(z_disp[p.name, m.name, t] for p in plants if m in keys(p.output)) +
sum(z_disp[c.name, m.name, t] for c in centers if m in c.outputs) <=
m.disposal_limit[t]
)
end
if variable_names
_set_names!(model)
end

@ -69,6 +69,7 @@ function run_boat_example()
"transportation cost (\$/km/tonne)" => 0.30,
"transportation energy (J/km/tonne)" => 7_500,
"transportation emissions (tonne/km/tonne)" => dict("CO2" => 2.68),
"disposal limit (tonne)" => nothing,
)
boat_factory = dict(

@ -12,28 +12,32 @@
"transportation energy (J/km/tonne)": 7500,
"transportation emissions (tonne/km/tonne)": {
"CO2": 2.68
}
},
"disposal limit (tonne)": null
},
"Wood": {
"transportation cost ($/km/tonne)": 0.3,
"transportation energy (J/km/tonne)": 7500,
"transportation emissions (tonne/km/tonne)": {
"CO2": 2.68
}
},
"disposal limit (tonne)": null
},
"NewBoat": {
"transportation cost ($/km/tonne)": 0.3,
"transportation energy (J/km/tonne)": 7500,
"transportation emissions (tonne/km/tonne)": {
"CO2": 2.68
}
},
"disposal limit (tonne)": null
},
"UsedBoat": {
"transportation cost ($/km/tonne)": 0.3,
"transportation energy (J/km/tonne)": 7500,
"transportation emissions (tonne/km/tonne)": {
"CO2": 2.68
}
},
"disposal limit (tonne)": null
}
},
"centers": {

@ -1,7 +1,7 @@
center,output product,year,amount collected (tonne),amount disposed (tonne),collection cost ($),disposal cost ($)
NailFactory (Chicago),Nail,1,1.0,0.0,1000.0,0.0
NailFactory (Chicago),Nail,2,1.0,0.0,1000.0,0.0
NailFactory (Chicago),Nail,3,1.0,-0.0,1000.0,-0.0
NailFactory (Chicago),Nail,3,1.0,0.0,1000.0,0.0
NailFactory (Chicago),Nail,4,1.0,0.0,1000.0,0.0
NailFactory (Chicago),Nail,5,1.0,0.0,1000.0,0.0
NailFactory (Phoenix),Nail,1,1.0,0.0,1000.0,0.0
@ -9,11 +9,11 @@ NailFactory (Phoenix),Nail,2,1.0,0.0,1000.0,0.0
NailFactory (Phoenix),Nail,3,1.0,0.0,1000.0,0.0
NailFactory (Phoenix),Nail,4,1.0,0.0,1000.0,0.0
NailFactory (Phoenix),Nail,5,1.0,0.0,1000.0,0.0
NailFactory (Dallas),Nail,1,1.0,-0.0,1000.0,-0.0
NailFactory (Dallas),Nail,1,1.0,0.0,1000.0,0.0
NailFactory (Dallas),Nail,2,1.0,-0.0,1000.0,-0.0
NailFactory (Dallas),Nail,3,1.0,-0.0,1000.0,-0.0
NailFactory (Dallas),Nail,4,1.0,0.0,1000.0,0.0
NailFactory (Dallas),Nail,5,1.0,0.0,1000.0,0.0
NailFactory (Dallas),Nail,3,1.0,0.0,1000.0,0.0
NailFactory (Dallas),Nail,4,1.0,-0.0,1000.0,-0.0
NailFactory (Dallas),Nail,5,1.0,-0.0,1000.0,-0.0
Forest (Chicago),Wood,1,100.0,100.0,0.0,0.0
Forest (Chicago),Wood,2,100.0,100.0,0.0,0.0
Forest (Chicago),Wood,3,100.0,100.0,0.0,0.0
@ -43,17 +43,17 @@ Retail (Los Angeles),UsedBoat,1,0.0,0.0,0.0,0.0
Retail (Los Angeles),UsedBoat,2,0.0,0.0,0.0,0.0
Retail (Los Angeles),UsedBoat,3,0.0,0.0,0.0,0.0
Retail (Los Angeles),UsedBoat,4,0.0,0.0,0.0,0.0
Retail (Los Angeles),UsedBoat,5,0.0,0.0,0.0,0.0
Retail (Los Angeles),UsedBoat,5,-0.0,0.0,-0.0,0.0
Retail (Houston),UsedBoat,1,0.0,0.0,0.0,0.0
Retail (Houston),UsedBoat,2,0.0,0.0,0.0,0.0
Retail (Houston),UsedBoat,3,0.0,0.0,0.0,0.0
Retail (Houston),UsedBoat,4,0.0,0.0,0.0,0.0
Retail (Houston),UsedBoat,5,0.0,0.0,0.0,0.0
Retail (Houston),UsedBoat,5,-0.0,0.0,-0.0,0.0
Retail (Phoenix),UsedBoat,1,0.0,0.0,0.0,0.0
Retail (Phoenix),UsedBoat,2,0.0,0.0,0.0,0.0
Retail (Phoenix),UsedBoat,3,0.0,0.0,0.0,0.0
Retail (Phoenix),UsedBoat,4,0.0,0.0,0.0,0.0
Retail (Phoenix),UsedBoat,5,0.0,0.0,0.0,0.0
Retail (Phoenix),UsedBoat,4,-0.0,0.0,-0.0,0.0
Retail (Phoenix),UsedBoat,5,-0.0,0.0,-0.0,0.0
Retail (Philadelphia),UsedBoat,1,0.0,0.0,0.0,0.0
Retail (Philadelphia),UsedBoat,2,0.0,0.0,0.0,0.0
Retail (Philadelphia),UsedBoat,3,0.0,0.0,0.0,0.0

1 center output product year amount collected (tonne) amount disposed (tonne) collection cost ($) disposal cost ($)
2 NailFactory (Chicago) Nail 1 1.0 0.0 1000.0 0.0
3 NailFactory (Chicago) Nail 2 1.0 0.0 1000.0 0.0
4 NailFactory (Chicago) Nail 3 1.0 -0.0 0.0 1000.0 -0.0 0.0
5 NailFactory (Chicago) Nail 4 1.0 0.0 1000.0 0.0
6 NailFactory (Chicago) Nail 5 1.0 0.0 1000.0 0.0
7 NailFactory (Phoenix) Nail 1 1.0 0.0 1000.0 0.0
9 NailFactory (Phoenix) Nail 3 1.0 0.0 1000.0 0.0
10 NailFactory (Phoenix) Nail 4 1.0 0.0 1000.0 0.0
11 NailFactory (Phoenix) Nail 5 1.0 0.0 1000.0 0.0
12 NailFactory (Dallas) Nail 1 1.0 -0.0 0.0 1000.0 -0.0 0.0
13 NailFactory (Dallas) Nail 2 1.0 -0.0 1000.0 -0.0
14 NailFactory (Dallas) Nail 3 1.0 -0.0 0.0 1000.0 -0.0 0.0
15 NailFactory (Dallas) Nail 4 1.0 0.0 -0.0 1000.0 0.0 -0.0
16 NailFactory (Dallas) Nail 5 1.0 0.0 -0.0 1000.0 0.0 -0.0
17 Forest (Chicago) Wood 1 100.0 100.0 0.0 0.0
18 Forest (Chicago) Wood 2 100.0 100.0 0.0 0.0
19 Forest (Chicago) Wood 3 100.0 100.0 0.0 0.0
43 Retail (Los Angeles) UsedBoat 2 0.0 0.0 0.0 0.0
44 Retail (Los Angeles) UsedBoat 3 0.0 0.0 0.0 0.0
45 Retail (Los Angeles) UsedBoat 4 0.0 0.0 0.0 0.0
46 Retail (Los Angeles) UsedBoat 5 0.0 -0.0 0.0 0.0 -0.0 0.0
47 Retail (Houston) UsedBoat 1 0.0 0.0 0.0 0.0
48 Retail (Houston) UsedBoat 2 0.0 0.0 0.0 0.0
49 Retail (Houston) UsedBoat 3 0.0 0.0 0.0 0.0
50 Retail (Houston) UsedBoat 4 0.0 0.0 0.0 0.0
51 Retail (Houston) UsedBoat 5 0.0 -0.0 0.0 0.0 -0.0 0.0
52 Retail (Phoenix) UsedBoat 1 0.0 0.0 0.0 0.0
53 Retail (Phoenix) UsedBoat 2 0.0 0.0 0.0 0.0
54 Retail (Phoenix) UsedBoat 3 0.0 0.0 0.0 0.0
55 Retail (Phoenix) UsedBoat 4 0.0 -0.0 0.0 0.0 -0.0 0.0
56 Retail (Phoenix) UsedBoat 5 0.0 -0.0 0.0 0.0 -0.0 0.0
57 Retail (Philadelphia) UsedBoat 1 0.0 0.0 0.0 0.0
58 Retail (Philadelphia) UsedBoat 2 0.0 0.0 0.0 0.0
59 Retail (Philadelphia) UsedBoat 3 0.0 0.0 0.0 0.0

@ -43,16 +43,16 @@ Retail (Los Angeles),1,NewBoat,0.0,0.0,125000.0
Retail (Los Angeles),2,NewBoat,0.0,0.0,125000.0
Retail (Los Angeles),3,NewBoat,0.0,0.0,125000.0
Retail (Los Angeles),4,NewBoat,0.0,0.0,125000.0
Retail (Los Angeles),5,NewBoat,0.0,0.0,125000.0
Retail (Los Angeles),5,NewBoat,-0.0,0.0,125000.0
Retail (Houston),1,NewBoat,0.0,0.0,125000.0
Retail (Houston),2,NewBoat,0.0,0.0,125000.0
Retail (Houston),3,NewBoat,0.0,0.0,125000.0
Retail (Houston),4,NewBoat,0.0,0.0,125000.0
Retail (Houston),5,NewBoat,0.0,0.0,125000.0
Retail (Houston),5,NewBoat,-0.0,0.0,125000.0
Retail (Phoenix),1,NewBoat,0.0,0.0,125000.0
Retail (Phoenix),2,NewBoat,0.0,0.0,125000.0
Retail (Phoenix),3,NewBoat,0.0,0.0,125000.0
Retail (Phoenix),4,NewBoat,0.0,0.0,125000.0
Retail (Phoenix),4,NewBoat,-0.0,-0.0,125000.0
Retail (Phoenix),5,NewBoat,0.0,0.0,125000.0
Retail (Philadelphia),1,NewBoat,0.0,0.0,125000.0
Retail (Philadelphia),2,NewBoat,0.0,0.0,125000.0

1 center year input product input amount (tonne) revenue ($) operating cost ($)
43 Retail (Los Angeles) 2 NewBoat 0.0 0.0 125000.0
44 Retail (Los Angeles) 3 NewBoat 0.0 0.0 125000.0
45 Retail (Los Angeles) 4 NewBoat 0.0 0.0 125000.0
46 Retail (Los Angeles) 5 NewBoat 0.0 -0.0 0.0 125000.0
47 Retail (Houston) 1 NewBoat 0.0 0.0 125000.0
48 Retail (Houston) 2 NewBoat 0.0 0.0 125000.0
49 Retail (Houston) 3 NewBoat 0.0 0.0 125000.0
50 Retail (Houston) 4 NewBoat 0.0 0.0 125000.0
51 Retail (Houston) 5 NewBoat 0.0 -0.0 0.0 125000.0
52 Retail (Phoenix) 1 NewBoat 0.0 0.0 125000.0
53 Retail (Phoenix) 2 NewBoat 0.0 0.0 125000.0
54 Retail (Phoenix) 3 NewBoat 0.0 0.0 125000.0
55 Retail (Phoenix) 4 NewBoat 0.0 -0.0 0.0 -0.0 125000.0
56 Retail (Phoenix) 5 NewBoat 0.0 0.0 125000.0
57 Retail (Philadelphia) 1 NewBoat 0.0 0.0 125000.0
58 Retail (Philadelphia) 2 NewBoat 0.0 0.0 125000.0

@ -50,12 +50,12 @@ BoatFactory (San Jose),NewBoat,3,0.0,0.0,0.0
BoatFactory (San Jose),NewBoat,4,0.0,0.0,0.0
BoatFactory (San Jose),NewBoat,5,0.0,0.0,0.0
RecyclingPlant (Chicago),Nail,1,0.0,0.0,0.0
RecyclingPlant (Chicago),Nail,2,0.0,0.0,0.0
RecyclingPlant (Chicago),Nail,2,-0.0,0.0,0.0
RecyclingPlant (Chicago),Nail,3,0.0,0.0,0.0
RecyclingPlant (Chicago),Nail,4,0.0,0.0,0.0
RecyclingPlant (Chicago),Nail,5,0.0,0.0,0.0
RecyclingPlant (Chicago),Wood,1,0.0,0.0,0.0
RecyclingPlant (Chicago),Wood,2,0.0,0.0,0.0
RecyclingPlant (Chicago),Wood,2,-0.0,0.0,0.0
RecyclingPlant (Chicago),Wood,3,0.0,0.0,0.0
RecyclingPlant (Chicago),Wood,4,0.0,0.0,0.0
RecyclingPlant (Chicago),Wood,5,0.0,0.0,0.0

1 plant output product year amount produced (tonne) amount disposed (tonne) disposal cost ($)
50 BoatFactory (San Jose) NewBoat 4 0.0 0.0 0.0
51 BoatFactory (San Jose) NewBoat 5 0.0 0.0 0.0
52 RecyclingPlant (Chicago) Nail 1 0.0 0.0 0.0
53 RecyclingPlant (Chicago) Nail 2 0.0 -0.0 0.0 0.0
54 RecyclingPlant (Chicago) Nail 3 0.0 0.0 0.0
55 RecyclingPlant (Chicago) Nail 4 0.0 0.0 0.0
56 RecyclingPlant (Chicago) Nail 5 0.0 0.0 0.0
57 RecyclingPlant (Chicago) Wood 1 0.0 0.0 0.0
58 RecyclingPlant (Chicago) Wood 2 0.0 -0.0 0.0 0.0
59 RecyclingPlant (Chicago) Wood 3 0.0 0.0 0.0
60 RecyclingPlant (Chicago) Wood 4 0.0 0.0 0.0
61 RecyclingPlant (Chicago) Wood 5 0.0 0.0 0.0

@ -1,39 +1,39 @@
plant,year,operational?,input amount (tonne),opening cost ($),fixed operating cost ($),variable operating cost ($)
BoatFactory (Chicago),1,false,-0.0,0.0,0.0,-0.0
BoatFactory (Chicago),2,false,-0.0,0.0,0.0,-0.0
BoatFactory (Chicago),3,false,-0.0,0.0,0.0,-0.0
BoatFactory (Chicago),4,false,-0.0,0.0,0.0,-0.0
BoatFactory (Chicago),5,false,-0.0,0.0,0.0,-0.0
BoatFactory (Chicago),1,false,0.0,0.0,0.0,0.0
BoatFactory (Chicago),2,false,0.0,0.0,0.0,0.0
BoatFactory (Chicago),3,false,0.0,0.0,0.0,0.0
BoatFactory (Chicago),4,false,0.0,0.0,0.0,0.0
BoatFactory (Chicago),5,false,0.0,0.0,0.0,0.0
BoatFactory (New York City),1,false,0.0,0.0,0.0,0.0
BoatFactory (New York City),2,false,0.0,0.0,0.0,0.0
BoatFactory (New York City),3,false,0.0,0.0,0.0,0.0
BoatFactory (New York City),4,false,0.0,0.0,0.0,0.0
BoatFactory (New York City),5,false,0.0,0.0,0.0,0.0
BoatFactory (Los Angeles),1,false,-0.0,0.0,0.0,-0.0
BoatFactory (Los Angeles),2,false,-0.0,0.0,0.0,-0.0
BoatFactory (Los Angeles),3,false,-0.0,0.0,0.0,-0.0
BoatFactory (Los Angeles),4,false,-0.0,0.0,0.0,-0.0
BoatFactory (Los Angeles),5,false,-0.0,0.0,0.0,-0.0
BoatFactory (Houston),1,false,-0.0,0.0,0.0,-0.0
BoatFactory (Houston),2,false,-0.0,0.0,0.0,-0.0
BoatFactory (Houston),3,false,-0.0,0.0,0.0,-0.0
BoatFactory (Houston),4,false,-0.0,0.0,0.0,-0.0
BoatFactory (Houston),5,false,-0.0,0.0,0.0,-0.0
BoatFactory (Phoenix),1,false,-0.0,0.0,0.0,-0.0
BoatFactory (Phoenix),2,false,-0.0,0.0,0.0,-0.0
BoatFactory (Los Angeles),1,false,0.0,0.0,0.0,0.0
BoatFactory (Los Angeles),2,false,0.0,0.0,0.0,0.0
BoatFactory (Los Angeles),3,false,0.0,0.0,0.0,0.0
BoatFactory (Los Angeles),4,false,0.0,0.0,0.0,0.0
BoatFactory (Los Angeles),5,false,0.0,0.0,0.0,0.0
BoatFactory (Houston),1,false,0.0,0.0,0.0,0.0
BoatFactory (Houston),2,false,0.0,0.0,0.0,0.0
BoatFactory (Houston),3,false,0.0,0.0,0.0,0.0
BoatFactory (Houston),4,false,0.0,0.0,0.0,0.0
BoatFactory (Houston),5,false,0.0,0.0,0.0,0.0
BoatFactory (Phoenix),1,false,0.0,0.0,0.0,0.0
BoatFactory (Phoenix),2,false,0.0,0.0,0.0,0.0
BoatFactory (Phoenix),3,false,0.0,0.0,0.0,0.0
BoatFactory (Phoenix),4,false,-0.0,0.0,0.0,-0.0
BoatFactory (Phoenix),4,false,0.0,0.0,0.0,0.0
BoatFactory (Phoenix),5,false,0.0,0.0,0.0,0.0
BoatFactory (Philadelphia),1,false,0.0,0.0,0.0,0.0
BoatFactory (Philadelphia),2,false,0.0,0.0,0.0,0.0
BoatFactory (Philadelphia),3,false,0.0,0.0,0.0,0.0
BoatFactory (Philadelphia),4,false,0.0,0.0,0.0,0.0
BoatFactory (Philadelphia),5,false,0.0,0.0,0.0,0.0
BoatFactory (San Antonio),1,false,-0.0,0.0,0.0,-0.0
BoatFactory (San Antonio),2,false,-0.0,0.0,0.0,-0.0
BoatFactory (San Antonio),3,false,-0.0,0.0,0.0,-0.0
BoatFactory (San Antonio),4,false,-0.0,0.0,0.0,-0.0
BoatFactory (San Antonio),5,false,-0.0,0.0,0.0,-0.0
BoatFactory (San Antonio),1,false,0.0,0.0,0.0,0.0
BoatFactory (San Antonio),2,false,0.0,0.0,0.0,0.0
BoatFactory (San Antonio),3,false,0.0,0.0,0.0,0.0
BoatFactory (San Antonio),4,false,0.0,0.0,0.0,0.0
BoatFactory (San Antonio),5,false,0.0,0.0,0.0,0.0
BoatFactory (San Diego),1,false,0.0,0.0,0.0,0.0
BoatFactory (San Diego),2,false,0.0,0.0,0.0,0.0
BoatFactory (San Diego),3,false,0.0,0.0,0.0,0.0
@ -50,7 +50,7 @@ BoatFactory (San Jose),3,false,0.0,0.0,0.0,0.0
BoatFactory (San Jose),4,false,0.0,0.0,0.0,0.0
BoatFactory (San Jose),5,false,0.0,0.0,0.0,0.0
RecyclingPlant (Chicago),1,false,0.0,0.0,0.0,0.0
RecyclingPlant (Chicago),2,false,0.0,0.0,0.0,0.0
RecyclingPlant (Chicago),2,false,-0.0,0.0,0.0,-0.0
RecyclingPlant (Chicago),3,false,0.0,0.0,0.0,0.0
RecyclingPlant (Chicago),4,false,0.0,0.0,0.0,0.0
RecyclingPlant (Chicago),5,false,0.0,0.0,0.0,0.0
@ -71,7 +71,7 @@ RecyclingPlant (Houston),4,false,0.0,0.0,0.0,0.0
RecyclingPlant (Houston),5,false,0.0,0.0,0.0,0.0
RecyclingPlant (Phoenix),1,false,0.0,0.0,0.0,0.0
RecyclingPlant (Phoenix),2,false,0.0,0.0,0.0,0.0
RecyclingPlant (Phoenix),3,false,-0.0,0.0,0.0,-0.0
RecyclingPlant (Phoenix),3,false,0.0,0.0,0.0,0.0
RecyclingPlant (Phoenix),4,false,0.0,0.0,0.0,0.0
RecyclingPlant (Phoenix),5,false,0.0,0.0,0.0,0.0
RecyclingPlant (Philadelphia),1,false,0.0,0.0,0.0,0.0

1 plant year operational? input amount (tonne) opening cost ($) fixed operating cost ($) variable operating cost ($)
2 BoatFactory (Chicago) 1 false -0.0 0.0 0.0 0.0 -0.0 0.0
3 BoatFactory (Chicago) 2 false -0.0 0.0 0.0 0.0 -0.0 0.0
4 BoatFactory (Chicago) 3 false -0.0 0.0 0.0 0.0 -0.0 0.0
5 BoatFactory (Chicago) 4 false -0.0 0.0 0.0 0.0 -0.0 0.0
6 BoatFactory (Chicago) 5 false -0.0 0.0 0.0 0.0 -0.0 0.0
7 BoatFactory (New York City) 1 false 0.0 0.0 0.0 0.0
8 BoatFactory (New York City) 2 false 0.0 0.0 0.0 0.0
9 BoatFactory (New York City) 3 false 0.0 0.0 0.0 0.0
10 BoatFactory (New York City) 4 false 0.0 0.0 0.0 0.0
11 BoatFactory (New York City) 5 false 0.0 0.0 0.0 0.0
12 BoatFactory (Los Angeles) 1 false -0.0 0.0 0.0 0.0 -0.0 0.0
13 BoatFactory (Los Angeles) 2 false -0.0 0.0 0.0 0.0 -0.0 0.0
14 BoatFactory (Los Angeles) 3 false -0.0 0.0 0.0 0.0 -0.0 0.0
15 BoatFactory (Los Angeles) 4 false -0.0 0.0 0.0 0.0 -0.0 0.0
16 BoatFactory (Los Angeles) 5 false -0.0 0.0 0.0 0.0 -0.0 0.0
17 BoatFactory (Houston) 1 false -0.0 0.0 0.0 0.0 -0.0 0.0
18 BoatFactory (Houston) 2 false -0.0 0.0 0.0 0.0 -0.0 0.0
19 BoatFactory (Houston) 3 false -0.0 0.0 0.0 0.0 -0.0 0.0
20 BoatFactory (Houston) 4 false -0.0 0.0 0.0 0.0 -0.0 0.0
21 BoatFactory (Houston) 5 false -0.0 0.0 0.0 0.0 -0.0 0.0
22 BoatFactory (Phoenix) 1 false -0.0 0.0 0.0 0.0 -0.0 0.0
23 BoatFactory (Phoenix) 2 false -0.0 0.0 0.0 0.0 -0.0 0.0
24 BoatFactory (Phoenix) 3 false 0.0 0.0 0.0 0.0
25 BoatFactory (Phoenix) 4 false -0.0 0.0 0.0 0.0 -0.0 0.0
26 BoatFactory (Phoenix) 5 false 0.0 0.0 0.0 0.0
27 BoatFactory (Philadelphia) 1 false 0.0 0.0 0.0 0.0
28 BoatFactory (Philadelphia) 2 false 0.0 0.0 0.0 0.0
29 BoatFactory (Philadelphia) 3 false 0.0 0.0 0.0 0.0
30 BoatFactory (Philadelphia) 4 false 0.0 0.0 0.0 0.0
31 BoatFactory (Philadelphia) 5 false 0.0 0.0 0.0 0.0
32 BoatFactory (San Antonio) 1 false -0.0 0.0 0.0 0.0 -0.0 0.0
33 BoatFactory (San Antonio) 2 false -0.0 0.0 0.0 0.0 -0.0 0.0
34 BoatFactory (San Antonio) 3 false -0.0 0.0 0.0 0.0 -0.0 0.0
35 BoatFactory (San Antonio) 4 false -0.0 0.0 0.0 0.0 -0.0 0.0
36 BoatFactory (San Antonio) 5 false -0.0 0.0 0.0 0.0 -0.0 0.0
37 BoatFactory (San Diego) 1 false 0.0 0.0 0.0 0.0
38 BoatFactory (San Diego) 2 false 0.0 0.0 0.0 0.0
39 BoatFactory (San Diego) 3 false 0.0 0.0 0.0 0.0
50 BoatFactory (San Jose) 4 false 0.0 0.0 0.0 0.0
51 BoatFactory (San Jose) 5 false 0.0 0.0 0.0 0.0
52 RecyclingPlant (Chicago) 1 false 0.0 0.0 0.0 0.0
53 RecyclingPlant (Chicago) 2 false 0.0 -0.0 0.0 0.0 0.0 -0.0
54 RecyclingPlant (Chicago) 3 false 0.0 0.0 0.0 0.0
55 RecyclingPlant (Chicago) 4 false 0.0 0.0 0.0 0.0
56 RecyclingPlant (Chicago) 5 false 0.0 0.0 0.0 0.0
71 RecyclingPlant (Houston) 5 false 0.0 0.0 0.0 0.0
72 RecyclingPlant (Phoenix) 1 false 0.0 0.0 0.0 0.0
73 RecyclingPlant (Phoenix) 2 false 0.0 0.0 0.0 0.0
74 RecyclingPlant (Phoenix) 3 false -0.0 0.0 0.0 0.0 -0.0 0.0
75 RecyclingPlant (Phoenix) 4 false 0.0 0.0 0.0 0.0
76 RecyclingPlant (Phoenix) 5 false 0.0 0.0 0.0 0.0
77 RecyclingPlant (Philadelphia) 1 false 0.0 0.0 0.0 0.0

@ -11,7 +11,8 @@
"transportation emissions (tonne/km/tonne)": {
"CO2": 0.052,
"CH4": [0.003, 0.003, 0.003, 0.003]
}
},
"disposal limit (tonne)": 1.0
},
"P2": {
"transportation cost ($/km/tonne)": [0.015, 0.015, 0.015, 0.015],
@ -19,7 +20,8 @@
"transportation emissions (tonne/km/tonne)": {
"CO2": [0.052, 0.052, 0.052, 0.052],
"CH4": [0.003, 0.003, 0.003, 0.003]
}
},
"disposal limit (tonne)": 2.0
},
"P3": {
"transportation cost ($/km/tonne)": [0.015, 0.015, 0.015, 0.015],
@ -27,7 +29,8 @@
"transportation emissions (tonne/km/tonne)": {
"CO2": [0.052, 0.052, 0.052, 0.052],
"CH4": [0.003, 0.003, 0.003, 0.003]
}
},
"disposal limit (tonne)": 5.0
},
"P4": {
"transportation cost ($/km/tonne)": [0.015, 0.015, 0.015, 0.015],
@ -35,7 +38,8 @@
"transportation emissions (tonne/km/tonne)": {
"CO2": [0.052, 0.052, 0.052, 0.052],
"CH4": [0.003, 0.003, 0.003, 0.003]
}
},
"disposal limit (tonne)": null
}
},
"centers": {

@ -18,6 +18,7 @@ function instance_parse_test_1()
@test p1.tr_energy == [0.12, 0.12, 0.12, 0.12]
@test p1.tr_emissions ==
Dict("CO2" => [0.052, 0.052, 0.052, 0.052], "CH4" => [0.003, 0.003, 0.003, 0.003])
@test p1.disposal_limit == [1.0, 1.0, 1.0, 1.0]
@test instance.products_by_name["P1"] === p1
p2 = instance.products[2]
p3 = instance.products[3]

@ -109,4 +109,13 @@ function model_build_test()
@test repr(model[:eq_disposal_limit]["C1", "P2", 1]) ==
"eq_disposal_limit[C1,P2,1] : z_disp[C1,P2,1] ≤ 0"
@test ("C1", "P3", 1) keys(model[:eq_disposal_limit])
# Global disposal limit
@test repr(model[:eq_disposal_limit]["P1", 1]) ==
"eq_disposal_limit[P1,1] : z_disp[C2,P1,1] ≤ 1"
@test repr(model[:eq_disposal_limit]["P2", 1]) ==
"eq_disposal_limit[P2,1] : z_disp[C1,P2,1] ≤ 2"
@test repr(model[:eq_disposal_limit]["P3", 1]) ==
"eq_disposal_limit[P3,1] : z_disp[L1,P3,1] + z_disp[C1,P3,1] ≤ 5"
@test ("P4", 1) keys(model[:eq_disposal_limit])
end

Loading…
Cancel
Save