123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 |
- <!DOCTYPE html>
- <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
- <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
- <head>
- <meta charset="utf-8">
-
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
- <title>Some examples — macop v0.1.6 documentation</title>
-
-
-
-
-
-
- <script type="text/javascript" src="_static/js/modernizr.min.js"></script>
-
-
- <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <script type="text/javascript" src="_static/language_data.js"></script>
-
- <script type="text/javascript" src="_static/js/theme.js"></script>
-
-
- <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Contributing" href="contributing.html" />
- <link rel="prev" title="macop.solutions.Solution" href="macop/macop.solutions.Solution.html" />
- </head>
- <body class="wy-body-for-nav">
-
- <div class="wy-grid-for-nav">
-
- <nav data-toggle="wy-nav-shift" class="wy-nav-side">
- <div class="wy-side-scroll">
- <div class="wy-side-nav-search" >
-
-
- <a href="index.html" class="icon icon-home"> macop
-
-
- </a>
-
-
-
- <div class="version">
- 0.1.6
- </div>
-
-
-
- <div role="search">
- <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
- <input type="text" name="q" placeholder="Search docs" />
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
- </div>
-
- </div>
- <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-
-
-
-
-
-
- <p class="caption"><span class="caption-text">Contents:</span></p>
- <ul class="current">
- <li class="toctree-l1"><a class="reference internal" href="description.html">Description</a></li>
- <li class="toctree-l1"><a class="reference internal" href="macop.html">Documentation</a></li>
- <li class="toctree-l1 current"><a class="current reference internal" href="#">Some examples</a><ul>
- <li class="toctree-l2"><a class="reference internal" href="#mono-objective">1. Mono-objective</a><ul>
- <li class="toctree-l3"><a class="reference internal" href="#problem-definition">1.1 Problem definition</a></li>
- <li class="toctree-l3"><a class="reference internal" href="#operators-and-policy">1.2 Operators and Policy</a></li>
- <li class="toctree-l3"><a class="reference internal" href="#before-running-algorithm">1.3 Before running algorithm</a></li>
- </ul>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="#multi-objective-example">2. Multi-objective example</a></li>
- </ul>
- </li>
- <li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
- </ul>
-
-
- </div>
- </div>
- </nav>
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
- <nav class="wy-nav-top" aria-label="top navigation">
-
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
- <a href="index.html">macop</a>
-
- </nav>
- <div class="wy-nav-content">
-
- <div class="rst-content">
-
-
- <div role="navigation" aria-label="breadcrumbs navigation">
- <ul class="wy-breadcrumbs">
-
- <li><a href="index.html">Docs</a> »</li>
-
- <li>Some examples</li>
-
-
- <li class="wy-breadcrumbs-aside">
-
-
-
- <a href="https://github.com/prise-3d/macop/blob/master/docs/source/examples.rst" class="fa fa-github"> Edit on GitHub</a>
-
-
-
- </li>
-
- </ul>
-
- <hr/>
- </div>
- <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
- <div itemprop="articleBody">
-
- <div class="section" id="some-examples">
- <h1>Some examples<a class="headerlink" href="#some-examples" title="Permalink to this headline">¶</a></h1>
- <div class="section" id="mono-objective">
- <h2>1. Mono-objective<a class="headerlink" href="#mono-objective" title="Permalink to this headline">¶</a></h2>
- <p>In this tutorial, it will introduce the way of running your algorithm quickly.
- First of all we need to define the kind of solution best represent the problem. In this tutorial, we use the well known knapsack problem using 30 objects.</p>
- <div class="section" id="problem-definition">
- <h3>1.1 Problem definition<a class="headerlink" href="#problem-definition" title="Permalink to this headline">¶</a></h3>
- <p>Hence, we define our problem :
- - value of each component of knapsack
- - weight associated to each of these components (objects)</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="kn">import</span> <span class="nn">random</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
- <span class="n">elements_score</span> <span class="o">=</span> <span class="p">[</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span> <span class="p">]</span>
- <span class="n">elements_weight</span> <span class="o">=</span> <span class="p">[</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">25</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span> <span class="p">]</span>
- </pre></div>
- </div>
- <p>We can now define the solution representation. In knapsack problem we want to fill our knapsack in an optimization way selecting or not each component (object).
- The best way to represent this problem is to use the <cite>BinarySolution</cite> from <cite>macop</cite> which stores solution as a binary array.</p>
- <p>Using the solution representation, we need to define multiple things to fit our algorithm :
- - 1. function which validates or not a solution (based on constraints)
- - 2. function which evaluates the solution (in order to obtain fitness)
- - 3. initialization solution function</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="kn">import</span> <span class="nn">random</span>
- <span class="kn">from</span> <span class="nn">macop.solutions.BinarySolution</span> <span class="kn">import</span> <span class="n">BinarySolution</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
- <span class="n">elements_score</span> <span class="o">=</span> <span class="p">[</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span> <span class="p">]</span>
- <span class="n">elements_weight</span> <span class="o">=</span> <span class="p">[</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span> <span class="p">]</span>
- <span class="c1"># 1. validator function (we accept only bag with maximum weight 80kg)</span>
- <span class="k">def</span> <span class="nf">validator</span><span class="p">(</span><span class="n">_solution</span><span class="p">):</span>
- <span class="n">weight_sum</span> <span class="o">=</span> <span class="mi">0</span>
- <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">_solution</span><span class="o">.</span><span class="n">data</span><span class="p">):</span>
- <span class="n">weight_sum</span> <span class="o">+=</span> <span class="n">elements_weight</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">*</span> <span class="n">elem</span>
- <span class="k">if</span> <span class="n">weight_sum</span> <span class="o"><=</span> <span class="mi">80</span><span class="p">:</span>
- <span class="k">return</span> <span class="kc">True</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="kc">False</span>
- <span class="c1"># 2. function which computes fitness of solution</span>
- <span class="k">def</span> <span class="nf">evaluator</span><span class="p">(</span><span class="n">_solution</span><span class="p">):</span>
- <span class="n">fitness</span> <span class="o">=</span> <span class="mi">0</span>
- <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">_solution</span><span class="o">.</span><span class="n">data</span><span class="p">):</span>
- <span class="n">fitness</span> <span class="o">+=</span> <span class="p">(</span><span class="n">elements_score</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">*</span> <span class="n">elem</span><span class="p">)</span>
- <span class="k">return</span> <span class="n">fitness</span>
- <span class="c1"># 3. function which here initializes solution ramdomly and check validity of solution</span>
- <span class="k">def</span> <span class="nf">init</span><span class="p">():</span>
- <span class="k">return</span> <span class="n">BinarySolution</span><span class="p">([],</span> <span class="mi">30</span><span class="p">)</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="n">validator</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- <div class="section" id="operators-and-policy">
- <h3>1.2 Operators and Policy<a class="headerlink" href="#operators-and-policy" title="Permalink to this headline">¶</a></h3>
- <p>In our algorithm we need to use some operators in order to improve current best solution found at current <cite>n</cite> evaluations.</p>
- <p>In <cite>macop</cite> you have some available operators. In this example, we use 3 of them.</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="kn">from</span> <span class="nn">macop.operators.mutators.SimpleMutation</span> <span class="kn">import</span> <span class="n">SimpleMutation</span>
- <span class="kn">from</span> <span class="nn">macop.operators.mutators.SimpleBinaryMutation</span> <span class="kn">import</span> <span class="n">SimpleBinaryMutation</span>
- <span class="kn">from</span> <span class="nn">macop.operators.crossovers.SimpleCrossover</span> <span class="kn">import</span> <span class="n">SimpleCrossover</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="sd">"""</span>
- <span class="sd">Algorithm parameters</span>
- <span class="sd">"""</span>
- <span class="c1"># list of operators instance to use</span>
- <span class="n">operators</span> <span class="o">=</span> <span class="p">[</span><span class="n">SimpleBinaryMutation</span><span class="p">(),</span> <span class="n">SimpleMutation</span><span class="p">(),</span> <span class="n">SimpleCrossover</span><span class="p">(),</span> <span class="n">RandomSplitCrossover</span><span class="p">()]</span>
- </pre></div>
- </div>
- <p>As we defined multiple operators, we have to tell how we want to select them into the algorithm. This is why <strong>Policy</strong> classes have been implemented.
- <cite>Policy</cite> class implementation enables to select the next operator to use and once new solution is generated, computes its score (in <cite>apply</cite> method). This class requires all the operators use to be instanciate.</p>
- <p>Why computing score into <strong>Policy</strong> <cite>apply</cite> method ? Because it’s a way to get some important statistics from solution improvment using specific operator.
- <strong>UCBPolicy</strong> as example, based on Upper Confidence Bound (<a class="reference external" href="https://banditalgs.com/2016/09/18/the-upper-confidence-bound-algorithm/">UCB</a>), computes reward each time a new solution is generated from an operator in order to better select next operator later. We use in this example the <cite>UCBPolicy</cite> implementation.</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="kn">from</span> <span class="nn">macop.operators.mutators.SimpleMutation</span> <span class="kn">import</span> <span class="n">SimpleMutation</span>
- <span class="kn">from</span> <span class="nn">macop.operators.mutators.SimpleBinaryMutation</span> <span class="kn">import</span> <span class="n">SimpleBinaryMutation</span>
- <span class="kn">from</span> <span class="nn">macop.operators.crossovers.SimpleCrossover</span> <span class="kn">import</span> <span class="n">SimpleCrossover</span>
- <span class="kn">from</span> <span class="nn">macop.operators.policies.UCBPolicy</span> <span class="kn">import</span> <span class="n">UCBPolicy</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="sd">"""</span>
- <span class="sd">Algorithm parameters</span>
- <span class="sd">"""</span>
- <span class="c1"># list of operators instance to use</span>
- <span class="n">operators</span> <span class="o">=</span> <span class="p">[</span><span class="n">SimpleBinaryMutation</span><span class="p">(),</span> <span class="n">SimpleMutation</span><span class="p">(),</span> <span class="n">SimpleCrossover</span><span class="p">(),</span> <span class="n">RandomSplitCrossover</span><span class="p">()]</span>
- <span class="c1"># `policy` instance is created using specific value for Upper Confidence Bound</span>
- <span class="n">policy</span> <span class="o">=</span> <span class="n">UCBPolicy</span><span class="p">(</span><span class="n">operators</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="mf">100.</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- <div class="section" id="before-running-algorithm">
- <h3>1.3 Before running algorithm<a class="headerlink" href="#before-running-algorithm" title="Permalink to this headline">¶</a></h3>
- <p>Before running algorithm we can define a logger to keep track of the all algorithm run.</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="kn">import</span> <span class="nn">logging</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="sd">"""</span>
- <span class="sd">Algorithm parameters</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'data'</span><span class="p">):</span>
- <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="s1">'data'</span><span class="p">)</span>
- <span class="c1"># logging configuration</span>
- <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%(asctime)s</span><span class="s1"> </span><span class="si">%(message)s</span><span class="s1">'</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">'data/example.log'</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>We can now instanciate our algorithm. We use the Iterated Local Search in this example. It is mainly used to avoid local optima using multiple local search.</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="kn">import</span> <span class="nn">logging</span>
- <span class="kn">from</span> <span class="nn">macop.algorithms.IteratedLocalSearch</span> <span class="kn">import</span> <span class="n">IteratedLocalSearch</span> <span class="k">as</span> <span class="n">ILS</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="sd">"""</span>
- <span class="sd">Algorithm parameters</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'data'</span><span class="p">):</span>
- <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="s1">'data'</span><span class="p">)</span>
- <span class="c1"># logging configuration</span>
- <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%(asctime)s</span><span class="s1"> </span><span class="si">%(message)s</span><span class="s1">'</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">'data/example.log'</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
- <span class="n">algo</span> <span class="o">=</span> <span class="n">ILS</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="n">evaluator</span><span class="p">,</span> <span class="n">operators</span><span class="p">,</span> <span class="n">policy</span><span class="p">,</span> <span class="n">validator</span><span class="p">,</span> <span class="n">_maximise</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>The algorithm is now well defined and is ready to run ! But one thing can be done, and it’s very interesting to avoir restart from scratch the algorithm run.
- The use of checkpoint is available in <cite>macop</cite>. A <cite>BasicCheckpoint</cite> class let the algorithm save at <cite>every</cite> evaluations the best solution found.</p>
- <p>We need to specify the use of checkpoint if we prefer to restart from.</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
- <span class="sd">imports part</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="kn">import</span> <span class="nn">logging</span>
- <span class="kn">from</span> <span class="nn">macop.algorithms.IteratedLocalSearch</span> <span class="kn">import</span> <span class="n">IteratedLocalSearch</span> <span class="k">as</span> <span class="n">ILS</span>
- <span class="kn">from</span> <span class="nn">macop.checkpoints.BasicCheckpoint</span> <span class="kn">import</span> <span class="n">BasicCheckpoint</span>
- <span class="sd">"""</span>
- <span class="sd">Problem definition</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="sd">"""</span>
- <span class="sd">Algorithm parameters</span>
- <span class="sd">"""</span>
- <span class="o">...</span>
- <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'data'</span><span class="p">):</span>
- <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="s1">'data'</span><span class="p">)</span>
- <span class="c1"># logging configuration</span>
- <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%(asctime)s</span><span class="s1"> </span><span class="si">%(message)s</span><span class="s1">'</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">'data/example.log'</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
- <span class="n">algo</span> <span class="o">=</span> <span class="n">ILS</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="n">evaluator</span><span class="p">,</span> <span class="n">operators</span><span class="p">,</span> <span class="n">policy</span><span class="p">,</span> <span class="n">validator</span><span class="p">,</span> <span class="n">_maximise</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
- <span class="c1"># we specify the checkpoint class directly, the frequency and the path we want to save algorithm evolution</span>
- <span class="n">algo</span><span class="o">.</span><span class="n">addCheckpoint</span><span class="p">(</span><span class="n">_class</span><span class="o">=</span><span class="n">BasicCheckpoint</span><span class="p">,</span> <span class="n">_every</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">_filepath</span><span class="o">=</span><span class="s1">'data/checkpoint.csv'</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>In this way, now we can run and obtained the best solution found in <cite>n</cite> evaluations</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">bestSol</span> <span class="o">=</span> <span class="n">algo</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="mi">10000</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s1">'Solution score is </span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">evaluator</span><span class="p">(</span><span class="n">bestSol</span><span class="p">)))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="section" id="multi-objective-example">
- <h2>2. Multi-objective example<a class="headerlink" href="#multi-objective-example" title="Permalink to this headline">¶</a></h2>
- <p>Available soon…</p>
- </div>
- </div>
- </div>
-
- </div>
- <footer>
-
- <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-
- <a href="contributing.html" class="btn btn-neutral float-right" title="Contributing" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-
-
- <a href="macop/macop.solutions.Solution.html" class="btn btn-neutral float-left" title="macop.solutions.Solution" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-
- </div>
-
- <hr/>
- <div role="contentinfo">
- <p>
- © Copyright 2020, Jérôme BUISINE
- </p>
- </div>
- Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
- </footer>
- </div>
- </div>
- </section>
- </div>
-
- <script type="text/javascript">
- jQuery(function () {
- SphinxRtdTheme.Navigation.enable(true);
- });
- </script>
-
-
-
-
- </body>
- </html>
|