Describe piecewise-linear capacities in the docs; update JSON schema

v0.1
Alinson S. Xavier 5 years ago
parent d3d8cd872e
commit 1335dc42b3

@ -1,7 +1,7 @@
name = "RELOG"
uuid = "a2afcdf7-cf04-4913-85f9-c0d81ddf2008"
authors = ["Alinson S Xavier <axavier@anl.gov>"]
version = "1.0.0"
version = "0.1.0"
[deps]
Cbc = "9961bab8-2fa3-5c5a-9d89-47fab24efd76"

@ -276,5 +276,5 @@ POSSIBILITY OF SUCH DAMAGE.
<!--
MkDocs version : 1.1
Build Date UTC : 2020-05-22 14:47:36
Build Date UTC : 2020-05-22 15:06:46
-->

@ -288,30 +288,6 @@
<td>The longitude of the location, in degrees.</td>
</tr>
<tr>
<td align="left"><code>opening cost</code></td>
<td>The cost (in dollars) to open the plant.</td>
</tr>
<tr>
<td align="left"><code>fixed operating cost</code></td>
<td>The cost (in dollars) to keep the plant open, even if the plant doesn't process anything. Must be a timeseries.</td>
</tr>
<tr>
<td align="left"><code>variable operating cost</code></td>
<td>The cost (in dollars per tonnes) that the plant incurs to process each tonnes of input. Must be a timeseries.</td>
</tr>
<tr>
<td align="left"><code>base capacity</code></td>
<td>The amount of input (in tonnes) the plant can process when zero dollars are spent on expansion. If unlimited, this key may be omitted.</td>
</tr>
<tr>
<td align="left"><code>max capacity</code></td>
<td>The amount (in tonnes) the plant can process when the maximum amount of dollars are spent on expansion. If unlimited, this key may be omitted.</td>
</tr>
<tr>
<td align="left"><code>expansion cost</code></td>
<td>The cost (in dollars per tonnes) to increase the plant capacity beyond its base capacity. If zero, this key may be omitted. Must be a timeseries.</td>
</tr>
<tr>
<td align="left"><code>disposal</code></td>
<td>A dictionary describing what products can be disposed locally at the plant.</td>
</tr>
@ -340,6 +316,29 @@
</tr>
</tbody>
</table>
<p>The keys in the <code>capacities</code> dictionary should be the amounts (in tonnes). The values are dictionaries with the following keys:</p>
<table>
<thead>
<tr>
<th align="left">Key</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>opening cost</code></td>
<td>The cost (in dollars) to open a plant of this size.</td>
</tr>
<tr>
<td align="left"><code>fixed operating cost</code></td>
<td>The cost (in dollars) to keep the plant open, even if the plant doesn't process anything. Must be a timeseries.</td>
</tr>
<tr>
<td align="left"><code>variable operating cost</code></td>
<td>The cost (in dollars per tonnes) that the plant incurs to process each tonne of input. Must be a timeseries.</td>
</tr>
</tbody>
</table>
<h3 id="example_2">Example</h3>
<pre><code class="json">{
&quot;plants&quot;: {
@ -353,33 +352,30 @@
&quot;L1&quot;: {
&quot;latitude&quot;: 0.0,
&quot;longitude&quot;: 0.0,
&quot;opening cost&quot;: [500, 500],
&quot;base capacity&quot;: 250.0,
&quot;max capacity&quot;: 1000.0,
&quot;expansion cost&quot;: [1.0, 1.0],
&quot;fixed operating cost&quot;: [30.0, 30.0],
&quot;variable operating cost&quot;: [30.0, 30.0],
&quot;disposal&quot;: {
&quot;P2&quot;: {
&quot;cost&quot;: [-10.0, -10.0],
&quot;cost&quot;: [-10.0, -12.0],
&quot;limit&quot;: [1.0, 1.0]
}
},
&quot;capacities&quot;: {
&quot;100&quot;: {
&quot;opening cost&quot;: [500, 530],
&quot;fixed operating cost&quot;: [300.0, 310.0],
&quot;variable operating cost&quot;: [5.0, 5.2]
},
&quot;P3&quot;: {
&quot;cost&quot;: [-10.0, -10.0],
&quot;limit&quot;: [1.0, 1.0]
&quot;500&quot;: {
&quot;opening cost&quot;: [750, 760],
&quot;fixed operating cost&quot;: [400.0, 450.0],
&quot;variable operating cost&quot;: [4.5, 4.7]
},
&quot;700&quot;: {
&quot;opening cost&quot;: [1000, 1000],
&quot;fixed operating cost&quot;: [500.0, 600.0],
&quot;variable operating cost&quot;: [4.0, 4.4]
}
}
},
&quot;L2&quot;: {
&quot;latitude&quot;: 0.5,
&quot;longitude&quot;: 0.5,
&quot;opening cost&quot;: [1000, 1000],
&quot;base capacity&quot;: 0.0,
&quot;max capacity&quot;: 10000.0,
&quot;expansion cost&quot;: [1.0, 1.0],
&quot;fixed operating cost&quot;: [50.0, 50.0],
&quot;variable operating cost&quot;: [50.0, 50.0]
}
}
}
}
}

File diff suppressed because one or more lines are too long

Binary file not shown.

@ -79,12 +79,6 @@
"L1": {
"latitude": 0.0,
"longitude": 0.0,
"opening cost": [500, 500],
"base capacity": 250.0,
"max capacity": 1000.0,
"expansion cost": [1.0, 1.0],
"fixed operating cost": [30.0, 30.0],
"variable operating cost": [30.0, 30.0],
"disposal": {
"P2": {
"cost": [-10.0, -10.0],
@ -94,17 +88,35 @@
"cost": [-10.0, -10.0],
"limit": [1.0, 1.0]
}
},
"capacities": {
"250.0": {
"opening cost": [500.0, 500.0],
"fixed operating cost": [30.0, 30.0],
"variable operating cost": [30.0, 30.0]
},
"1000.0": {
"opening cost": [1250.0, 1250.0],
"fixed operating cost": [30.0, 30.0],
"variable operating cost": [30.0, 30.0]
}
}
},
"L2": {
"latitude": 0.5,
"longitude": 0.5,
"opening cost": [1000, 1000],
"base capacity": 0.0,
"max capacity": 10000.0,
"expansion cost": [1.0, 1.0],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
"capacities": {
"0.0": {
"opening cost": [1000, 1000],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
},
"10000.0": {
"opening cost": [10000, 10000],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
}
}
}
}
},
@ -118,22 +130,29 @@
"L3": {
"latitude": 25.0,
"longitude": 65.0,
"capacity": 1000,
"opening cost": [3000, 3000],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0],
"disposal": {
"P3": {
"cost": [100.0, 100.0]
}
},
"capacities": {
"1000.0": {
"opening cost": [3000, 3000],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
}
}
},
"L4": {
"latitude": 0.75,
"longitude": 0.20,
"opening cost": [3000, 3000],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
"capacities": {
"10000": {
"opening cost": [3000, 3000],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
}
}
}
}
},
@ -143,9 +162,13 @@
"L5": {
"latitude": 100.0,
"longitude": 100.0,
"opening cost": [0.0, 0.0],
"fixed operating cost": [0.0, 0.0],
"variable operating cost": [-15.0, -15.0]
"capacities": {
"10000": {
"opening cost": [0.0, 0.0],
"fixed operating cost": [0.0, 0.0],
"variable operating cost": [-15.0, -15.0]
}
}
}
}
},
@ -155,9 +178,13 @@
"L6": {
"latitude": 50.0,
"longitude": 50.0,
"opening cost": [0.0, 0.0],
"fixed operating cost": [0.0, 0.0],
"variable operating cost": [-15.0, -15.0]
"capacities": {
"10000": {
"opening cost": [0.0, 0.0],
"fixed operating cost": [0.0, 0.0],
"variable operating cost": [-15.0, -15.0]
}
}
}
}
}

@ -91,12 +91,6 @@ Each type of plant is associated with a set of potential locations where it can
|:------------------------|---------------|
| `latitude` | The latitude of the location, in degrees.
| `longitude` | The longitude of the location, in degrees.
| `opening cost` | The cost (in dollars) to open the plant.
| `fixed operating cost` | The cost (in dollars) to keep the plant open, even if the plant doesn't process anything. Must be a timeseries.
| `variable operating cost` | The cost (in dollars per tonnes) that the plant incurs to process each tonnes of input. Must be a timeseries.
| `base capacity` | The amount of input (in tonnes) the plant can process when zero dollars are spent on expansion. If unlimited, this key may be omitted.
| `max capacity` | The amount (in tonnes) the plant can process when the maximum amount of dollars are spent on expansion. If unlimited, this key may be omitted.
| `expansion cost` | The cost (in dollars per tonnes) to increase the plant capacity beyond its base capacity. If zero, this key may be omitted. Must be a timeseries.
| `disposal` | A dictionary describing what products can be disposed locally at the plant.
| `capacities` | A dictionary describing what plant sizes are allowed, and their characteristics.
@ -108,6 +102,14 @@ The keys in the `disposal` dictionary should be the names of the products. The v
| `limit` | The maximum amount (in tonnes) that can be disposed of. If an unlimited amount can be disposed, this key may be omitted. Must be a timeseries.
The keys in the `capacities` dictionary should be the amounts (in tonnes). The values are dictionaries with the following keys:
| Key | Description
|:------------------------|---------------|
| `opening cost` | The cost (in dollars) to open a plant of this size.
| `fixed operating cost` | The cost (in dollars) to keep the plant open, even if the plant doesn't process anything. Must be a timeseries.
| `variable operating cost` | The cost (in dollars per tonnes) that the plant incurs to process each tonne of input. Must be a timeseries.
### Example
```json
@ -123,33 +125,30 @@ The keys in the `disposal` dictionary should be the names of the products. The v
"L1": {
"latitude": 0.0,
"longitude": 0.0,
"opening cost": [500, 500],
"base capacity": 250.0,
"max capacity": 1000.0,
"expansion cost": [1.0, 1.0],
"fixed operating cost": [30.0, 30.0],
"variable operating cost": [30.0, 30.0],
"disposal": {
"P2": {
"cost": [-10.0, -10.0],
"cost": [-10.0, -12.0],
"limit": [1.0, 1.0]
}
},
"capacities": {
"100": {
"opening cost": [500, 530],
"fixed operating cost": [300.0, 310.0],
"variable operating cost": [5.0, 5.2]
},
"P3": {
"cost": [-10.0, -10.0],
"limit": [1.0, 1.0]
"500": {
"opening cost": [750, 760],
"fixed operating cost": [400.0, 450.0],
"variable operating cost": [4.5, 4.7]
},
"700": {
"opening cost": [1000, 1000],
"fixed operating cost": [500.0, 600.0],
"variable operating cost": [4.0, 4.4]
}
}
},
"L2": {
"latitude": 0.5,
"longitude": 0.5,
"opening cost": [1000, 1000],
"base capacity": 0.0,
"max capacity": 10000.0,
"expansion cost": [1.0, 1.0],
"fixed operating cost": [50.0, 50.0],
"variable operating cost": [50.0, 50.0]
}
}
}
}
}
@ -160,6 +159,5 @@ Model Assumptions
-----------------
* Each plant can only be opened exactly once. After open, the plant remains open until the end of the simulation.
* Plants can be expanded at any time, even long after they are open.
* Variable and fixed operating costs do not change according to plant size.
* All material available at the beginning of a time period must be entirely processed by the end of that time period. It is not possible to store unprocessed materials from one time period to the next.

@ -43,12 +43,6 @@
"properties": {
"latitude": { "type": "number" },
"longitude": { "type": "number" },
"variable operating cost": { "$ref": "#/definitions/TimeSeries" },
"fixed operating cost": { "$ref": "#/definitions/TimeSeries" },
"opening cost": { "$ref": "#/definitions/TimeSeries" },
"base capacity": { "type": "number" },
"max capacity": { "type": "number" },
"expansion cost": { "$ref": "#/definitions/TimeSeries" },
"disposal": {
"type": "object",
"additionalProperties": {
@ -61,14 +55,28 @@
"cost"
]
}
}
},
"capacities": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"variable operating cost": { "$ref": "#/definitions/TimeSeries" },
"fixed operating cost": { "$ref": "#/definitions/TimeSeries" },
"opening cost": { "$ref": "#/definitions/TimeSeries" }
},
"required": [
"variable operating cost",
"fixed operating cost",
"opening cost"
]
}
}
},
"required": [
"latitude",
"longitude",
"variable operating cost",
"fixed operating cost",
"opening cost"
"capacities"
]
}
},

Loading…
Cancel
Save