Parcourir la source

MOEAD examples and tutorial added

Jérôme BUISINE il y a 3 ans
Parent
commit
f7614a0aea
79 fichiers modifiés avec 1737 ajouts et 250 suppressions
  1. BIN
      docs/build/doctrees/environment.pickle
  2. BIN
      docs/build/doctrees/examples.doctree
  3. BIN
      docs/build/doctrees/macop.doctree
  4. BIN
      docs/build/doctrees/macop/macop.algorithms.Algorithm.doctree
  5. BIN
      docs/build/doctrees/macop/macop.algorithms.mono.IteratedLocalSearch.doctree
  6. BIN
      docs/build/doctrees/macop/macop.algorithms.mono.LocalSearch.doctree
  7. BIN
      docs/build/doctrees/macop/macop.callbacks.MultiCheckpoint.doctree
  8. BIN
      docs/build/doctrees/macop/macop.callbacks.ParetoCheckpoint.doctree
  9. BIN
      docs/build/doctrees/macop/macop.operators.policies.UCBPolicy.doctree
  10. 1 1
      docs/build/html/.buildinfo
  11. 3 2
      docs/build/html/_modules/index.html
  12. 3 3
      docs/build/html/_modules/macop/algorithms/Algorithm.html
  13. 3 3
      docs/build/html/_modules/macop/algorithms/mono/IteratedLocalSearch.html
  14. 3 3
      docs/build/html/_modules/macop/algorithms/mono/LocalSearch.html
  15. 2 2
      docs/build/html/_modules/macop/callbacks/BasicCheckpoint.html
  16. 2 2
      docs/build/html/_modules/macop/callbacks/Callback.html
  17. 50 37
      docs/build/html/_modules/macop/callbacks/MultiCheckpoint.html
  18. 305 0
      docs/build/html/_modules/macop/callbacks/ParetoCheckpoint.html
  19. 2 2
      docs/build/html/_modules/macop/evaluators/EvaluatorExample.html
  20. 2 2
      docs/build/html/_modules/macop/operators/Operator.html
  21. 2 2
      docs/build/html/_modules/macop/operators/crossovers/Crossover.html
  22. 2 2
      docs/build/html/_modules/macop/operators/crossovers/RandomSplitCrossover.html
  23. 2 2
      docs/build/html/_modules/macop/operators/crossovers/SimpleCrossover.html
  24. 2 2
      docs/build/html/_modules/macop/operators/mutators/Mutation.html
  25. 2 2
      docs/build/html/_modules/macop/operators/mutators/SimpleBinaryMutation.html
  26. 2 2
      docs/build/html/_modules/macop/operators/mutators/SimpleMutation.html
  27. 2 2
      docs/build/html/_modules/macop/operators/policies/Policy.html
  28. 2 2
      docs/build/html/_modules/macop/operators/policies/RandomPolicy.html
  29. 14 9
      docs/build/html/_modules/macop/operators/policies/UCBPolicy.html
  30. 2 2
      docs/build/html/_modules/macop/solutions/BinarySolution.html
  31. 2 2
      docs/build/html/_modules/macop/solutions/CombinatoryIntegerSolution.html
  32. 2 2
      docs/build/html/_modules/macop/solutions/IntegerSolution.html
  33. 275 1
      docs/build/html/_sources/examples.rst.txt
  34. 1 0
      docs/build/html/_sources/macop.rst.txt
  35. 1 1
      docs/build/html/_sources/macop/macop.callbacks.MultiCheckpoint.rst.txt
  36. 22 0
      docs/build/html/_sources/macop/macop.callbacks.ParetoCheckpoint.rst.txt
  37. 1 1
      docs/build/html/_static/documentation_options.js
  38. 2 2
      docs/build/html/contributing.html
  39. 2 2
      docs/build/html/description.html
  40. 254 4
      docs/build/html/examples.html
  41. 30 18
      docs/build/html/genindex.html
  42. 2 2
      docs/build/html/index.html
  43. 8 4
      docs/build/html/macop.html
  44. 3 3
      docs/build/html/macop/macop.algorithms.Algorithm.html
  45. 5 5
      docs/build/html/macop/macop.algorithms.mono.IteratedLocalSearch.html
  46. 5 5
      docs/build/html/macop/macop.algorithms.mono.LocalSearch.html
  47. 3 2
      docs/build/html/macop/macop.callbacks.BasicCheckpoint.html
  48. 5 4
      docs/build/html/macop/macop.callbacks.Callback.html
  49. 22 21
      docs/build/html/macop/macop.callbacks.MultiCheckpoint.html
  50. 277 0
      docs/build/html/macop/macop.callbacks.ParetoCheckpoint.html
  51. 2 2
      docs/build/html/macop/macop.evaluators.EvaluatorExample.html
  52. 2 2
      docs/build/html/macop/macop.operators.Operator.html
  53. 2 2
      docs/build/html/macop/macop.operators.crossovers.Crossover.html
  54. 2 2
      docs/build/html/macop/macop.operators.crossovers.RandomSplitCrossover.html
  55. 2 2
      docs/build/html/macop/macop.operators.crossovers.SimpleCrossover.html
  56. 2 2
      docs/build/html/macop/macop.operators.mutators.Mutation.html
  57. 2 2
      docs/build/html/macop/macop.operators.mutators.SimpleBinaryMutation.html
  58. 2 2
      docs/build/html/macop/macop.operators.mutators.SimpleMutation.html
  59. 2 2
      docs/build/html/macop/macop.operators.policies.Policy.html
  60. 2 2
      docs/build/html/macop/macop.operators.policies.RandomPolicy.html
  61. 3 3
      docs/build/html/macop/macop.operators.policies.UCBPolicy.html
  62. 2 2
      docs/build/html/macop/macop.solutions.BinarySolution.html
  63. 2 2
      docs/build/html/macop/macop.solutions.CombinatoryIntegerSolution.html
  64. 2 2
      docs/build/html/macop/macop.solutions.IntegerSolution.html
  65. 2 2
      docs/build/html/macop/macop.solutions.Solution.html
  66. BIN
      docs/build/html/objects.inv
  67. 7 2
      docs/build/html/py-modindex.html
  68. 2 2
      docs/build/html/search.html
  69. 1 1
      docs/build/html/searchindex.js
  70. 2 2
      docs/source/conf.py
  71. 275 1
      docs/source/examples.rst
  72. 1 1
      docs/source/macop/macop.callbacks.MultiCheckpoint.rst
  73. 22 0
      docs/source/macop/macop.callbacks.ParetoCheckpoint.rst
  74. 31 26
      macop/algorithms/multi/MOEAD.py
  75. 3 3
      macop/algorithms/multi/MOSubProblem.py
  76. 10 7
      macop/callbacks/MultiCheckpoint.py
  77. 17 8
      macop/callbacks/ParetoCheckpoint.py
  78. 4 2
      macop/operators/policies/UCBPolicy.py
  79. 1 1
      setup.py

BIN
docs/build/doctrees/environment.pickle


BIN
docs/build/doctrees/examples.doctree


BIN
docs/build/doctrees/macop.doctree


BIN
docs/build/doctrees/macop/macop.algorithms.Algorithm.doctree


BIN
docs/build/doctrees/macop/macop.algorithms.mono.IteratedLocalSearch.doctree


BIN
docs/build/doctrees/macop/macop.algorithms.mono.LocalSearch.doctree


BIN
docs/build/doctrees/macop/macop.callbacks.MultiCheckpoint.doctree


BIN
docs/build/doctrees/macop/macop.callbacks.ParetoCheckpoint.doctree


BIN
docs/build/doctrees/macop/macop.operators.policies.UCBPolicy.doctree


+ 1 - 1
docs/build/html/.buildinfo

@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 54d95ec75d6af839655a8ba659c5eaa3
+config: aa568a4b1e185e577983cc75e8b0f707
 tags: 645f666f9bcd5a90fca523b33c5a78b7

+ 3 - 2
docs/build/html/_modules/index.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Overview: module code &mdash; macop v0.1.6 documentation</title>
+  <title>Overview: module code &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -155,6 +155,7 @@
 <li><a href="macop/callbacks/BasicCheckpoint.html">macop.callbacks.BasicCheckpoint</a></li>
 <li><a href="macop/callbacks/Callback.html">macop.callbacks.Callback</a></li>
 <li><a href="macop/callbacks/MultiCheckpoint.html">macop.callbacks.MultiCheckpoint</a></li>
+<li><a href="macop/callbacks/ParetoCheckpoint.html">macop.callbacks.ParetoCheckpoint</a></li>
 <li><a href="macop/evaluators/EvaluatorExample.html">macop.evaluators.EvaluatorExample</a></li>
 <li><a href="macop/operators/Operator.html">macop.operators.Operator</a></li>
 <li><a href="macop/operators/crossovers/Crossover.html">macop.operators.crossovers.Crossover</a></li>

+ 3 - 3
docs/build/html/_modules/macop/algorithms/Algorithm.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.algorithms.Algorithm &mdash; macop v0.1.6 documentation</title>
+  <title>macop.algorithms.Algorithm &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -172,7 +172,7 @@
 <span class="sd">        maximise: {bool} -- specify kind of optimization problem </span>
 <span class="sd">        currentSolution: {Solution} -- current solution managed for current evaluation</span>
 <span class="sd">        bestSolution: {Solution} -- best solution found so far during running algorithm</span>
-<span class="sd">        callbacks: {[Callback]} -- list of Callback class implementation to do some instructions every number of evaluations and when initializing algorithm</span>
+<span class="sd">        callbacks: {[Callback]} -- list of Callback class implementation to do some instructions every number of evaluations and `load` when initializing algorithm</span>
 <span class="sd">        parent: {Algorithm} -- parent algorithm reference in case of inner Algorithm instance (optional)</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>

Fichier diff supprimé car celui-ci est trop grand
+ 3 - 3
docs/build/html/_modules/macop/algorithms/mono/IteratedLocalSearch.html


+ 3 - 3
docs/build/html/_modules/macop/algorithms/mono/LocalSearch.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.algorithms.mono.LocalSearch &mdash; macop v0.1.6 documentation</title>
+  <title>macop.algorithms.mono.LocalSearch &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -173,7 +173,7 @@
 <span class="sd">        maximise: {bool} -- specify kind of optimization problem </span>
 <span class="sd">        currentSolution: {Solution} -- current solution managed for current evaluation</span>
 <span class="sd">        bestSolution: {Solution} -- best solution found so far during running algorithm</span>
-<span class="sd">        checkpoint: {Checkpoint} -- Checkpoint class implementation to keep track of algorithm and restart</span>
+<span class="sd">        callbacks: {[Callback]} -- list of Callback class implementation to do some instructions every number of evaluations and `load` when initializing algorithm</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 <div class="viewcode-block" id="LocalSearch.run"><a class="viewcode-back" href="../../../../macop/macop.algorithms.mono.LocalSearch.html#macop.algorithms.mono.LocalSearch.LocalSearch.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_evaluations</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;</span>

+ 2 - 2
docs/build/html/_modules/macop/callbacks/BasicCheckpoint.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.callbacks.BasicCheckpoint &mdash; macop v0.1.6 documentation</title>
+  <title>macop.callbacks.BasicCheckpoint &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/callbacks/Callback.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.callbacks.Callback &mdash; macop v0.1.6 documentation</title>
+  <title>macop.callbacks.Callback &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 50 - 37
docs/build/html/_modules/macop/callbacks/MultiCheckpoint.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.callbacks.MultiCheckpoint &mdash; macop v0.1.6 documentation</title>
+  <title>macop.callbacks.MultiCheckpoint &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -151,7 +151,7 @@
            <div itemprop="articleBody">
             
   <h1>Source code for macop.callbacks.MultiCheckpoint</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Basic Checkpoint class implementation</span>
+<span></span><span class="sd">&quot;&quot;&quot;Multi Checkpoint class implementation</span>
 <span class="sd">&quot;&quot;&quot;</span>
 
 <span class="c1"># main imports</span>
@@ -164,21 +164,21 @@
 <span class="kn">from</span> <span class="nn">..utils.color</span> <span class="kn">import</span> <span class="n">macop_text</span><span class="p">,</span> <span class="n">macop_line</span>
 
 
-<div class="viewcode-block" id="BasicCheckpoint"><a class="viewcode-back" href="../../../macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint">[docs]</a><span class="k">class</span> <span class="nc">BasicCheckpoint</span><span class="p">(</span><span class="n">Callback</span><span class="p">):</span>
+<div class="viewcode-block" id="MultiCheckpoint"><a class="viewcode-back" href="../../../macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint">[docs]</a><span class="k">class</span> <span class="nc">MultiCheckpoint</span><span class="p">(</span><span class="n">Callback</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">    BasicCheckpoint is used for loading previous computations and start again after loading checkpoint</span>
+<span class="sd">    MultiCheckpoint is used for loading previous computations and start again after loading checkpoint</span>
 
 <span class="sd">    Attributes:</span>
 <span class="sd">        algo: {Algorithm} -- main algorithm instance reference</span>
 <span class="sd">        every: {int} -- checkpoint frequency used (based on number of evaluations)</span>
 <span class="sd">        filepath: {str} -- file path where checkpoints will be saved</span>
 <span class="sd">    &quot;&quot;&quot;</span>
-<div class="viewcode-block" id="BasicCheckpoint.run"><a class="viewcode-back" href="../../../macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+<div class="viewcode-block" id="MultiCheckpoint.run"><a class="viewcode-back" href="../../../macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Check if necessary to do backup based on `every` variable</span>
 <span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># get current best solution</span>
-        <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">bestSolution</span>
+        <span class="c1"># get current population</span>
+        <span class="n">population</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">population</span>
 
         <span class="n">currentEvaluation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">getGlobalEvaluation</span><span class="p">()</span>
 
@@ -187,53 +187,66 @@
 
             <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Checkpoint is done into &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span>
 
-            <span class="n">solutionData</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-            <span class="n">solutionSize</span> <span class="o">=</span> <span class="nb">len</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="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
 
-            <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">val</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">solutionData</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
+                <span class="k">for</span> <span class="n">solution</span> <span class="ow">in</span> <span class="n">population</span><span class="p">:</span>
+                    <span class="n">solutionData</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+                    <span class="n">solutionSize</span> <span class="o">=</span> <span class="nb">len</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="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="n">solutionSize</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
-                    <span class="n">solutionData</span> <span class="o">+=</span> <span class="s1">&#39; &#39;</span>
+                    <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">val</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">solutionData</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
 
-            <span class="n">line</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">currentEvaluation</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span> <span class="o">+</span> <span class="n">solutionData</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span>
-                <span class="n">solution</span><span class="o">.</span><span class="n">fitness</span><span class="p">())</span> <span class="o">+</span> <span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="n">solutionSize</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
+                            <span class="n">solutionData</span> <span class="o">+=</span> <span class="s1">&#39; &#39;</span>
+
+                    <span class="n">line</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">currentEvaluation</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span>
+
+                    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">evaluator</span><span class="p">)):</span>
+                        <span class="n">line</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">scores</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span>
+
+                    <span class="n">line</span> <span class="o">+=</span> <span class="n">solutionData</span> <span class="o">+</span> <span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span>
 
-            <span class="c1"># check if file exists</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="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">):</span>
-                <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-                    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
                     <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span></div>
 
-<div class="viewcode-block" id="BasicCheckpoint.load"><a class="viewcode-back" href="../../../macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+<div class="viewcode-block" id="MultiCheckpoint.load"><a class="viewcode-back" href="../../../macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">        Load last backup line of solution and set algorithm state (best solution and evaluations) at this backup</span>
+<span class="sd">        Load backup lines as population and set algorithm state (population and pareto front) at this backup</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">):</span>
 
             <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Load best solution from last checkpoint&#39;</span><span class="p">)</span>
             <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
 
-                <span class="c1"># get last line and read data</span>
-                <span class="n">lastline</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-                <span class="n">data</span> <span class="o">=</span> <span class="n">lastline</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;;&#39;</span><span class="p">)</span>
+                <span class="c1"># read data for each line</span>
+                <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">()):</span>
+
+                    <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;;&#39;</span><span class="p">)</span>
 
-                <span class="c1"># get evaluation  information</span>
-                <span class="n">globalEvaluation</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+                    <span class="c1"># only the first time</span>
+                    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                        <span class="c1"># get evaluation  information</span>
+                        <span class="n">globalEvaluation</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
 
-                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-                    <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">numberOfEvaluations</span> <span class="o">=</span> <span class="n">globalEvaluation</span>
-                <span class="k">else</span><span class="p">:</span>
-                    <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">numberOfEvaluations</span> <span class="o">=</span> <span class="n">globalEvaluation</span>
+                        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">numberOfEvaluations</span> <span class="o">=</span> <span class="n">globalEvaluation</span>
+                        <span class="k">else</span><span class="p">:</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">numberOfEvaluations</span> <span class="o">=</span> <span class="n">globalEvaluation</span>
 
-                <span class="c1"># get best solution data information</span>
-                <span class="n">solutionData</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)))</span>
+                    <span class="n">nObjectives</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">evaluator</span><span class="p">)</span>
+                    <span class="n">scores</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">nObjectives</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]]</span>
 
-                <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">bestSolution</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">solutionData</span><span class="p">)</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">bestSolution</span><span class="o">.</span><span class="n">score</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+                    <span class="c1"># get best solution data information</span>
+                    <span class="n">solutionData</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)))</span>
 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">population</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">solutionData</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">population</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">scores</span> <span class="o">=</span> <span class="n">scores</span>
+
+                    <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">pfPop</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">population</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+
+            <span class="nb">print</span><span class="p">(</span><span class="n">macop_line</span><span class="p">())</span>
+            <span class="nb">print</span><span class="p">(</span>
+                <span class="n">macop_text</span><span class="p">(</span><span class="s1">&#39;Load of available population from `</span><span class="si">{}</span><span class="s1">`&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)))</span>
             <span class="nb">print</span><span class="p">(</span>
                 <span class="n">macop_text</span><span class="p">(</span><span class="s1">&#39;Restart algorithm from evaluation </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
                     <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">numberOfEvaluations</span><span class="p">)))</span>

+ 305 - 0
docs/build/html/_modules/macop/callbacks/ParetoCheckpoint.html

@@ -0,0 +1,305 @@
+
+
+<!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>macop.callbacks.ParetoCheckpoint &mdash; macop v0.2.0 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" /> 
+</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.2.0
+              </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>
+<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"><a class="reference internal" href="../../../examples.html">Some examples</a></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> &raquo;</li>
+        
+          <li><a href="../../index.html">Module code</a> &raquo;</li>
+        
+      <li>macop.callbacks.ParetoCheckpoint</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for macop.callbacks.ParetoCheckpoint</h1><div class="highlight"><pre>
+<span></span><span class="sd">&quot;&quot;&quot;Pareto front Checkpoint class implementation</span>
+<span class="sd">&quot;&quot;&quot;</span>
+
+<span class="c1"># main imports</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
+<span class="kn">import</span> <span class="nn">pkgutil</span>
+
+<span class="c1"># module imports</span>
+<span class="kn">from</span> <span class="nn">.Callback</span> <span class="kn">import</span> <span class="n">Callback</span>
+<span class="kn">from</span> <span class="nn">..utils.color</span> <span class="kn">import</span> <span class="n">macop_text</span><span class="p">,</span> <span class="n">macop_line</span>
+
+<span class="c1"># import all available solutions</span>
+<span class="k">for</span> <span class="n">loader</span><span class="p">,</span> <span class="n">module_name</span><span class="p">,</span> <span class="n">is_pkg</span> <span class="ow">in</span> <span class="n">pkgutil</span><span class="o">.</span><span class="n">walk_packages</span><span class="p">(</span>
+        <span class="n">path</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;macop/solutions&#39;</span><span class="p">],</span> <span class="n">prefix</span><span class="o">=</span><span class="s1">&#39;macop.solutions.&#39;</span><span class="p">):</span>
+    <span class="n">_module</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">find_module</span><span class="p">(</span><span class="n">module_name</span><span class="p">)</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">module_name</span><span class="p">)</span>
+    <span class="nb">globals</span><span class="p">()[</span><span class="n">module_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">_module</span>
+
+
+<div class="viewcode-block" id="ParetoCheckpoint"><a class="viewcode-back" href="../../../macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint">[docs]</a><span class="k">class</span> <span class="nc">ParetoCheckpoint</span><span class="p">(</span><span class="n">Callback</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Pareto checkpoint is used for loading previous computations and start again after loading checkpoint</span>
+
+<span class="sd">    Attributes:</span>
+<span class="sd">        algo: {Algorithm} -- main algorithm instance reference</span>
+<span class="sd">        every: {int} -- checkpoint frequency used (based on number of evaluations)</span>
+<span class="sd">        filepath: {str} -- file path where checkpoints will be saved</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+<div class="viewcode-block" id="ParetoCheckpoint.run"><a class="viewcode-back" href="../../../macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check if necessary to do backup based on `every` variable</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c1"># get current population</span>
+        <span class="n">pfPop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">pfPop</span>
+
+        <span class="n">currentEvaluation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">getGlobalEvaluation</span><span class="p">()</span>
+
+        <span class="c1"># backup if necessary</span>
+        <span class="k">if</span> <span class="n">currentEvaluation</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">every</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+
+            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Checkpoint is done into &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span>
+
+            <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+
+                <span class="k">for</span> <span class="n">solution</span> <span class="ow">in</span> <span class="n">pfPop</span><span class="p">:</span>
+                    <span class="n">solutionData</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+                    <span class="n">solutionSize</span> <span class="o">=</span> <span class="nb">len</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="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">val</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">solutionData</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
+
+                        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="n">solutionSize</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
+                            <span class="n">solutionData</span> <span class="o">+=</span> <span class="s1">&#39; &#39;</span>
+
+                    <span class="n">line</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+
+                    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">evaluator</span><span class="p">)):</span>
+                        <span class="n">line</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">scores</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span>
+
+                    <span class="n">line</span> <span class="o">+=</span> <span class="n">solutionData</span> <span class="o">+</span> <span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span>
+
+                    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="ParetoCheckpoint.load"><a class="viewcode-back" href="../../../macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Load backup lines as population and set algorithm state (population and pareto front) at this backup</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">):</span>
+
+            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Load best solution from last checkpoint&#39;</span><span class="p">)</span>
+            <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+
+                <span class="c1"># reinit pf population</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">pfPop</span> <span class="o">=</span> <span class="p">[]</span>
+
+                <span class="c1"># retrieve class name from algo</span>
+                <span class="n">class_name</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">population</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="vm">__name__</span>
+
+                <span class="c1"># read data for each line</span>
+                <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">():</span>
+
+                    <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;;&#39;</span><span class="p">)</span>
+
+                    <span class="n">nObjectives</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">evaluator</span><span class="p">)</span>
+                    <span class="n">scores</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">nObjectives</span><span class="p">]]</span>
+
+                    <span class="c1"># get best solution data information</span>
+                    <span class="n">solutionData</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)))</span>
+
+                    <span class="n">newSolution</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span>
+                        <span class="nb">globals</span><span class="p">()[</span><span class="s1">&#39;macop.solutions.&#39;</span> <span class="o">+</span> <span class="n">class_name</span><span class="p">],</span>
+                        <span class="n">class_name</span><span class="p">)(</span><span class="n">solutionData</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">solutionData</span><span class="p">))</span>
+                    <span class="n">newSolution</span><span class="o">.</span><span class="n">scores</span> <span class="o">=</span> <span class="n">scores</span>
+
+                    <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">pfPop</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newSolution</span><span class="p">)</span>
+
+            <span class="nb">print</span><span class="p">(</span>
+                <span class="n">macop_text</span><span class="p">(</span>
+                    <span class="s1">&#39;Load of available pareto front backup from `</span><span class="si">{}</span><span class="s1">`&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)))</span>
+
+        <span class="k">else</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span>
+                <span class="n">macop_text</span><span class="p">(</span>
+                    <span class="s1">&#39;No pareto front found... Start running algorithm with new pareto front population.&#39;</span>
+                <span class="p">))</span>
+            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;No pareto front backup used...&quot;</span><span class="p">)</span>
+
+        <span class="nb">print</span><span class="p">(</span><span class="n">macop_line</span><span class="p">())</span></div></div>
+</pre></div>
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; 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>

+ 2 - 2
docs/build/html/_modules/macop/evaluators/EvaluatorExample.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.evaluators.EvaluatorExample &mdash; macop v0.1.6 documentation</title>
+  <title>macop.evaluators.EvaluatorExample &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/Operator.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.Operator &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.Operator &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/crossovers/Crossover.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.crossovers.Crossover &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.crossovers.Crossover &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/crossovers/RandomSplitCrossover.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.crossovers.RandomSplitCrossover &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.crossovers.RandomSplitCrossover &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/crossovers/SimpleCrossover.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.crossovers.SimpleCrossover &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.crossovers.SimpleCrossover &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/mutators/Mutation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.mutators.Mutation &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.mutators.Mutation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/mutators/SimpleBinaryMutation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.mutators.SimpleBinaryMutation &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.mutators.SimpleBinaryMutation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/mutators/SimpleMutation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.mutators.SimpleMutation &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.mutators.SimpleMutation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/policies/Policy.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.policies.Policy &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.policies.Policy &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/operators/policies/RandomPolicy.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.policies.RandomPolicy &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.policies.RandomPolicy &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 14 - 9
docs/build/html/_modules/macop/operators/policies/UCBPolicy.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.policies.UCBPolicy &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.policies.UCBPolicy &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -171,7 +171,7 @@
 <span class="sd">        rewards: {[float]} -- list of summed rewards obtained for each operator</span>
 <span class="sd">        occurences: {[int]} -- number of use (selected) of each operator</span>
 <span class="sd">    &quot;&quot;&quot;</span>
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</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">1000.</span><span class="p">):</span>
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</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>
         <span class="bp">self</span><span class="o">.</span><span class="n">operators</span> <span class="o">=</span> <span class="n">_operators</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">rewards</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">operators</span><span class="p">]</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">occurences</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">operators</span><span class="p">]</span>
@@ -225,13 +225,18 @@
         <span class="c1"># compute fitness of new solution</span>
         <span class="n">newSolution</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">evaluator</span><span class="p">)</span>
 
-        <span class="c1"># compute reward</span>
-        <span class="n">difference</span> <span class="o">=</span> <span class="n">newSolution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()</span> <span class="o">-</span> <span class="n">_solution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()</span>
-        <span class="n">reward</span> <span class="o">=</span> <span class="n">difference</span> <span class="k">if</span> <span class="n">difference</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mf">0.</span>
+        <span class="c1"># compute fitness improvment rate</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">algo</span><span class="o">.</span><span class="n">maximise</span><span class="p">:</span>
+            <span class="n">fir</span> <span class="o">=</span> <span class="p">(</span><span class="n">newSolution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()</span> <span class="o">-</span>
+                   <span class="n">_solution</span><span class="o">.</span><span class="n">fitness</span><span class="p">())</span> <span class="o">/</span> <span class="n">_solution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">fir</span> <span class="o">=</span> <span class="p">(</span><span class="n">_solution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()</span> <span class="o">-</span>
+                   <span class="n">newSolution</span><span class="o">.</span><span class="n">fitness</span><span class="p">())</span> <span class="o">/</span> <span class="n">_solution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()</span>
 
-        <span class="n">operator_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">operators</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">operator</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">rewards</span><span class="p">[</span><span class="n">operator_index</span><span class="p">]</span> <span class="o">+=</span> <span class="n">reward</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">occurences</span><span class="p">[</span><span class="n">operator_index</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
+        <span class="k">if</span> <span class="n">fir</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">operator_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">operators</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">operator</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">rewards</span><span class="p">[</span><span class="n">operator_index</span><span class="p">]</span> <span class="o">+=</span> <span class="n">fir</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">occurences</span><span class="p">[</span><span class="n">operator_index</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
 
         <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;---- Obtaining </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">_solution</span><span class="p">))</span>
 

+ 2 - 2
docs/build/html/_modules/macop/solutions/BinarySolution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.BinarySolution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.BinarySolution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/solutions/CombinatoryIntegerSolution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.CombinatoryIntegerSolution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.CombinatoryIntegerSolution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/_modules/macop/solutions/IntegerSolution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.IntegerSolution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.IntegerSolution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 275 - 1
docs/build/html/_sources/examples.rst.txt

@@ -265,4 +265,278 @@ In this way, now we can run and obtained the best solution found in `n` evaluati
 2. Multi-objective
 -------------------
 
-Available soon...
+1.1 Problem definition
+~~~~~~~~~~~~~~~~~~~~~~
+
+In this example we also use the knapsack problem, with here, 2 kinds of value for each object in the knapsack :
+
+- value 1 of each component of knapsack
+- value 2 of each component of knapsack
+- weight associated to each of these components (objects)
+
+In multi-objective algorithm, we do not only found one solution but a set of non-dominated solutions called Pareto front as we have multiple objectives.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score1 = [ random.randint(1, 20) for _ in range(200) ] # value 1 of each object
+    elements_score2 = [ random.randint(1, 20) for _ in range(200) ] # value 2 of each object
+    elements_weight = [ random.randint(5, 25) for _ in range(200) ] # weight of each object
+
+
+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 `BinarySolution` from `macop` which stores solution as a binary array.
+
+Using the solution representation, we need to define multiple elements to fit our algorithm :
+
+- function which validates or not a solution (based on constraints)
+- the first objective function which evaluates the solution (fitness score for objective 1)
+- the second objective function which evaluates the solution (fitness score for objective 2)
+- initialization solution function
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+    from macop.solutions.BinarySolution import BinarySolution
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score1 = [ random.randint(1, 20) for _ in range(200) ] # value 1 of each object
+    elements_score2 = [ random.randint(1, 20) for _ in range(200) ] # value 2 of each object
+    elements_weight = [ random.randint(5, 25) for _ in range(200) ] # weight of each object
+
+    # 1. validator function (we accept only bag with maximum weight 80kg)
+    def validator(_solution):
+
+        weight_sum = 0
+        for index, elem in enumerate(_solution.data):
+            weight_sum += elements_weight[index] * elem
+
+        if weight_sum <= 80:
+            return True
+        else:
+            False
+
+    # 2. functions which computes fitness of solution for the two objectives
+    def evaluator1(_solution):
+
+        fitness = 0
+        for index, elem in enumerate(_solution.data):
+            fitness += (elements_score1[index] * elem)
+
+        return fitness
+
+    def evaluator2(_solution):
+
+        fitness = 0
+        for index, elem in enumerate(_solution.data):
+            fitness += (elements_score2[index] * elem)
+
+        return fitness
+
+    # 3. function which here initializes solution ramdomly and check validity of solution
+    def init():
+        return BinarySolution([], 200).random(validator)
+
+1.2 Operators and Policy
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+In our algorithm we need to use some operators in order to improve current best solution found at current `n` evaluations.
+
+In `macop` you have some available operators. In this example, we use 3 of them.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    from macop.operators.mutators.SimpleMutation import SimpleMutation
+    from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
+    from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    # list of operators instance to use
+    operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
+
+As we defined multiple operators, we have to tell how we want to select them into the algorithm. This is why **Policy** classes have been implemented.
+`Policy` class implementation enables to select the next operator to use and once new solution is generated, computes its score (in `apply` method). This class requires all the operators use to be instanciate.
+
+Why computing score into **Policy** `apply` method ? Because it's a way to get some important statistics from solution improvment using specific operator.
+**UCBPolicy** as example, based on Upper Confidence Bound (UCB_), 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 `UCBPolicy` implementation.
+
+.. _UCB: https://banditalgs.com/2016/09/18/the-upper-confidence-bound-algorithm/
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    from macop.operators.mutators.SimpleMutation import SimpleMutation
+    from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
+    from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
+
+    from macop.operators.policies.UCBPolicy import UCBPolicy
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    # list of operators instance to use
+    operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
+
+    # `policy` instance is created using specific value for Upper Confidence Bound
+    policy = UCBPolicy(operators, C=100.)
+
+1.3 How works multi-objective in macop ?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As we have now multiple objectives, we define a new algorithm named MOEAD for `MultiObjective Evolutionary Algorithm with Decomposition` inside `macop.algorithms.multi.MOEAD`. 
+The principle of this algorithm is to decompose the multi-objective problem into several single-objective problems (see MOEAD_ documentation framework).
+To implement this algorithm, we now define the attribute `evaluator` as a list of evaluators. The number of objectives is defined by the length of this list and generated weights for each sub problem too.
+
+The `mu` attribute represent the number of sub problems and hence our current population of solutions.
+
+.. _MOEAD: https://sites.google.com/view/moead/home
+
+In order to represent the `mu` mono-objective sub problems (obtained from weighted decomposition), we define the `macop.algorithms.multi.MOSubProblem` class. 
+This class enables to compute and find best solution from weighted decomposition. The `weights` attribute of this class stores the weight for each objective of this sub problem instance.
+
+The `evaluator` of MOSubProblem is defined as below:
+
+.. code:: python
+
+    def moEvaluator(_solution, _evaluator, _weights):
+
+        scores = [eval(_solution) for eval in _evaluator]
+
+        # associate objectives scores to solution
+        _solution.scores = scores
+
+        # return the weighted sum
+        return sum([scores[i] for i, w in enumerate(_weights)])
+
+    ...
+
+    # compute weighted sum from solution using list of evaluators and weights for current sub problem
+    sub_evaluator = lambda _solution: moEvaluator(_solution, _evaluator, weights[i])
+
+
+This function computes the weighted sum of objectives (to transform sub problem into mono-objective) and also stores the objectives scores into solution using the dynamic added `scores` attributes.
+This is an example, we based our function using classical weighted sum, we can also implement Tchebychev_ method.
+
+.. _Tchebychev: https://repository.lib.ncsu.edu/handle/1840.16/272
+
+We can now instance our MOEAD algorithm:
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+    
+    import logging
+
+    from macop.algorithms.multi.MOEAD import MOEAD
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    ...
+
+    if not os.path.exists('data'):
+        os.makedirs('data')
+
+    # logging configuration
+    logging.basicConfig(format='%(asctime)s %(message)s', filename='data/example.log', level=logging.DEBUG)
+
+    algo = MOEAD(init, [evaluator1, evaluator2], operators, policy, validator, _maximise=True)
+
+1.4 Checkpoint multi-objective solutions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To keep track of our `mu` population and `pfPop` pareto front set, 2 new callbacks have been defined:
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+    
+    import logging
+
+    from macop.algorithms.multi.MOEAD import MOEAD
+    from macop.callbacks.MultiCheckpoint import MultiCheckpoint
+    from macop.callbacks.ParetoFront import ParetoFront
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    ...
+
+    if not os.path.exists('data'):
+        os.makedirs('data')
+
+    # logging configuration
+    logging.basicConfig(format='%(asctime)s %(message)s', filename='data/example.log', level=logging.DEBUG)
+
+    algo = ILS(init, evaluator, operators, policy, validator, _maximise=True)
+
+    # Add this callback instance into list of callback
+    # It tells the algorithm to apply this callback every 5 evaluations
+    # And also the algorithm to load checkpoint if exists before running by using `load` method of callback
+    algo.addCallback(MultiCheckpoint(_every=5, _filepath='data/checkpointMOEAD.csv'))
+
+    # add Pareto Checkpoint callback instance too
+    algo.addCallback(ParetoCheckpoint(_every=5, _filepath='data/paretoMOEAD.csv'))
+
+These callbacks only stores the last states of `mu` population and `pfPop`.
+
+We can now run the MOEAD algorithm instance:
+
+.. code:: python
+
+    paretoFront = algo.run(10000) 
+
+    print("Pareto front is composed of", len(paretoFront), "solutions")

+ 1 - 0
docs/build/html/_sources/macop.rst.txt

@@ -22,6 +22,7 @@ macop.callbacks
    
    macop.callbacks.BasicCheckpoint
    macop.callbacks.MultiCheckpoint
+   macop.callbacks.ParetoCheckpoint
    macop.callbacks.Callback
 
 macop.evaluators

+ 1 - 1
docs/build/html/_sources/macop/macop.callbacks.MultiCheckpoint.rst.txt

@@ -13,7 +13,7 @@ macop.callbacks.MultiCheckpoint
 
    .. autosummary::
    
-      BasicCheckpoint
+      MultiCheckpoint
    
    
 

+ 22 - 0
docs/build/html/_sources/macop/macop.callbacks.ParetoCheckpoint.rst.txt

@@ -0,0 +1,22 @@
+macop.callbacks.ParetoCheckpoint
+================================
+
+.. automodule:: macop.callbacks.ParetoCheckpoint
+
+   
+   
+   
+
+   
+   
+   .. rubric:: Classes
+
+   .. autosummary::
+   
+      ParetoCheckpoint
+   
+   
+
+   
+   
+   

+ 1 - 1
docs/build/html/_static/documentation_options.js

@@ -1,6 +1,6 @@
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: 'v0.1.6',
+    VERSION: 'v0.2.0',
     LANGUAGE: 'None',
     COLLAPSE_INDEX: false,
     FILE_SUFFIX: '.html',

+ 2 - 2
docs/build/html/contributing.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Contributing &mdash; macop v0.1.6 documentation</title>
+  <title>Contributing &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/description.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Description &mdash; macop v0.1.6 documentation</title>
+  <title>Description &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

Fichier diff supprimé car celui-ci est trop grand
+ 254 - 4
docs/build/html/examples.html


+ 30 - 18
docs/build/html/genindex.html

@@ -9,7 +9,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Index &mdash; macop v0.1.6 documentation</title>
+  <title>Index &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -188,7 +188,9 @@
       <ul>
         <li><a href="macop/macop.callbacks.Callback.html#macop.callbacks.Callback.Callback.algo">(macop.callbacks.Callback.Callback attribute)</a>
 </li>
-        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.algo">(macop.callbacks.MultiCheckpoint.BasicCheckpoint attribute)</a>
+        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.algo">(macop.callbacks.MultiCheckpoint.MultiCheckpoint attribute)</a>
+</li>
+        <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.algo">(macop.callbacks.ParetoCheckpoint.ParetoCheckpoint attribute)</a>
 </li>
       </ul></li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm">Algorithm (class in macop.algorithms.Algorithm)</a>
@@ -220,11 +222,7 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.callbacks.BasicCheckpoint.html#macop.callbacks.BasicCheckpoint.BasicCheckpoint">BasicCheckpoint (class in macop.callbacks.BasicCheckpoint)</a>
-
-      <ul>
-        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint">(class in macop.callbacks.MultiCheckpoint)</a>
 </li>
-      </ul></li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.bestSolution">bestSolution (macop.algorithms.Algorithm.Algorithm attribute)</a>
 
       <ul>
@@ -248,11 +246,11 @@
       <li><a href="macop/macop.callbacks.Callback.html#macop.callbacks.Callback.Callback">Callback (class in macop.callbacks.Callback)</a>
 </li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.callbacks">callbacks (macop.algorithms.Algorithm.Algorithm attribute)</a>
-</li>
-      <li><a href="macop/macop.algorithms.mono.IteratedLocalSearch.html#macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch.checkpoint">checkpoint (macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch attribute)</a>
 
       <ul>
-        <li><a href="macop/macop.algorithms.mono.LocalSearch.html#macop.algorithms.mono.LocalSearch.LocalSearch.checkpoint">(macop.algorithms.mono.LocalSearch.LocalSearch attribute)</a>
+        <li><a href="macop/macop.algorithms.mono.IteratedLocalSearch.html#macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch.callbacks">(macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch attribute)</a>
+</li>
+        <li><a href="macop/macop.algorithms.mono.LocalSearch.html#macop.algorithms.mono.LocalSearch.LocalSearch.callbacks">(macop.algorithms.mono.LocalSearch.LocalSearch attribute)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -310,7 +308,9 @@
       <ul>
         <li><a href="macop/macop.callbacks.Callback.html#macop.callbacks.Callback.Callback.every">(macop.callbacks.Callback.Callback attribute)</a>
 </li>
-        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.every">(macop.callbacks.MultiCheckpoint.BasicCheckpoint attribute)</a>
+        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.every">(macop.callbacks.MultiCheckpoint.MultiCheckpoint attribute)</a>
+</li>
+        <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.every">(macop.callbacks.ParetoCheckpoint.ParetoCheckpoint attribute)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -324,7 +324,9 @@
       <ul>
         <li><a href="macop/macop.callbacks.Callback.html#macop.callbacks.Callback.Callback.filepath">(macop.callbacks.Callback.Callback attribute)</a>
 </li>
-        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.filepath">(macop.callbacks.MultiCheckpoint.BasicCheckpoint attribute)</a>
+        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.filepath">(macop.callbacks.MultiCheckpoint.MultiCheckpoint attribute)</a>
+</li>
+        <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.filepath">(macop.callbacks.ParetoCheckpoint.ParetoCheckpoint attribute)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -400,7 +402,9 @@
       <ul>
         <li><a href="macop/macop.callbacks.Callback.html#macop.callbacks.Callback.Callback.load">(macop.callbacks.Callback.Callback method)</a>
 </li>
-        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.load">(macop.callbacks.MultiCheckpoint.BasicCheckpoint method)</a>
+        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.load">(macop.callbacks.MultiCheckpoint.MultiCheckpoint method)</a>
+</li>
+        <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.load">(macop.callbacks.ParetoCheckpoint.ParetoCheckpoint method)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -424,6 +428,8 @@
       <li><a href="macop/macop.callbacks.Callback.html#module-macop.callbacks.Callback">macop.callbacks.Callback (module)</a>
 </li>
       <li><a href="macop/macop.callbacks.MultiCheckpoint.html#module-macop.callbacks.MultiCheckpoint">macop.callbacks.MultiCheckpoint (module)</a>
+</li>
+      <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#module-macop.callbacks.ParetoCheckpoint">macop.callbacks.ParetoCheckpoint (module)</a>
 </li>
       <li><a href="macop/macop.evaluators.EvaluatorExample.html#module-macop.evaluators.EvaluatorExample">macop.evaluators.EvaluatorExample (module)</a>
 </li>
@@ -465,6 +471,8 @@
         <li><a href="macop/macop.algorithms.mono.LocalSearch.html#macop.algorithms.mono.LocalSearch.LocalSearch.maximise">(macop.algorithms.mono.LocalSearch.LocalSearch attribute)</a>
 </li>
       </ul></li>
+      <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint">MultiCheckpoint (class in macop.callbacks.MultiCheckpoint)</a>
+</li>
       <li><a href="macop/macop.operators.mutators.Mutation.html#macop.operators.mutators.Mutation.Mutation">Mutation (class in macop.operators.mutators.Mutation)</a>
 </li>
   </ul></td>
@@ -498,9 +506,13 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.parent">parent (macop.algorithms.Algorithm.Algorithm attribute)</a>
+</li>
+      <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint">ParetoCheckpoint (class in macop.callbacks.ParetoCheckpoint)</a>
 </li>
       <li><a href="macop/macop.operators.policies.Policy.html#macop.operators.policies.Policy.Policy">Policy (class in macop.operators.policies.Policy)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.policy">policy (macop.algorithms.Algorithm.Algorithm attribute)</a>
 
       <ul>
@@ -509,8 +521,6 @@
         <li><a href="macop/macop.algorithms.mono.LocalSearch.html#macop.algorithms.mono.LocalSearch.LocalSearch.policy">(macop.algorithms.mono.LocalSearch.LocalSearch attribute)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.progress">progress() (macop.algorithms.Algorithm.Algorithm method)</a>
 </li>
   </ul></td>
@@ -533,10 +543,10 @@
 </li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.resume">resume() (macop.algorithms.Algorithm.Algorithm method)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.rewards">rewards (macop.operators.policies.UCBPolicy.UCBPolicy attribute)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.run">run() (macop.algorithms.Algorithm.Algorithm method)</a>
 
       <ul>
@@ -548,7 +558,9 @@
 </li>
         <li><a href="macop/macop.callbacks.Callback.html#macop.callbacks.Callback.Callback.run">(macop.callbacks.Callback.Callback method)</a>
 </li>
-        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.BasicCheckpoint.run">(macop.callbacks.MultiCheckpoint.BasicCheckpoint method)</a>
+        <li><a href="macop/macop.callbacks.MultiCheckpoint.html#macop.callbacks.MultiCheckpoint.MultiCheckpoint.run">(macop.callbacks.MultiCheckpoint.MultiCheckpoint method)</a>
+</li>
+        <li><a href="macop/macop.callbacks.ParetoCheckpoint.html#macop.callbacks.ParetoCheckpoint.ParetoCheckpoint.run">(macop.callbacks.ParetoCheckpoint.ParetoCheckpoint method)</a>
 </li>
       </ul></li>
   </ul></td>

+ 2 - 2
docs/build/html/index.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Minimalist And Customizable Optimization Package &mdash; macop v0.1.6 documentation</title>
+  <title>Minimalist And Customizable Optimization Package &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 8 - 4
docs/build/html/macop.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Documentation &mdash; macop v0.1.6 documentation</title>
+  <title>Documentation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -98,6 +98,7 @@
 <li class="toctree-l2"><a class="reference internal" href="#macop-callbacks">macop.callbacks</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.callbacks.BasicCheckpoint.html">macop.callbacks.BasicCheckpoint</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.callbacks.MultiCheckpoint.html">macop.callbacks.MultiCheckpoint</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop/macop.callbacks.ParetoCheckpoint.html">macop.callbacks.ParetoCheckpoint</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.callbacks.Callback.html">macop.callbacks.Callback</a></li>
 </ul>
 </li>
@@ -232,9 +233,12 @@
 <td><p>Basic Checkpoint class implementation</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="macop/macop.callbacks.MultiCheckpoint.html#module-macop.callbacks.MultiCheckpoint" title="macop.callbacks.MultiCheckpoint"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.callbacks.MultiCheckpoint</span></code></a></p></td>
-<td><p>Basic Checkpoint class implementation</p></td>
+<td><p>Multi Checkpoint class implementation</p></td>
+</tr>
+<tr class="row-odd"><td><p><a class="reference internal" href="macop/macop.callbacks.ParetoCheckpoint.html#module-macop.callbacks.ParetoCheckpoint" title="macop.callbacks.ParetoCheckpoint"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.callbacks.ParetoCheckpoint</span></code></a></p></td>
+<td><p>Pareto front Checkpoint class implementation</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="macop/macop.callbacks.Callback.html#module-macop.callbacks.Callback" title="macop.callbacks.Callback"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.callbacks.Callback</span></code></a></p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="macop/macop.callbacks.Callback.html#module-macop.callbacks.Callback" title="macop.callbacks.Callback"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.callbacks.Callback</span></code></a></p></td>
 <td><p>Abstract Checkpoint class</p></td>
 </tr>
 </tbody>

+ 3 - 3
docs/build/html/macop/macop.algorithms.Algorithm.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.algorithms.Algorithm &mdash; macop v0.1.6 documentation</title>
+  <title>macop.algorithms.Algorithm &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -241,7 +241,7 @@
 <dl class="attribute">
 <dt id="macop.algorithms.Algorithm.Algorithm.callbacks">
 <code class="sig-name descname">callbacks</code><a class="headerlink" href="#macop.algorithms.Algorithm.Algorithm.callbacks" title="Permalink to this definition">¶</a></dt>
-<dd><p>{[Callback]} – list of Callback class implementation to do some instructions every number of evaluations and when initializing algorithm</p>
+<dd><p>{[Callback]} – list of Callback class implementation to do some instructions every number of evaluations and <cite>load</cite> when initializing algorithm</p>
 </dd></dl>
 
 <dl class="attribute">

+ 5 - 5
docs/build/html/macop/macop.algorithms.mono.IteratedLocalSearch.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.algorithms.mono.IteratedLocalSearch &mdash; macop v0.1.6 documentation</title>
+  <title>macop.algorithms.mono.IteratedLocalSearch &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -239,9 +239,9 @@
 </dd></dl>
 
 <dl class="attribute">
-<dt id="macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch.checkpoint">
-<code class="sig-name descname">checkpoint</code><a class="headerlink" href="#macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch.checkpoint" title="Permalink to this definition">¶</a></dt>
-<dd><p>{Checkpoint} – Checkpoint class implementation to keep track of algorithm and restart</p>
+<dt id="macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch.callbacks">
+<code class="sig-name descname">callbacks</code><a class="headerlink" href="#macop.algorithms.mono.IteratedLocalSearch.IteratedLocalSearch.callbacks" title="Permalink to this definition">¶</a></dt>
+<dd><p>{[Callback]} – list of Callback class implementation to do some instructions every number of evaluations and <cite>load</cite> when initializing algorithm</p>
 </dd></dl>
 
 <dl class="method">

+ 5 - 5
docs/build/html/macop/macop.algorithms.mono.LocalSearch.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.algorithms.mono.LocalSearch &mdash; macop v0.1.6 documentation</title>
+  <title>macop.algorithms.mono.LocalSearch &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -239,9 +239,9 @@
 </dd></dl>
 
 <dl class="attribute">
-<dt id="macop.algorithms.mono.LocalSearch.LocalSearch.checkpoint">
-<code class="sig-name descname">checkpoint</code><a class="headerlink" href="#macop.algorithms.mono.LocalSearch.LocalSearch.checkpoint" title="Permalink to this definition">¶</a></dt>
-<dd><p>{Checkpoint} – Checkpoint class implementation to keep track of algorithm and restart</p>
+<dt id="macop.algorithms.mono.LocalSearch.LocalSearch.callbacks">
+<code class="sig-name descname">callbacks</code><a class="headerlink" href="#macop.algorithms.mono.LocalSearch.LocalSearch.callbacks" title="Permalink to this definition">¶</a></dt>
+<dd><p>{[Callback]} – list of Callback class implementation to do some instructions every number of evaluations and <cite>load</cite> when initializing algorithm</p>
 </dd></dl>
 
 <dl class="method">

+ 3 - 2
docs/build/html/macop/macop.callbacks.BasicCheckpoint.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.callbacks.BasicCheckpoint &mdash; macop v0.1.6 documentation</title>
+  <title>macop.callbacks.BasicCheckpoint &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -93,6 +93,7 @@
 <li class="toctree-l2 current"><a class="reference internal" href="../macop.html#macop-callbacks">macop.callbacks</a><ul class="current">
 <li class="toctree-l3 current"><a class="current reference internal" href="#">macop.callbacks.BasicCheckpoint</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.callbacks.MultiCheckpoint.html">macop.callbacks.MultiCheckpoint</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.callbacks.ParetoCheckpoint.html">macop.callbacks.ParetoCheckpoint</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.callbacks.Callback.html">macop.callbacks.Callback</a></li>
 </ul>
 </li>

+ 5 - 4
docs/build/html/macop/macop.callbacks.Callback.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.callbacks.Callback &mdash; macop v0.1.6 documentation</title>
+  <title>macop.callbacks.Callback &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -36,7 +36,7 @@
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="next" title="macop.evaluators.EvaluatorExample" href="macop.evaluators.EvaluatorExample.html" />
-    <link rel="prev" title="macop.callbacks.MultiCheckpoint" href="macop.callbacks.MultiCheckpoint.html" /> 
+    <link rel="prev" title="macop.callbacks.ParetoCheckpoint" href="macop.callbacks.ParetoCheckpoint.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -93,6 +93,7 @@
 <li class="toctree-l2 current"><a class="reference internal" href="../macop.html#macop-callbacks">macop.callbacks</a><ul class="current">
 <li class="toctree-l3"><a class="reference internal" href="macop.callbacks.BasicCheckpoint.html">macop.callbacks.BasicCheckpoint</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.callbacks.MultiCheckpoint.html">macop.callbacks.MultiCheckpoint</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.callbacks.ParetoCheckpoint.html">macop.callbacks.ParetoCheckpoint</a></li>
 <li class="toctree-l3 current"><a class="current reference internal" href="#">macop.callbacks.Callback</a></li>
 </ul>
 </li>
@@ -246,7 +247,7 @@
         <a href="macop.evaluators.EvaluatorExample.html" class="btn btn-neutral float-right" title="macop.evaluators.EvaluatorExample" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
-        <a href="macop.callbacks.MultiCheckpoint.html" class="btn btn-neutral float-left" title="macop.callbacks.MultiCheckpoint" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+        <a href="macop.callbacks.ParetoCheckpoint.html" class="btn btn-neutral float-left" title="macop.callbacks.ParetoCheckpoint" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
     </div>
   

Fichier diff supprimé car celui-ci est trop grand
+ 22 - 21
docs/build/html/macop/macop.callbacks.MultiCheckpoint.html


Fichier diff supprimé car celui-ci est trop grand
+ 277 - 0
docs/build/html/macop/macop.callbacks.ParetoCheckpoint.html


+ 2 - 2
docs/build/html/macop/macop.evaluators.EvaluatorExample.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.evaluators.EvaluatorExample &mdash; macop v0.1.6 documentation</title>
+  <title>macop.evaluators.EvaluatorExample &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.Operator.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.Operator &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.Operator &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.crossovers.Crossover.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.crossovers.Crossover &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.crossovers.Crossover &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.crossovers.RandomSplitCrossover.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.crossovers.RandomSplitCrossover &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.crossovers.RandomSplitCrossover &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.crossovers.SimpleCrossover.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.crossovers.SimpleCrossover &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.crossovers.SimpleCrossover &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.mutators.Mutation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.mutators.Mutation &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.mutators.Mutation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.mutators.SimpleBinaryMutation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.mutators.SimpleBinaryMutation &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.mutators.SimpleBinaryMutation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.mutators.SimpleMutation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.mutators.SimpleMutation &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.mutators.SimpleMutation &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.policies.Policy.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.policies.Policy &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.policies.Policy &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.operators.policies.RandomPolicy.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.operators.policies.RandomPolicy &mdash; macop v0.1.6 documentation</title>
+  <title>macop.operators.policies.RandomPolicy &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

Fichier diff supprimé car celui-ci est trop grand
+ 3 - 3
docs/build/html/macop/macop.operators.policies.UCBPolicy.html


+ 2 - 2
docs/build/html/macop/macop.solutions.BinarySolution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.BinarySolution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.BinarySolution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.solutions.CombinatoryIntegerSolution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.CombinatoryIntegerSolution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.CombinatoryIntegerSolution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.solutions.IntegerSolution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.IntegerSolution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.IntegerSolution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

+ 2 - 2
docs/build/html/macop/macop.solutions.Solution.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.solutions.Solution &mdash; macop v0.1.6 documentation</title>
+  <title>macop.solutions.Solution &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

BIN
docs/build/html/objects.inv


+ 7 - 2
docs/build/html/py-modindex.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Python Module Index &mdash; macop v0.1.6 documentation</title>
+  <title>Python Module Index &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -61,7 +61,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           
@@ -198,6 +198,11 @@
        <td>&#160;&#160;&#160;
        <a href="macop/macop.callbacks.MultiCheckpoint.html#module-macop.callbacks.MultiCheckpoint"><code class="xref">macop.callbacks.MultiCheckpoint</code></a></td><td>
        <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="macop/macop.callbacks.ParetoCheckpoint.html#module-macop.callbacks.ParetoCheckpoint"><code class="xref">macop.callbacks.ParetoCheckpoint</code></a></td><td>
+       <em></em></td></tr>
      <tr class="cg-1">
        <td></td>
        <td>&#160;&#160;&#160;

+ 2 - 2
docs/build/html/search.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Search &mdash; macop v0.1.6 documentation</title>
+  <title>Search &mdash; macop v0.2.0 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.6
+                0.2.0
               </div>
             
           

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
docs/build/html/searchindex.js


+ 2 - 2
docs/source/conf.py

@@ -23,9 +23,9 @@ copyright = '2020, Jérôme BUISINE'
 author = 'Jérôme BUISINE'
 
 # The short X.Y version
-version = '0.1.6'
+version = '0.2.0'
 # The full version, including alpha/beta/rc tags
-release = 'v0.1.6'
+release = 'v0.2.0'
 
 
 # -- General configuration ---------------------------------------------------

+ 275 - 1
docs/source/examples.rst

@@ -265,4 +265,278 @@ In this way, now we can run and obtained the best solution found in `n` evaluati
 2. Multi-objective
 -------------------
 
-Available soon...
+1.1 Problem definition
+~~~~~~~~~~~~~~~~~~~~~~
+
+In this example we also use the knapsack problem, with here, 2 kinds of value for each object in the knapsack :
+
+- value 1 of each component of knapsack
+- value 2 of each component of knapsack
+- weight associated to each of these components (objects)
+
+In multi-objective algorithm, we do not only found one solution but a set of non-dominated solutions called Pareto front as we have multiple objectives.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score1 = [ random.randint(1, 20) for _ in range(200) ] # value 1 of each object
+    elements_score2 = [ random.randint(1, 20) for _ in range(200) ] # value 2 of each object
+    elements_weight = [ random.randint(5, 25) for _ in range(200) ] # weight of each object
+
+
+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 `BinarySolution` from `macop` which stores solution as a binary array.
+
+Using the solution representation, we need to define multiple elements to fit our algorithm :
+
+- function which validates or not a solution (based on constraints)
+- the first objective function which evaluates the solution (fitness score for objective 1)
+- the second objective function which evaluates the solution (fitness score for objective 2)
+- initialization solution function
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+    from macop.solutions.BinarySolution import BinarySolution
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score1 = [ random.randint(1, 20) for _ in range(200) ] # value 1 of each object
+    elements_score2 = [ random.randint(1, 20) for _ in range(200) ] # value 2 of each object
+    elements_weight = [ random.randint(5, 25) for _ in range(200) ] # weight of each object
+
+    # 1. validator function (we accept only bag with maximum weight 80kg)
+    def validator(_solution):
+
+        weight_sum = 0
+        for index, elem in enumerate(_solution.data):
+            weight_sum += elements_weight[index] * elem
+
+        if weight_sum <= 80:
+            return True
+        else:
+            False
+
+    # 2. functions which computes fitness of solution for the two objectives
+    def evaluator1(_solution):
+
+        fitness = 0
+        for index, elem in enumerate(_solution.data):
+            fitness += (elements_score1[index] * elem)
+
+        return fitness
+
+    def evaluator2(_solution):
+
+        fitness = 0
+        for index, elem in enumerate(_solution.data):
+            fitness += (elements_score2[index] * elem)
+
+        return fitness
+
+    # 3. function which here initializes solution ramdomly and check validity of solution
+    def init():
+        return BinarySolution([], 200).random(validator)
+
+1.2 Operators and Policy
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+In our algorithm we need to use some operators in order to improve current best solution found at current `n` evaluations.
+
+In `macop` you have some available operators. In this example, we use 3 of them.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    from macop.operators.mutators.SimpleMutation import SimpleMutation
+    from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
+    from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    # list of operators instance to use
+    operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
+
+As we defined multiple operators, we have to tell how we want to select them into the algorithm. This is why **Policy** classes have been implemented.
+`Policy` class implementation enables to select the next operator to use and once new solution is generated, computes its score (in `apply` method). This class requires all the operators use to be instanciate.
+
+Why computing score into **Policy** `apply` method ? Because it's a way to get some important statistics from solution improvment using specific operator.
+**UCBPolicy** as example, based on Upper Confidence Bound (UCB_), 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 `UCBPolicy` implementation.
+
+.. _UCB: https://banditalgs.com/2016/09/18/the-upper-confidence-bound-algorithm/
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    from macop.operators.mutators.SimpleMutation import SimpleMutation
+    from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
+    from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
+
+    from macop.operators.policies.UCBPolicy import UCBPolicy
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    # list of operators instance to use
+    operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
+
+    # `policy` instance is created using specific value for Upper Confidence Bound
+    policy = UCBPolicy(operators, C=100.)
+
+1.3 How works multi-objective in macop ?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As we have now multiple objectives, we define a new algorithm named MOEAD for `MultiObjective Evolutionary Algorithm with Decomposition` inside `macop.algorithms.multi.MOEAD`. 
+The principle of this algorithm is to decompose the multi-objective problem into several single-objective problems (see MOEAD_ documentation framework).
+To implement this algorithm, we now define the attribute `evaluator` as a list of evaluators. The number of objectives is defined by the length of this list and generated weights for each sub problem too.
+
+The `mu` attribute represent the number of sub problems and hence our current population of solutions.
+
+.. _MOEAD: https://sites.google.com/view/moead/home
+
+In order to represent the `mu` mono-objective sub problems (obtained from weighted decomposition), we define the `macop.algorithms.multi.MOSubProblem` class. 
+This class enables to compute and find best solution from weighted decomposition. The `weights` attribute of this class stores the weight for each objective of this sub problem instance.
+
+The `evaluator` of MOSubProblem is defined as below:
+
+.. code:: python
+
+    def moEvaluator(_solution, _evaluator, _weights):
+
+        scores = [eval(_solution) for eval in _evaluator]
+
+        # associate objectives scores to solution
+        _solution.scores = scores
+
+        # return the weighted sum
+        return sum([scores[i] for i, w in enumerate(_weights)])
+
+    ...
+
+    # compute weighted sum from solution using list of evaluators and weights for current sub problem
+    sub_evaluator = lambda _solution: moEvaluator(_solution, _evaluator, weights[i])
+
+
+This function computes the weighted sum of objectives (to transform sub problem into mono-objective) and also stores the objectives scores into solution using the dynamic added `scores` attributes.
+This is an example, we based our function using classical weighted sum, we can also implement Tchebychev_ method.
+
+.. _Tchebychev: https://repository.lib.ncsu.edu/handle/1840.16/272
+
+We can now instance our MOEAD algorithm:
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+    
+    import logging
+
+    from macop.algorithms.multi.MOEAD import MOEAD
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    ...
+
+    if not os.path.exists('data'):
+        os.makedirs('data')
+
+    # logging configuration
+    logging.basicConfig(format='%(asctime)s %(message)s', filename='data/example.log', level=logging.DEBUG)
+
+    algo = MOEAD(init, [evaluator1, evaluator2], operators, policy, validator, _maximise=True)
+
+1.4 Checkpoint multi-objective solutions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To keep track of our `mu` population and `pfPop` pareto front set, 2 new callbacks have been defined:
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+    
+    import logging
+
+    from macop.algorithms.multi.MOEAD import MOEAD
+    from macop.callbacks.MultiCheckpoint import MultiCheckpoint
+    from macop.callbacks.ParetoFront import ParetoFront
+
+    """
+    Problem definition
+    """
+    ...
+
+    """
+    Algorithm parameters
+    """
+    ...
+
+    if not os.path.exists('data'):
+        os.makedirs('data')
+
+    # logging configuration
+    logging.basicConfig(format='%(asctime)s %(message)s', filename='data/example.log', level=logging.DEBUG)
+
+    algo = ILS(init, evaluator, operators, policy, validator, _maximise=True)
+
+    # Add this callback instance into list of callback
+    # It tells the algorithm to apply this callback every 5 evaluations
+    # And also the algorithm to load checkpoint if exists before running by using `load` method of callback
+    algo.addCallback(MultiCheckpoint(_every=5, _filepath='data/checkpointMOEAD.csv'))
+
+    # add Pareto Checkpoint callback instance too
+    algo.addCallback(ParetoCheckpoint(_every=5, _filepath='data/paretoMOEAD.csv'))
+
+These callbacks only stores the last states of `mu` population and `pfPop`.
+
+We can now run the MOEAD algorithm instance:
+
+.. code:: python
+
+    paretoFront = algo.run(10000) 
+
+    print("Pareto front is composed of", len(paretoFront), "solutions")

+ 1 - 1
docs/source/macop/macop.callbacks.MultiCheckpoint.rst

@@ -13,7 +13,7 @@ macop.callbacks.MultiCheckpoint
 
    .. autosummary::
    
-      BasicCheckpoint
+      MultiCheckpoint
    
    
 

+ 22 - 0
docs/source/macop/macop.callbacks.ParetoCheckpoint.rst

@@ -0,0 +1,22 @@
+macop.callbacks.ParetoCheckpoint
+================================
+
+.. automodule:: macop.callbacks.ParetoCheckpoint
+
+   
+   
+   
+
+   
+   
+   .. rubric:: Classes
+
+   .. autosummary::
+   
+      ParetoCheckpoint
+   
+   
+
+   
+   
+   

+ 31 - 26
macop/algorithms/multi/MOEAD.py

@@ -22,12 +22,12 @@ for loader, module_name, is_pkg in pkgutil.walk_packages(
 
 def moEvaluator(_solution, _evaluator, _weights):
 
-    scores = [ eval(_solution) for eval in _evaluator ]
+    scores = [eval(_solution) for eval in _evaluator]
 
     # associate objectives scores to solution
     _solution.scores = scores
 
-    return sum([scores[i] for i, w in enumerate(_weights) ])
+    return sum([scores[i] for i, w in enumerate(_weights)])
 
 
 class MOEAD(Algorithm):
@@ -95,9 +95,9 @@ class MOEAD(Algorithm):
         self.setNeighbors()
 
         weights = []
-    
+
         if self.nObjectives == 2:
-                
+
             for i in range(self.mu):
                 angle = math.pi / 2 * i / (self.mu - 1)
                 weights.append([math.cos(angle), math.sin(angle)])
@@ -111,15 +111,15 @@ class MOEAD(Algorithm):
         else:
             raise ValueError('Unvalid number of objectives')
 
-        
         self.weights = weights
-        
+
         self.subProblems = []
 
         for i in range(self.mu):
 
             # compute weight sum from solution
-            sub_evaluator = lambda _solution: moEvaluator(_solution, _evaluator, weights[i])
+            sub_evaluator = lambda _solution: moEvaluator(
+                _solution, _evaluator, weights[i])
 
             # intialize each sub problem
             subProblem = MOSubProblem(i, weights[i], _initalizer,
@@ -133,10 +133,11 @@ class MOEAD(Algorithm):
 
         # ref point based on number of evaluators
         if self.maximise:
-            self.refPoint = [ 0 for _ in range(self.nObjectives) ]
+            self.refPoint = [0 for _ in range(self.nObjectives)]
         else:
-            self.refPoint = [ sys.float_info.max for _ in range(self.nObjectives) ]
-        
+            self.refPoint = [
+                sys.float_info.max for _ in range(self.nObjectives)
+            ]
 
     def initRun(self):
         """
@@ -183,11 +184,15 @@ class MOEAD(Algorithm):
                 # for each neighbor of current sub problem update solution if better
                 improvment = False
                 for j in self.neighbors[i]:
-                    if spBestSolution.fitness() > self.subProblems[j].bestSolution.fitness():
-                        
+                    if spBestSolution.fitness(
+                    ) > self.subProblems[j].bestSolution.fitness():
+
                         # create new solution based on current new if better, computes fitness associated to new solution for sub problem
                         class_name = type(spBestSolution).__name__
-                        newSolution = getattr(globals()['macop.solutions.' + class_name], class_name)(spBestSolution.data, len(spBestSolution.data))
+                        newSolution = getattr(
+                            globals()['macop.solutions.' + class_name],
+                            class_name)(spBestSolution.data,
+                                        len(spBestSolution.data))
 
                         # evaluate solution for new sub problem and update as best solution
                         self.subProblems[j].evaluate(newSolution)
@@ -195,7 +200,7 @@ class MOEAD(Algorithm):
 
                         # update population solution for this sub problem
                         self.population[j] = newSolution
-                       
+
                         improvment = True
 
                 # add new solution if improvment is idenfity
@@ -230,11 +235,11 @@ class MOEAD(Algorithm):
         macop_progress(self.getGlobalEvaluation(),
                        self.getGlobalMaxEvaluation())
 
-        logging.info("-- %s evaluation %s of %s (%s%%)" %
-                     (type(self).__name__, self.numberOfEvaluations,
-                      self.maxEvaluations, "{0:.2f}".format(
-                          (self.numberOfEvaluations) / self.maxEvaluations *
-                          100.)))
+        logging.info(
+            "-- %s evaluation %s of %s (%s%%)" %
+            (type(self).__name__, self.numberOfEvaluations,
+             self.maxEvaluations, "{0:.2f}".format(
+                 (self.numberOfEvaluations) / self.maxEvaluations * 100.)))
 
     def setNeighbors(self):
 
@@ -262,7 +267,6 @@ class MOEAD(Algorithm):
             for i in range(self.mu - self.T, self.mu):
                 self.neighbors[direction].append(i)
 
-
     def updateRefPoint(self, _solution):
 
         if self.maximise:
@@ -280,7 +284,7 @@ class MOEAD(Algorithm):
         indexes = []
         nObjectives = len(self.evaluator)
         nSolutions = len(_population)
-        
+
         # find dominated solution
         for i in range(nSolutions):
             for j in range(nSolutions):
@@ -310,25 +314,26 @@ class MOEAD(Algorithm):
 
         return paFront
 
-
     def end(self):
         """Display end message into `run` method
         """
 
-        print(macop_text('({}) Found after {} evaluations'.format(type(self).__name__, self.numberOfEvaluations)))
-        
+        print(
+            macop_text('({}) Found after {} evaluations'.format(
+                type(self).__name__, self.numberOfEvaluations)))
+
         for i, solution in enumerate(self.pfPop):
             print('  - [{}] {} : {}'.format(i, solution.scores, solution))
 
         print(macop_line())
 
     def information(self):
-        
+
         logging.info("-- Pareto front :")
 
         for i, solution in enumerate(self.pfPop):
             logging.info("-- %s] SCORE %s - %s" %
-                        (i, solution.scores, solution))
+                         (i, solution.scores, solution))
 
     def __str__(self):
         return "%s using %s" % (type(self).__name__, type(

+ 3 - 3
macop/algorithms/multi/MOSubProblem.py

@@ -70,12 +70,12 @@ class MOSubProblem(Algorithm):
 
             # stop algorithm if necessary
             if self.stop():
-                    break
+                break
 
             logging.info("---- Current %s - SCORE %s" %
-                            (newSolution, newSolution.fitness()))
+                         (newSolution, newSolution.fitness()))
 
             logging.info("End of %s, best solution found %s" %
-                        (type(self).__name__, self.bestSolution))
+                         (type(self).__name__, self.bestSolution))
 
         return self.bestSolution

+ 10 - 7
macop/callbacks/MultiCheckpoint.py

@@ -35,7 +35,7 @@ class MultiCheckpoint(Callback):
             logging.info("Checkpoint is done into " + self.filepath)
 
             with open(self.filepath, 'w') as f:
-                        
+
                 for solution in population:
                     solutionData = ""
                     solutionSize = len(solution.data)
@@ -52,7 +52,7 @@ class MultiCheckpoint(Callback):
                         line += str(solution.scores[i]) + ';'
 
                     line += solutionData + ';\n'
-                    
+
                     f.write(line)
 
     def load(self):
@@ -68,7 +68,7 @@ class MultiCheckpoint(Callback):
                 for i, line in enumerate(f.readlines()):
 
                     data = line.replace(';\n', '').split(';')
-                
+
                     # only the first time
                     if i == 0:
                         # get evaluation  information
@@ -80,19 +80,22 @@ class MultiCheckpoint(Callback):
                             self.algo.numberOfEvaluations = globalEvaluation
 
                     nObjectives = len(self.algo.evaluator)
-                    scores = [ float(s) for s in data[1:nObjectives + 1] ]
+                    scores = [float(s) for s in data[1:nObjectives + 1]]
 
                     # get best solution data information
                     solutionData = list(map(int, data[-1].split(' ')))
-                        
+
                     self.algo.population[i].data = np.array(solutionData)
                     self.algo.population[i].scores = scores
 
                     self.algo.pfPop[i] = self.algo.population[i]
 
             print(macop_line())
-            print(macop_text('Load of available population from `{}`'.format(self.filepath)))
-            print(macop_text('Restart algorithm from evaluation {}.'.format(
+            print(
+                macop_text('Load of available population from `{}`'.format(
+                    self.filepath)))
+            print(
+                macop_text('Restart algorithm from evaluation {}.'.format(
                     self.algo.numberOfEvaluations)))
 
         else:

+ 17 - 8
macop/callbacks/ParetoCheckpoint.py

@@ -17,6 +17,7 @@ for loader, module_name, is_pkg in pkgutil.walk_packages(
     _module = loader.find_module(module_name).load_module(module_name)
     globals()[module_name] = _module
 
+
 class ParetoCheckpoint(Callback):
     """
     Pareto checkpoint is used for loading previous computations and start again after loading checkpoint
@@ -41,7 +42,7 @@ class ParetoCheckpoint(Callback):
             logging.info("Checkpoint is done into " + self.filepath)
 
             with open(self.filepath, 'w') as f:
-                        
+
                 for solution in pfPop:
                     solutionData = ""
                     solutionSize = len(solution.data)
@@ -58,7 +59,7 @@ class ParetoCheckpoint(Callback):
                         line += str(solution.scores[i]) + ';'
 
                     line += solutionData + ';\n'
-                    
+
                     f.write(line)
 
     def load(self):
@@ -69,7 +70,7 @@ class ParetoCheckpoint(Callback):
 
             logging.info('Load best solution from last checkpoint')
             with open(self.filepath) as f:
-                
+
                 # reinit pf population
                 self.algo.pfPop = []
 
@@ -80,22 +81,30 @@ class ParetoCheckpoint(Callback):
                 for line in f.readlines():
 
                     data = line.replace(';\n', '').split(';')
-                
+
                     nObjectives = len(self.algo.evaluator)
-                    scores = [ float(s) for s in data[0:nObjectives] ]
+                    scores = [float(s) for s in data[0:nObjectives]]
 
                     # get best solution data information
                     solutionData = list(map(int, data[-1].split(' ')))
 
-                    newSolution = getattr(globals()['macop.solutions.' + class_name], class_name)(solutionData, len(solutionData))
+                    newSolution = getattr(
+                        globals()['macop.solutions.' + class_name],
+                        class_name)(solutionData, len(solutionData))
                     newSolution.scores = scores
 
                     self.algo.pfPop.append(newSolution)
 
-            print(macop_text('Load of available pareto front backup from `{}`'.format(self.filepath)))
+            print(
+                macop_text(
+                    'Load of available pareto front backup from `{}`'.format(
+                        self.filepath)))
 
         else:
-            print(macop_text('No pareto front found... Start running algorithm with new pareto front population.'))
+            print(
+                macop_text(
+                    'No pareto front found... Start running algorithm with new pareto front population.'
+                ))
             logging.info("No pareto front backup used...")
 
         print(macop_line())

+ 4 - 2
macop/operators/policies/UCBPolicy.py

@@ -74,9 +74,11 @@ class UCBPolicy(Policy):
 
         # compute fitness improvment rate
         if self.algo.maximise:
-            fir =  (newSolution.fitness() - _solution.fitness()) / _solution.fitness()
+            fir = (newSolution.fitness() -
+                   _solution.fitness()) / _solution.fitness()
         else:
-            fir = (_solution.fitness() - newSolution.fitness()) / _solution.fitness()
+            fir = (_solution.fitness() -
+                   newSolution.fitness()) / _solution.fitness()
 
         if fir > 0:
             operator_index = self.operators.index(operator)

+ 1 - 1
setup.py

@@ -23,7 +23,7 @@ class TestCommand(distutils.command.check.check):
 
 setup(
     name='macop',
-    version='0.1.6',
+    version='0.2.0',
     description='Minimalist And Customizable Optimization Package',
     long_description=open('README.md').read(),
     long_description_content_type='text/markdown',