diff --git a/0.5/404.html b/0.5/404.html index e8b2351..51a7eb5 100644 --- a/0.5/404.html +++ b/0.5/404.html @@ -59,7 +59,9 @@ - RELOG + + RELOG + @@ -127,18 +129,22 @@ - + diff --git a/0.5/css/base.css b/0.5/css/base.css index 7b45cbb..2d68482 100644 --- a/0.5/css/base.css +++ b/0.5/css/base.css @@ -1,12 +1,9 @@ -body { - padding-top: 70px; +html { + scroll-padding-top: 70px; } -h1[id]:before, h2[id]:before, h3[id]:before, h4[id]:before, h5[id]:before, h6[id]:before { - content: ""; - display: block; - margin-top: -75px; - height: 75px; +body { + padding-top: 70px; } p > img { @@ -103,7 +100,8 @@ div.source-links { .bs-sidebar.affix { position: fixed; /* Undo the static from mobile first approach */ top: 80px; - max-height: calc(100% - 90px); + max-height: calc(100% - 180px); + overflow-y: auto; } .bs-sidebar.affix-bottom { position: absolute; /* Undo the static from mobile first approach */ @@ -228,6 +226,16 @@ div.source-links { } /* End Bootstrap Callouts CSS Source by Chris Pratt */ +/* Headerlinks */ +.headerlink { + display: none; + padding-left: .5em; +} + +h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink, h4:hover .headerlink, h5:hover .headerlink, h6:hover .headerlink { + display: inline-block; +} + /* Admonitions */ .admonition { padding: 20px; diff --git a/0.5/css/base.min.css b/0.5/css/base.min.css index c5454f8..f7e580f 100644 --- a/0.5/css/base.min.css +++ b/0.5/css/base.min.css @@ -1 +1 @@ -body{padding-top:70px}h1[id]:before,h2[id]:before,h3[id]:before,h4[id]:before,h5[id]:before,h6[id]:before{content:"";display:block;margin-top:-75px;height:75px}p>img{max-width:100%;height:auto}ul.nav li.first-level{font-weight:bold}ul.nav li.third-level{padding-left:12px}div.col-md-3{padding-left:0}div.col-md-9{padding-bottom:100px}div.source-links{float:right}.bs-sidebar.affix{position:static}.bs-sidebar.well{padding:0}.bs-sidenav{margin-top:30px;margin-bottom:30px;padding-top:10px;padding-bottom:10px;border-radius:5px}.bs-sidebar .nav>li>a{display:block;padding:5px 20px;z-index:1}.bs-sidebar .nav>li>a:hover,.bs-sidebar .nav>li>a:focus{text-decoration:none;border-right:1px solid}.bs-sidebar .nav>.active>a,.bs-sidebar .nav>.active:hover>a,.bs-sidebar .nav>.active:focus>a{font-weight:bold;background-color:transparent;border-right:1px solid}.bs-sidebar .nav .nav{display:none;margin-bottom:8px}.bs-sidebar .nav .nav>li>a{padding-top:3px;padding-bottom:3px;padding-left:30px;font-size:90%}@media(min-width:992px){.bs-sidebar .nav>.active>ul{display:block}.bs-sidebar.affix,.bs-sidebar.affix-bottom{width:213px}.bs-sidebar.affix{position:fixed;top:80px;max-height:calc(100% - 90px)}.bs-sidebar.affix-bottom{position:absolute}.bs-sidebar.affix-bottom .bs-sidenav,.bs-sidebar.affix .bs-sidenav{margin-top:0;margin-bottom:0}}@media(min-width:1200px){.bs-sidebar.affix-bottom,.bs-sidebar.affix{width:263px}}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:00px}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px;background-color:#fcfdff}.bs-callout h4{font-style:normal;font-weight:400;margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-default{border-left-color:#fa023c}.bs-callout-default h4{color:#fa023c}.bs-callout-primary{border-left-color:#428bca}.bs-callout-primary h4{color:#428bca}.bs-callout-success{border-left-color:#5cb85c}.bs-callout-success h4{color:#5cb85c}.bs-callout-danger{border-left-color:#d9534f}.bs-callout-danger h4{color:#d9534f}.bs-callout-warning{border-left-color:#f0ad4e}.bs-callout-warning h4{color:#f0ad4e}.bs-callout-info{border-left-color:#5bc0de}.bs-callout-info h4{color:#5bc0de}.admonition{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px;background-color:#fcfdff}.admonition p:last-child{margin-bottom:0}.admonition code{border-radius:3px}.admonition+.admonition{margin-top:-5px}.admonition.note{border-left-color:#428bca}.admonition.warning{border-left-color:#f0ad4e}.admonition.danger{border-left-color:#d9534f}.admonition-title{font-size:19px;font-style:normal;font-weight:400;margin-top:0;margin-bottom:5px}.admonition.note>.admonition-title{color:#428bca}.admonition.warning>.admonition-title{color:#f0ad4e}.admonition.danger>.admonition-title{color:#d9534f} +html{scroll-padding-top:70px}body{padding-top:70px}p>img{max-width:100%;height:auto}ul.nav li.first-level{font-weight:bold}ul.nav li.third-level{padding-left:12px}div.col-md-3{padding-left:0}div.col-md-9{padding-bottom:100px}div.source-links{float:right}.bs-sidebar.affix{position:static}.bs-sidebar.well{padding:0}.bs-sidenav{margin-top:30px;margin-bottom:30px;padding-top:10px;padding-bottom:10px;border-radius:5px}.bs-sidebar .nav>li>a{display:block;padding:5px 20px;z-index:1}.bs-sidebar .nav>li>a:hover,.bs-sidebar .nav>li>a:focus{text-decoration:none;border-right:1px solid}.bs-sidebar .nav>.active>a,.bs-sidebar .nav>.active:hover>a,.bs-sidebar .nav>.active:focus>a{font-weight:bold;background-color:transparent;border-right:1px solid}.bs-sidebar .nav .nav{display:none;margin-bottom:8px}.bs-sidebar .nav .nav>li>a{padding-top:3px;padding-bottom:3px;padding-left:30px;font-size:90%}@media(min-width:992px){.bs-sidebar .nav>.active>ul{display:block}.bs-sidebar.affix,.bs-sidebar.affix-bottom{width:213px}.bs-sidebar.affix{position:fixed;top:80px;max-height:calc(100% - 180px);overflow-y:auto}.bs-sidebar.affix-bottom{position:absolute}.bs-sidebar.affix-bottom .bs-sidenav,.bs-sidebar.affix .bs-sidenav{margin-top:0;margin-bottom:0}}@media(min-width:1200px){.bs-sidebar.affix-bottom,.bs-sidebar.affix{width:263px}}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:00px}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px;background-color:#fcfdff}.bs-callout h4{font-style:normal;font-weight:400;margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-default{border-left-color:#fa023c}.bs-callout-default h4{color:#fa023c}.bs-callout-primary{border-left-color:#428bca}.bs-callout-primary h4{color:#428bca}.bs-callout-success{border-left-color:#5cb85c}.bs-callout-success h4{color:#5cb85c}.bs-callout-danger{border-left-color:#d9534f}.bs-callout-danger h4{color:#d9534f}.bs-callout-warning{border-left-color:#f0ad4e}.bs-callout-warning h4{color:#f0ad4e}.bs-callout-info{border-left-color:#5bc0de}.bs-callout-info h4{color:#5bc0de}.headerlink{display:none;padding-left:.5em}h1:hover .headerlink,h2:hover .headerlink,h3:hover .headerlink,h4:hover .headerlink,h5:hover .headerlink,h6:hover .headerlink{display:inline-block}.admonition{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px;background-color:#fcfdff}.admonition p:last-child{margin-bottom:0}.admonition code{border-radius:3px}.admonition+.admonition{margin-top:-5px}.admonition.note{border-left-color:#428bca}.admonition.warning{border-left-color:#f0ad4e}.admonition.danger{border-left-color:#d9534f}.admonition-title{font-size:19px;font-style:normal;font-weight:400;margin-top:0;margin-bottom:5px}.admonition.note>.admonition-title{color:#428bca}.admonition.warning>.admonition-title{color:#f0ad4e}.admonition.danger>.admonition-title{color:#d9534f} diff --git a/0.5/format/index.html b/0.5/format/index.html index a8a7b28..7cfa3fb 100644 --- a/0.5/format/index.html +++ b/0.5/format/index.html @@ -59,7 +59,9 @@ - RELOG + + RELOG + @@ -166,14 +168,13 @@

Example

-
{
+
{
     "parameters": {
         "time horizon (years)": 2,
         "building period (years)": [1]
     }
 }
 
-

Products

The products section describes all products and subproducts in the simulation. The field instance["Products"] is a dictionary mapping the name of the product to a dictionary which describes its characteristics. Each product description contains the following keys:

@@ -226,7 +227,7 @@

Example

-
{
+
{
     "products": {
         "P1": {
             "initial amounts": {
@@ -265,7 +266,6 @@
     }
 }
 
-

Processing plants

The plants section describes the available types of reverse manufacturing plants, their potential locations and associated costs, as well as their inputs and outputs. The field instance["Plants"] is a dictionary mapping the name of the plant to a dictionary with the following keys:

@@ -391,7 +391,7 @@

Example

-
{
+
{
     "plants": {
         "F1": {
             "input": "P1",
@@ -436,7 +436,6 @@
     }
 }
 
-

Current limitations

  • Each plant can only be opened exactly once. After open, the plant remains open until the end of the simulation.
  • @@ -450,18 +449,22 @@ -
    - -
    -

    - Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
    - - Documentation built with MkDocs. -

    + +
    + + +
    +

    + Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
    + + Documentation built with MkDocs. +

    + - - -
    + + +
    + diff --git a/0.5/index.html b/0.5/index.html index 6445dc0..34a9608 100644 --- a/0.5/index.html +++ b/0.5/index.html @@ -59,7 +59,9 @@ - RELOG + + RELOG + @@ -161,7 +163,7 @@
  • Nwike Iloeje, Argonne National Laboratory <ciloeje@anl.gov>

License

-
RELOG: Reverse Logistics Optimization
+
RELOG: Reverse Logistics Optimization
 Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
 
 Redistribution and use in source and binary forms, with or without modification, are permitted
@@ -190,18 +192,22 @@ POSSIBILITY OF SUCH DAMAGE.
         
     
 
-    
- -
-

- Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
- - Documentation built with MkDocs. -

+ +
+ + +
+

+ Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
+ + Documentation built with MkDocs. +

+ - - -
+ + +
+ @@ -290,5 +296,5 @@ POSSIBILITY OF SUCH DAMAGE. diff --git a/0.5/model/index.html b/0.5/model/index.html index 639753c..770206f 100644 --- a/0.5/model/index.html +++ b/0.5/model/index.html @@ -59,7 +59,9 @@ - RELOG + + RELOG + @@ -319,18 +321,22 @@ In the fourth line, we have the disposal costs.

-
- -
-

- Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
- - Documentation built with MkDocs. -

+ +
+ + +
+

+ Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
+ + Documentation built with MkDocs. +

+ - - -
+ + +
+ diff --git a/0.5/reports/index.html b/0.5/reports/index.html index 87a7ad3..8fea561 100644 --- a/0.5/reports/index.html +++ b/0.5/reports/index.html @@ -59,7 +59,9 @@ - RELOG + + RELOG + @@ -236,7 +238,7 @@
  • Bar plot with total plant costs per year, grouped by plant type (in Python):
-
import pandas as pd
+
import pandas as pd
 import seaborn as sns; sns.set()
 
 data = pd.read_csv("plants_report.csv")
@@ -247,12 +249,11 @@ sns.barplot(x="year",
                      .sum()
                      .reset_index());
 
-

  • Map showing plant locations (in Python):
-
import pandas as pd
+
import pandas as pd
 import geopandas as gp
 
 # Plot base map
@@ -267,7 +268,6 @@ points = gp.points_from_xy(data["longitude (deg)"],
                            data["latitude (deg)"])
 gp.GeoDataFrame(data, geometry=points).plot(ax=ax);
 
-

Plant outputs report

Report showing amount of products produced, sent and disposed of by each plant, as well as disposal costs.

@@ -318,7 +318,7 @@ gp.GeoDataFrame(data, geometry=points).plot(ax=ax);
  • Bar plot showing total amount produced for each product, grouped by year (in Python):
-
import pandas as pd
+
import pandas as pd
 import seaborn as sns; sns.set()
 
 data = pd.read_csv("plant_outputs_report.csv")
@@ -329,7 +329,6 @@ sns.barplot(x="amount produced (tonne)",
                      .sum()
                      .reset_index());
 
-

Plant emissions report

Report showing amount of emissions produced by each plant.

@@ -368,7 +367,7 @@ sns.barplot(x="amount produced (tonne)",
  • Bar plot showing total emission by plant type, grouped type of emissions (in Python):
-
import pandas as pd
+
import pandas as pd
 import seaborn as sns; sns.set()
 
 data = pd.read_csv("plant_emissions_report.csv")
@@ -379,7 +378,6 @@ sns.barplot(x="plant type",
                      .sum()
                      .reset_index());
 
-

Transportation report

Report showing amount of product sent from initial locations to plants, and from one plant to another. Includes the distance between each pair of locations, amount-distance shipped, transportation costs and energy expenditure.

@@ -458,7 +456,7 @@ sns.barplot(x="plant type",
  • Bar plot showing total amount-distance for each product type, grouped by year (in Python):
-
import pandas as pd
+
import pandas as pd
 import seaborn as sns; sns.set()
 
 data = pd.read_csv("transportation_report.csv")
@@ -469,12 +467,11 @@ sns.barplot(x="product",
                      .sum()
                      .reset_index());
 
-

  • Map of transportation lines (in Python):
-
import pandas as pd
+
import pandas as pd
 import geopandas as gp
 from shapely.geometry import Point, LineString
 import matplotlib.pyplot as plt
@@ -511,7 +508,6 @@ gp.GeoDataFrame(data, geometry=points).plot(ax=ax,
                                             color="red",
                                             markersize=50);
 
-

Transportation emissions report

Report showing emissions for each trip between initial locations and plants, and between pairs of plants.

@@ -590,7 +586,7 @@ gp.GeoDataFrame(data, geometry=points).plot(ax=ax,
  • Bar plot showing total emission amount by emission type, grouped by type of product being transported (in Python):
-
import pandas as pd
+
import pandas as pd
 import seaborn as sns; sns.set()
 
 data = pd.read_csv("transportation_emissions_report.csv")
@@ -601,24 +597,27 @@ sns.barplot(x="emission type",
                      .sum()
                      .reset_index());
 
-

-
- -
-

- Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
- - Documentation built with MkDocs. -

+ +
+ + +
+

+ Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
+ + Documentation built with MkDocs. +

+ - - -
+ + +
+ diff --git a/0.5/sitemap.xml b/0.5/sitemap.xml index a23621e..49031ad 100644 --- a/0.5/sitemap.xml +++ b/0.5/sitemap.xml @@ -1,23 +1,23 @@ None - 2020-10-29 + 2021-01-06 daily None - 2020-10-29 + 2021-01-06 daily None - 2020-10-29 + 2021-01-06 daily None - 2020-10-29 + 2021-01-06 daily None - 2020-10-29 + 2021-01-06 daily \ No newline at end of file diff --git a/0.5/sitemap.xml.gz b/0.5/sitemap.xml.gz index e6b60f1..f33532e 100644 Binary files a/0.5/sitemap.xml.gz and b/0.5/sitemap.xml.gz differ diff --git a/0.5/usage/index.html b/0.5/usage/index.html index b4bf0c5..c0769ee 100644 --- a/0.5/usage/index.html +++ b/0.5/usage/index.html @@ -59,7 +59,9 @@ - RELOG + + RELOG + @@ -146,17 +148,14 @@

Usage

1. Installation

To use RELOG, the first step is to install the Julia programming language on your machine. Note that RELOG was developed and tested with Julia 1.5 and may not be compatible with newer versions. After Julia is installed, launch the Julia console, type ] to switch to package manger mode, then run:

-
(@v1.5) pkg> add https://github.com/ANL-CEEESA/RELOG.git
+
(@v1.5) pkg> add https://github.com/ANL-CEEESA/RELOG.git
 
-

After the package and all its dependencies have been installed, please run the RELOG test suite, as shown below, to make sure that the package has been correctly installed:

-
(@v1.5) pkg> test RELOG
+
(@v1.5) pkg> test RELOG
 
-

To update the package to a newer version, type ] to enter the package manager mode, then run:

-
(@v1.5) pkg> update RELOG
+
(@v1.5) pkg> update RELOG
 
-

2. Modeling the problem

The two main model components in RELOG are products and plants.

A product is any material that needs to be recycled, any intermediary product produced during the recycling process, or any product recovered at the end of the process. For example, in a NiMH battery recycling study case, products could include (i) the original batteries to be recycled; (ii) the cathode and anode parts of the battery; (iii) rare-earth elements and (iv) scrap metals.

@@ -189,7 +188,7 @@

All user parameters specified above must be provided to RELOG as a JSON file, which is fully described in the data format page.

3. Running the optimization

After creating a JSON file describing the reverse manufacturing process and the input data, the following example illustrates how to use the package to find the optimal set of decisions:

-
# Import package
+
# Import package
 using RELOG
 
 # Solve optimization problem
@@ -202,12 +201,11 @@ RELOG.write(solution, "solution.json")
 RELOG.write_plants_report(solution, "plants.csv")
 RELOG.write_transportation_report(solution, "transportation.csv")
 
-

For a complete description of the file formats above, and for a complete list of available reports, see the data format page.

4. Advanced options

4.1 Changing the solver

By default, RELOG internally uses Cbc, an open-source and freely-available Mixed-Integer Linear Programming solver developed by the COIN-OR Project. For larger-scale test cases, a commercial solver such as Gurobi, CPLEX or XPRESS is recommended. The following snippet shows how to switch from Cbc to Gurobi, for example:

-
using RELOG, Gurobi, JuMP
+
using RELOG, Gurobi, JuMP
 
 gurobi = optimizer_with_attributes(Gurobi.Optimizer,
                                    "TimeLimit" => 3600,
@@ -217,7 +215,6 @@ RELOG.solve("instance.json",
             output="solution.json",
             optimizer=gurobi)
 
-

4.2 Multi-period heuristics

For large-scale instances, it may be too time-consuming to find an exact optimal solution to the multi-period version of the problem. For these situations, RELOG includes a heuristic solution method, which proceeds as follows:

    @@ -229,7 +226,7 @@ RELOG.solve("instance.json",

To solve an instance using this heuristic, use the option heuristic=true, as shown below.

-
using RELOG
+
using RELOG
 
 solution = RELOG.solve("/home/user/instance.json",
                        heuristic=true)
@@ -238,18 +235,22 @@ solution = RELOG.solve("/home/user/instance.json",
         
     
 
-    
- -
-

- Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
- - Documentation built with MkDocs. -

+ +
+ + +
+

+ Copyright © 2020, UChicago Argonne, LLC. All Rights Reserved.
+ + Documentation built with MkDocs. +

+ - - -
+ + +
+ diff --git a/index.html b/index.html index 827b896..c8fee70 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - +