Explorar el Código

Merge branch 'release/v0.1.6'

Jérôme BUISINE hace 3 años
padre
commit
320baeacd2
Se han modificado 85 ficheros con 1876 adiciones y 327 borrados
  1. 1 1
      README.md
  2. BIN
      docs/build/doctrees/description.doctree
  3. BIN
      docs/build/doctrees/environment.pickle
  4. BIN
      docs/build/doctrees/examples.doctree
  5. BIN
      docs/build/doctrees/macop.doctree
  6. BIN
      docs/build/doctrees/macop/macop.algorithms.Algorithm.doctree
  7. BIN
      docs/build/doctrees/macop/macop.operators.crossovers.SimpleCrossover.doctree
  8. BIN
      docs/build/doctrees/macop/macop.operators.policies.RandomPolicy.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. 31 3
      docs/build/html/_modules/macop/algorithms/Algorithm.html
  13. 3 2
      docs/build/html/_modules/macop/algorithms/IteratedLocalSearch.html
  14. 2 2
      docs/build/html/_modules/macop/algorithms/LocalSearch.html
  15. 15 4
      docs/build/html/_modules/macop/checkpoints/BasicCheckpoint.html
  16. 2 2
      docs/build/html/_modules/macop/checkpoints/Checkpoint.html
  17. 7 3
      docs/build/html/_modules/macop/evaluators/EvaluatorExample.html
  18. 2 2
      docs/build/html/_modules/macop/operators/Operator.html
  19. 2 2
      docs/build/html/_modules/macop/operators/crossovers/Crossover.html
  20. 11 6
      docs/build/html/_modules/macop/operators/crossovers/RandomSplitCrossover.html
  21. 14 8
      docs/build/html/_modules/macop/operators/crossovers/SimpleCrossover.html
  22. 2 2
      docs/build/html/_modules/macop/operators/mutators/Mutation.html
  23. 11 5
      docs/build/html/_modules/macop/operators/mutators/SimpleBinaryMutation.html
  24. 11 5
      docs/build/html/_modules/macop/operators/mutators/SimpleMutation.html
  25. 2 5
      docs/build/html/_modules/macop/operators/policies/Policy.html
  26. 3 3
      docs/build/html/_modules/macop/operators/policies/RandomPolicy.html
  27. 280 0
      docs/build/html/_modules/macop/operators/policies/UCBPolicy.html
  28. 2 2
      docs/build/html/_modules/macop/solutions/BinarySolution.html
  29. 2 2
      docs/build/html/_modules/macop/solutions/CombinatoryIntegerSolution.html
  30. 2 2
      docs/build/html/_modules/macop/solutions/IntegerSolution.html
  31. 0 50
      docs/build/html/_sources/description.rst.txt
  32. 246 4
      docs/build/html/_sources/examples.rst.txt
  33. 1 0
      docs/build/html/_sources/macop.rst.txt
  34. 22 0
      docs/build/html/_sources/macop/macop.operators.policies.UCBPolicy.rst.txt
  35. 1 1
      docs/build/html/_static/documentation_options.js
  36. 2 2
      docs/build/html/contributing.html
  37. 2 50
      docs/build/html/description.html
  38. 233 8
      docs/build/html/examples.html
  39. 29 5
      docs/build/html/genindex.html
  40. 2 2
      docs/build/html/index.html
  41. 8 4
      docs/build/html/macop.html
  42. 19 2
      docs/build/html/macop/macop.algorithms.Algorithm.html
  43. 2 2
      docs/build/html/macop/macop.algorithms.IteratedLocalSearch.html
  44. 2 2
      docs/build/html/macop/macop.algorithms.LocalSearch.html
  45. 2 2
      docs/build/html/macop/macop.checkpoints.BasicCheckpoint.html
  46. 2 2
      docs/build/html/macop/macop.checkpoints.Checkpoint.html
  47. 2 2
      docs/build/html/macop/macop.evaluators.EvaluatorExample.html
  48. 5 4
      docs/build/html/macop/macop.operators.Operator.html
  49. 3 2
      docs/build/html/macop/macop.operators.crossovers.Crossover.html
  50. 3 2
      docs/build/html/macop/macop.operators.crossovers.RandomSplitCrossover.html
  51. 4 3
      docs/build/html/macop/macop.operators.crossovers.SimpleCrossover.html
  52. 3 2
      docs/build/html/macop/macop.operators.mutators.Mutation.html
  53. 3 2
      docs/build/html/macop/macop.operators.mutators.SimpleBinaryMutation.html
  54. 3 2
      docs/build/html/macop/macop.operators.mutators.SimpleMutation.html
  55. 3 2
      docs/build/html/macop/macop.operators.policies.Policy.html
  56. 6 5
      docs/build/html/macop/macop.operators.policies.RandomPolicy.html
  57. 305 0
      docs/build/html/macop/macop.operators.policies.UCBPolicy.html
  58. 2 2
      docs/build/html/macop/macop.solutions.BinarySolution.html
  59. 2 2
      docs/build/html/macop/macop.solutions.CombinatoryIntegerSolution.html
  60. 2 2
      docs/build/html/macop/macop.solutions.IntegerSolution.html
  61. 2 2
      docs/build/html/macop/macop.solutions.Solution.html
  62. BIN
      docs/build/html/objects.inv
  63. 7 2
      docs/build/html/py-modindex.html
  64. 2 2
      docs/build/html/search.html
  65. 1 1
      docs/build/html/searchindex.js
  66. 2 2
      docs/source/conf.py
  67. 0 50
      docs/source/description.rst
  68. 246 4
      docs/source/examples.rst
  69. 1 0
      docs/source/macop.rst
  70. 22 0
      docs/source/macop/macop.operators.policies.UCBPolicy.rst
  71. 34 7
      mainExample.py
  72. 29 1
      macop/algorithms/Algorithm.py
  73. 1 0
      macop/algorithms/IteratedLocalSearch.py
  74. 12 1
      macop/checkpoints/BasicCheckpoint.py
  75. 5 1
      macop/evaluators/EvaluatorExample.py
  76. 9 4
      macop/operators/crossovers/RandomSplitCrossover.py
  77. 12 6
      macop/operators/crossovers/SimpleCrossover.py
  78. 9 3
      macop/operators/mutators/SimpleBinaryMutation.py
  79. 9 3
      macop/operators/mutators/SimpleMutation.py
  80. 0 3
      macop/operators/policies/Policy.py
  81. 1 1
      macop/operators/policies/RandomPolicy.py
  82. 85 0
      macop/operators/policies/UCBPolicy.py
  83. 0 0
      macop/utils/__init__.py
  84. 57 0
      macop/utils/color.py
  85. 2 2
      setup.py

+ 1 - 1
README.md

@@ -23,7 +23,7 @@
 
 ## How to use ?
 
-You can see an example of use in the `mainExample.py` python file.
+You can see an example of use in the `knapsackExample.py` python file.
 
 Fully documentation of package with examples is also [available](https://jbuisine.github.io/macop). 
 

BIN
docs/build/doctrees/description.doctree


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.operators.crossovers.SimpleCrossover.doctree


BIN
docs/build/doctrees/macop/macop.operators.policies.RandomPolicy.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: 4e8bf07509b52fff9583ca0872b8a0a1
+config: 54d95ec75d6af839655a8ba659c5eaa3
 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.5 documentation</title>
+  <title>Overview: module code &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -164,6 +164,7 @@
 <li><a href="macop/operators/mutators/SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li><a href="macop/operators/policies/Policy.html">macop.operators.policies.Policy</a></li>
 <li><a href="macop/operators/policies/RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li><a href="macop/operators/policies/UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li><a href="macop/solutions/BinarySolution.html">macop.solutions.BinarySolution</a></li>
 <li><a href="macop/solutions/CombinatoryIntegerSolution.html">macop.solutions.CombinatoryIntegerSolution</a></li>
 <li><a href="macop/solutions/IntegerSolution.html">macop.solutions.IntegerSolution</a></li>

+ 31 - 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.5 documentation</title>
+  <title>macop.algorithms.Algorithm &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -156,6 +156,7 @@
 
 <span class="c1"># main imports</span>
 <span class="kn">import</span> <span class="nn">logging</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="p">,</span> <span class="n">macop_progress</span>
 
 
 <span class="c1"># Generic algorithm class</span>
@@ -227,7 +228,10 @@
                 <span class="s2">&quot;Need to `addCheckpoint` or `setCheckpoint` is you want to use this process&quot;</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="s1">&#39;Checkpoint loading is called&#39;</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;Checkpoint found from `</span><span class="si">{}</span><span class="s1">` file.&#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">checkpoint</span><span class="o">.</span><span class="n">filepath</span><span class="p">)))</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">checkpoint</span><span class="o">.</span><span class="n">load</span><span class="p">()</span></div>
 
 <div class="viewcode-block" id="Algorithm.initRun"><a class="viewcode-back" href="../../../macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.initRun">[docs]</a>    <span class="k">def</span> <span class="nf">initRun</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -275,6 +279,18 @@
 
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">numberOfEvaluations</span></div>
 
+<div class="viewcode-block" id="Algorithm.getGlobalMaxEvaluation"><a class="viewcode-back" href="../../../macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.getGlobalMaxEvaluation">[docs]</a>    <span class="k">def</span> <span class="nf">getGlobalMaxEvaluation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Get the global max number of evaluation (if inner algorithm)</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">            {int} -- current global max number of evaluation</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">maxEvaluations</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxEvaluations</span></div>
+
 <div class="viewcode-block" id="Algorithm.stop"><a class="viewcode-back" href="../../../macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Global stopping criteria (check for inner algorithm too)</span>
@@ -371,12 +387,24 @@
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">checkpoint</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">checkpoint</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
 
+        <span class="n">macop_progress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">getGlobalEvaluation</span><span class="p">(),</span>
+                       <span class="bp">self</span><span class="o">.</span><span class="n">getGlobalMaxEvaluation</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;-- </span><span class="si">%s</span><span class="s2"> evaluation </span><span class="si">%s</span><span class="s2"> of </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s%%</span><span class="s2">) - BEST SCORE </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span>
                      <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numberOfEvaluations</span><span class="p">,</span>
                       <span class="bp">self</span><span class="o">.</span><span class="n">maxEvaluations</span><span class="p">,</span> <span class="s2">&quot;</span><span class="si">{0:.2f}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
                           <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">numberOfEvaluations</span><span class="p">)</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxEvaluations</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">bestSolution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()))</span></div>
 
+<div class="viewcode-block" id="Algorithm.end"><a class="viewcode-back" href="../../../macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.end">[docs]</a>    <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Display end message into `run` method</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">print</span><span class="p">(</span>
+            <span class="n">macop_text</span><span class="p">(</span><span class="s1">&#39;(</span><span class="si">{}</span><span class="s1">) Found after </span><span class="si">{}</span><span class="s1"> evaluations =&gt; </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="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numberOfEvaluations</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">bestSolution</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>
+
     <span class="k">def</span> <span class="nf">information</span><span class="p">(</span><span class="bp">self</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;-- Best </span><span class="si">%s</span><span class="s2"> - SCORE </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span>
                      <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bestSolution</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">bestSolution</span><span class="o">.</span><span class="n">fitness</span><span class="p">()))</span>

+ 3 - 2
docs/build/html/_modules/macop/algorithms/IteratedLocalSearch.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.algorithms.IteratedLocalSearch &mdash; macop v0.1.5 documentation</title>
+  <title>macop.algorithms.IteratedLocalSearch &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -228,6 +228,7 @@
         <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;End of </span><span class="si">%s</span><span class="s2">, best solution found </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span>
                      <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">bestSolution</span><span class="p">))</span>
 
+        <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">()</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">bestSolution</span></div></div>
 </pre></div>
 

+ 2 - 2
docs/build/html/_modules/macop/algorithms/LocalSearch.html

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

+ 15 - 4
docs/build/html/_modules/macop/checkpoints/BasicCheckpoint.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>macop.checkpoints.BasicCheckpoint &mdash; macop v0.1.5 documentation</title>
+  <title>macop.checkpoints.BasicCheckpoint &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -161,6 +161,7 @@
 
 <span class="c1"># module imports</span>
 <span class="kn">from</span> <span class="nn">.Checkpoint</span> <span class="kn">import</span> <span class="n">Checkpoint</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>
 
 
 <div class="viewcode-block" id="BasicCheckpoint"><a class="viewcode-back" href="../../../macop/macop.checkpoints.BasicCheckpoint.html#macop.checkpoints.BasicCheckpoint.BasicCheckpoint">[docs]</a><span class="k">class</span> <span class="nc">BasicCheckpoint</span><span class="p">(</span><span class="n">Checkpoint</span><span class="p">):</span>
@@ -237,10 +238,20 @@
 
                 <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="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>
+
         <span class="k">else</span><span class="p">:</span>
-            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;No backup found... Start running&#39;</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 backup found... Start running algorithm from evaluation 0.&#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;Can&#39;t load backup... Backup filepath not valid in Checkpoint&quot;</span><span class="p">)</span></div></div>
+                <span class="s2">&quot;Can&#39;t load backup... Backup filepath not valid in Checkpoint&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>

+ 2 - 2
docs/build/html/_modules/macop/checkpoints/Checkpoint.html

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

+ 7 - 3
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.5 documentation</title>
+  <title>macop.evaluators.EvaluatorExample &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -154,6 +154,10 @@
 <span></span><span class="sd">&quot;&quot;&quot;Python evaluator function example</span>
 <span class="sd">&quot;&quot;&quot;</span>
 
+<span class="kn">import</span> <span class="nn">random</span>
+
+<span class="n">elements_score</span> <span class="o">=</span> <span class="p">[</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">)]</span>
+
 
 <span class="c1"># evaluator example</span>
 <div class="viewcode-block" id="evaluatorExample"><a class="viewcode-back" href="../../../macop/macop.evaluators.EvaluatorExample.html#macop.evaluators.EvaluatorExample.evaluatorExample">[docs]</a><span class="k">def</span> <span class="nf">evaluatorExample</span><span class="p">(</span><span class="n">_solution</span><span class="p">):</span>
@@ -168,7 +172,7 @@
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="n">fitness</span> <span class="o">=</span> <span class="mi">0</span>
     <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">_solution</span><span class="o">.</span><span class="n">data</span><span class="p">):</span>
-        <span class="n">fitness</span> <span class="o">=</span> <span class="n">fitness</span> <span class="o">+</span> <span class="p">(</span><span class="n">elem</span> <span class="o">*</span> <span class="n">index</span><span class="p">)</span>
+        <span class="n">fitness</span> <span class="o">+=</span> <span class="n">elements_score</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">*</span> <span class="n">elem</span>
 
     <span class="k">return</span> <span class="n">fitness</span></div>
 </pre></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.5 documentation</title>
+  <title>macop.operators.Operator &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>macop.operators.crossovers.Crossover &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           

+ 11 - 6
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.5 documentation</title>
+  <title>macop.operators.crossovers.RandomSplitCrossover &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -156,13 +156,16 @@
 <span class="c1"># main imports</span>
 <span class="kn">import</span> <span class="nn">random</span>
 <span class="kn">import</span> <span class="nn">sys</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">.Crossover</span> <span class="kn">import</span> <span class="n">Crossover</span>
 
-<span class="c1"># need to import the specify kind of solution</span>
-<span class="kn">from</span> <span class="nn">...solutions.BinarySolution</span> <span class="kn">import</span> <span class="n">BinarySolution</span>
-<span class="kn">from</span> <span class="nn">...solutions.Solution</span> <span class="kn">import</span> <span class="n">Solution</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="RandomSplitCrossover"><a class="viewcode-back" href="../../../../macop/macop.operators.crossovers.RandomSplitCrossover.html#macop.operators.crossovers.RandomSplitCrossover.RandomSplitCrossover">[docs]</a><span class="k">class</span> <span class="nc">RandomSplitCrossover</span><span class="p">(</span><span class="n">Crossover</span><span class="p">):</span>
@@ -198,7 +201,9 @@
             <span class="n">currentData</span> <span class="o">=</span> <span class="n">secondData</span>
 
         <span class="c1"># create solution of same kind with new data</span>
-        <span class="k">return</span> <span class="nb">globals</span><span class="p">()[</span><span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">](</span><span class="n">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
+        <span class="n">class_name</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
+        <span class="k">return</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">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
 </pre></div>
 
            </div>

+ 14 - 8
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.5 documentation</title>
+  <title>macop.operators.crossovers.SimpleCrossover &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -156,12 +156,16 @@
 <span class="c1"># main imports</span>
 <span class="kn">import</span> <span class="nn">random</span>
 <span class="kn">import</span> <span class="nn">sys</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">.Crossover</span> <span class="kn">import</span> <span class="n">Crossover</span>
 
-<span class="kn">from</span> <span class="nn">...solutions.BinarySolution</span> <span class="kn">import</span> <span class="n">BinarySolution</span>
-<span class="kn">from</span> <span class="nn">...solutions.Solution</span> <span class="kn">import</span> <span class="n">Solution</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="SimpleCrossover"><a class="viewcode-back" href="../../../../macop/macop.operators.crossovers.SimpleCrossover.html#macop.operators.crossovers.SimpleCrossover.SimpleCrossover">[docs]</a><span class="k">class</span> <span class="nc">SimpleCrossover</span><span class="p">(</span><span class="n">Crossover</span><span class="p">):</span>
@@ -170,7 +174,7 @@
 <span class="sd">    Attributes:</span>
 <span class="sd">        kind: {Algorithm} -- specify the kind of operator</span>
 <span class="sd">    &quot;&quot;&quot;</span>
-<div class="viewcode-block" id="SimpleCrossover.apply"><a class="viewcode-back" href="../../../../macop/macop.operators.crossovers.SimpleCrossover.html#macop.operators.crossovers.SimpleCrossover.SimpleCrossover.apply">[docs]</a>    <span class="k">def</span> <span class="nf">apply</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">):</span>
+<div class="viewcode-block" id="SimpleCrossover.apply"><a class="viewcode-back" href="../../../../macop/macop.operators.crossovers.SimpleCrossover.html#macop.operators.crossovers.SimpleCrossover.SimpleCrossover.apply">[docs]</a>    <span class="k">def</span> <span class="nf">apply</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_solution</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;Create new solution based on best solution found and solution passed as parameter</span>
 
 <span class="sd">        Args:</span>
@@ -180,10 +184,10 @@
 <span class="sd">            {Solution} -- new generated solution</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
-        <span class="n">size</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">size</span>
+        <span class="n">size</span> <span class="o">=</span> <span class="n">_solution</span><span class="o">.</span><span class="n">size</span>
 
         <span class="c1"># copy data of solution</span>
-        <span class="n">firstData</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+        <span class="n">firstData</span> <span class="o">=</span> <span class="n">_solution</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
         <span class="c1"># get best solution from current algorithm</span>
         <span class="n">secondData</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="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
 
@@ -198,7 +202,9 @@
             <span class="n">currentData</span> <span class="o">=</span> <span class="n">secondData</span>
 
         <span class="c1"># create solution of same kind with new data</span>
-        <span class="k">return</span> <span class="nb">globals</span><span class="p">()[</span><span class="nb">type</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">](</span><span class="n">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
+        <span class="n">class_name</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
+        <span class="k">return</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">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
 </pre></div>
 
            </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.5 documentation</title>
+  <title>macop.operators.mutators.Mutation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           

+ 11 - 5
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.5 documentation</title>
+  <title>macop.operators.mutators.SimpleBinaryMutation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -156,12 +156,16 @@
 <span class="c1"># main imports</span>
 <span class="kn">import</span> <span class="nn">random</span>
 <span class="kn">import</span> <span class="nn">sys</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">.Mutation</span> <span class="kn">import</span> <span class="n">Mutation</span>
 
-<span class="kn">from</span> <span class="nn">...solutions.BinarySolution</span> <span class="kn">import</span> <span class="n">BinarySolution</span>
-<span class="kn">from</span> <span class="nn">...solutions.Solution</span> <span class="kn">import</span> <span class="n">Solution</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="SimpleBinaryMutation"><a class="viewcode-back" href="../../../../macop/macop.operators.mutators.SimpleBinaryMutation.html#macop.operators.mutators.SimpleBinaryMutation.SimpleBinaryMutation">[docs]</a><span class="k">class</span> <span class="nc">SimpleBinaryMutation</span><span class="p">(</span><span class="n">Mutation</span><span class="p">):</span>
@@ -194,7 +198,9 @@
             <span class="n">currentData</span><span class="p">[</span><span class="n">cell</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
 
         <span class="c1"># create solution of same kind with new data</span>
-        <span class="k">return</span> <span class="nb">globals</span><span class="p">()[</span><span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">](</span><span class="n">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
+        <span class="n">class_name</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
+        <span class="k">return</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">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
 </pre></div>
 
            </div>

+ 11 - 5
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.5 documentation</title>
+  <title>macop.operators.mutators.SimpleMutation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -156,12 +156,16 @@
 <span class="c1"># main imports</span>
 <span class="kn">import</span> <span class="nn">random</span>
 <span class="kn">import</span> <span class="nn">sys</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">.Mutation</span> <span class="kn">import</span> <span class="n">Mutation</span>
 
-<span class="kn">from</span> <span class="nn">...solutions.BinarySolution</span> <span class="kn">import</span> <span class="n">BinarySolution</span>
-<span class="kn">from</span> <span class="nn">...solutions.Solution</span> <span class="kn">import</span> <span class="n">Solution</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="SimpleMutation"><a class="viewcode-back" href="../../../../macop/macop.operators.mutators.SimpleMutation.html#macop.operators.mutators.SimpleMutation.SimpleMutation">[docs]</a><span class="k">class</span> <span class="nc">SimpleMutation</span><span class="p">(</span><span class="n">Mutation</span><span class="p">):</span>
@@ -199,7 +203,9 @@
         <span class="n">currentData</span><span class="p">[</span><span class="n">secondCell</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span>
 
         <span class="c1"># create solution of same kind with new data</span>
-        <span class="k">return</span> <span class="nb">globals</span><span class="p">()[</span><span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">](</span><span class="n">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
+        <span class="n">class_name</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">_solution</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
+        <span class="k">return</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">currentData</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div></div>
 </pre></div>
 
            </div>

+ 2 - 5
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.5 documentation</title>
+  <title>macop.operators.policies.Policy &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -163,8 +163,6 @@
 <span class="sd">    Attributes:</span>
 <span class="sd">        operators: {[Operator]} -- list of selected operators for the algorithm</span>
 <span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="c1"># here you can define your statistical variables for choosing next operator to apply</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="bp">self</span><span class="o">.</span><span class="n">operators</span> <span class="o">=</span> <span class="n">_operators</span>
 
@@ -195,7 +193,6 @@
 
         <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="nb">print</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="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>
 

+ 3 - 3
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.5 documentation</title>
+  <title>macop.operators.policies.RandomPolicy &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -151,7 +151,7 @@
            <div itemprop="articleBody">
             
   <h1>Source code for macop.operators.policies.RandomPolicy</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Policy class implementation which is used for select operator randomly</span>
+<span></span><span class="sd">&quot;&quot;&quot;Policy class implementation which is used for selecting operator randomly</span>
 <span class="sd">&quot;&quot;&quot;</span>
 <span class="c1"># main imports</span>
 <span class="kn">import</span> <span class="nn">random</span>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 280 - 0
docs/build/html/_modules/macop/operators/policies/UCBPolicy.html


+ 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.5 documentation</title>
+  <title>macop.solutions.BinarySolution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>macop.solutions.CombinatoryIntegerSolution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>macop.solutions.IntegerSolution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -58,7 +58,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           

+ 0 - 50
docs/build/html/_sources/description.rst.txt

@@ -19,53 +19,3 @@ Just install package using `pip` Python package manager:
 .. code:: bash
    
    pip install macop
-
-
-How to use ?
-------------
-
-Load all `macop` implemented features:
-
-.. code:: python
-    
-   from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
-   from macop.solutions.BinarySolution import BinarySolution
-   from macop.evaluators.EvaluatorExample import evaluatorExample
-
-   from macop.operators.mutators.SimpleMutation import SimpleMutation
-   from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
-   from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
-   from macop.operators.crossovers.RandomSplitCrossover import RandomSplitCrossover
-
-   from macop.operators.policies.RandomPolicy import RandomPolicy
-
-   from macop.checkpoints.BasicCheckpoint import BasicCheckpoint
-
-   # logging configuration
-   logging.basicConfig(format='%(asctime)s %(message)s', filename='example.log', level=logging.DEBUG)
-
-   # default validator
-   def validator(solution):
-      return True
-
-   # define init random solution
-   def init():
-      return BinarySolution([], 30).random(validator)
-
-   filepath = "checkpoints.csv"
-
-   def main():
-
-      operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
-      policy = RandomPolicy(operators)
-
-      algo = ILS(init, evaluatorExample, operators, policy, validator, True)
-      algo.addCheckpoint(_class=BasicCheckpoint, _every=5, _filepath=filepath)
-
-      bestSol = algo.run(425)
-
-      print("Found ", bestSol)
-
-
-   if __name__ == "__main__":
-      main()

+ 246 - 4
docs/build/html/_sources/examples.rst.txt

@@ -1,13 +1,255 @@
 Some examples
 =====================================
 
-Mono-objective example
+1. Mono-objective
 -----------------------
 
-Available soon...
+In this tutorial, it will introduce the way of running your algorithm quickly.
+First of all we need to define the kind of solution best represent the problem. In this tutorial, we use the well known knapsack problem using 30 objects.
 
+1.1 Problem definition
+~~~~~~~~~~~~~~~~~~~~~~
 
-Multi-objective example
-------------------------
+Hence, we define our problem :
+- value of each component of knapsack
+- weight associated to each of these components (objects)
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score = [ random.randint(1, 20) for _ in range(30) ]
+    elements_weight = [ random.randint(5, 25) for _ in range(30) ]
+
+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 things to fit our algorithm :
+- 1. function which validates or not a solution (based on constraints)
+- 2. function which evaluates the solution (in order to obtain fitness)
+- 3. initialization solution function
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+    from macop.solutions.BinarySolution import BinarySolution
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score = [ random.randint(1, 20) for _ in range(30) ]
+    elements_weight = [ random.randint(2, 5) for _ in range(30) ]
+
+    # 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. function which computes fitness of solution
+    def evaluator(_solution):
+
+        fitness = 0
+        for index, elem in enumerate(_solution.data):
+            fitness += (elements_score[index] * elem)
+
+        return fitness
+
+    # 3. function which here initializes solution ramdomly and check validity of solution
+    def init():
+        return BinarySolution([], 30).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 Before running algorithm
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Before running algorithm we can define a logger to keep track of the all algorithm run.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    import logging
+
+    """
+    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)
+
+We can now instanciate our algorithm. We use the Iterated Local Search in this example. It is mainly used to avoid local optima using multiple local search.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    import logging
+
+    from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
+
+    """
+    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)
+
+The algorithm is now well defined and is ready to run ! But one thing can be done, and it's very interesting to avoir restart from scratch the algorithm run.
+The use of checkpoint is available in `macop`. A `BasicCheckpoint` class let the algorithm save at `every` evaluations the best solution found.
+
+We need to specify the use of checkpoint if we prefer to restart from.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+    
+    import logging
+
+    from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
+    from macop.checkpoints.BasicCheckpoint import BasicCheckpoint
+
+    """
+    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)
+
+    # we specify the checkpoint class directly, the frequency and the path we want to save algorithm evolution
+    algo.addCheckpoint(_class=BasicCheckpoint, _every=5, _filepath='data/checkpoint.csv')
+
+
+In this way, now we can run and obtained the best solution found in `n` evaluations
+
+.. code:: python
+
+    bestSol = algo.run(10000)
+    print('Solution score is {}'.format(evaluator(bestSol)))
+
+2. Multi-objective example
+--------------------------
 
 Available soon...

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

@@ -47,6 +47,7 @@ macop.operators
 
    macop.operators.policies.Policy
    macop.operators.policies.RandomPolicy
+   macop.operators.policies.UCBPolicy
    
    macop.operators.Operator
 

+ 22 - 0
docs/build/html/_sources/macop/macop.operators.policies.UCBPolicy.rst.txt

@@ -0,0 +1,22 @@
+macop.operators.policies.UCBPolicy
+==================================
+
+.. automodule:: macop.operators.policies.UCBPolicy
+
+   
+   
+   
+
+   
+   
+   .. rubric:: Classes
+
+   .. autosummary::
+   
+      UCBPolicy
+   
+   
+
+   
+   
+   

+ 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.5',
+    VERSION: 'v0.1.6',
     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.5 documentation</title>
+  <title>Contributing &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 2 - 50
docs/build/html/description.html


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 233 - 8
docs/build/html/examples.html


+ 29 - 5
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.5 documentation</title>
+  <title>Index &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -207,6 +207,8 @@
         <li><a href="macop/macop.operators.Operator.html#macop.operators.Operator.Operator.apply">(macop.operators.Operator.Operator method)</a>
 </li>
         <li><a href="macop/macop.operators.policies.Policy.html#macop.operators.policies.Policy.Policy.apply">(macop.operators.policies.Policy.Policy method)</a>
+</li>
+        <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.apply">(macop.operators.policies.UCBPolicy.UCBPolicy method)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -235,6 +237,8 @@
 <h2 id="C">C</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.C">C (macop.operators.policies.UCBPolicy.UCBPolicy attribute)</a>
+</li>
       <li><a href="macop/macop.checkpoints.Checkpoint.html#macop.checkpoints.Checkpoint.Checkpoint">Checkpoint (class in macop.checkpoints.Checkpoint)</a>
 </li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.checkpoint">checkpoint (macop.algorithms.Algorithm.Algorithm attribute)</a>
@@ -279,6 +283,8 @@
 <h2 id="E">E</h2>
 <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.end">end() (macop.algorithms.Algorithm.Algorithm method)</a>
+</li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.evaluate">evaluate() (macop.algorithms.Algorithm.Algorithm method)</a>
 </li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.evaluator">evaluator (macop.algorithms.Algorithm.Algorithm attribute)</a>
@@ -318,6 +324,10 @@
 <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.getGlobalEvaluation">getGlobalEvaluation() (macop.algorithms.Algorithm.Algorithm method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.getGlobalMaxEvaluation">getGlobalMaxEvaluation() (macop.algorithms.Algorithm.Algorithm method)</a>
 </li>
   </ul></td>
 </tr></table>
@@ -413,15 +423,17 @@
 </li>
       <li><a href="macop/macop.operators.mutators.SimpleBinaryMutation.html#module-macop.operators.mutators.SimpleBinaryMutation">macop.operators.mutators.SimpleBinaryMutation (module)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.operators.mutators.SimpleMutation.html#module-macop.operators.mutators.SimpleMutation">macop.operators.mutators.SimpleMutation (module)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.operators.Operator.html#module-macop.operators.Operator">macop.operators.Operator (module)</a>
 </li>
       <li><a href="macop/macop.operators.policies.Policy.html#module-macop.operators.policies.Policy">macop.operators.policies.Policy (module)</a>
 </li>
       <li><a href="macop/macop.operators.policies.RandomPolicy.html#module-macop.operators.policies.RandomPolicy">macop.operators.policies.RandomPolicy (module)</a>
+</li>
+      <li><a href="macop/macop.operators.policies.UCBPolicy.html#module-macop.operators.policies.UCBPolicy">macop.operators.policies.UCBPolicy (module)</a>
 </li>
       <li><a href="macop/macop.solutions.BinarySolution.html#module-macop.solutions.BinarySolution">macop.solutions.BinarySolution (module)</a>
 </li>
@@ -447,6 +459,8 @@
 <h2 id="O">O</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.occurences">occurences (macop.operators.policies.UCBPolicy.UCBPolicy attribute)</a>
+</li>
       <li><a href="macop/macop.operators.Operator.html#macop.operators.Operator.Operator">Operator (class in macop.operators.Operator)</a>
 </li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.operators">operators (macop.algorithms.Algorithm.Algorithm attribute)</a>
@@ -459,6 +473,8 @@
         <li><a href="macop/macop.operators.policies.Policy.html#macop.operators.policies.Policy.Policy.operators">(macop.operators.policies.Policy.Policy attribute)</a>
 </li>
         <li><a href="macop/macop.operators.policies.RandomPolicy.html#macop.operators.policies.RandomPolicy.RandomPolicy.operators">(macop.operators.policies.RandomPolicy.RandomPolicy attribute)</a>
+</li>
+        <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.operators">(macop.operators.policies.UCBPolicy.UCBPolicy attribute)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -500,10 +516,12 @@
       <li><a href="macop/macop.operators.policies.RandomPolicy.html#macop.operators.policies.RandomPolicy.RandomPolicy">RandomPolicy (class in macop.operators.policies.RandomPolicy)</a>
 </li>
       <li><a href="macop/macop.operators.crossovers.RandomSplitCrossover.html#macop.operators.crossovers.RandomSplitCrossover.RandomSplitCrossover">RandomSplitCrossover (class in macop.operators.crossovers.RandomSplitCrossover)</a>
+</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.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.resume">resume() (macop.algorithms.Algorithm.Algorithm method)</a>
+      <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.rewards">rewards (macop.operators.policies.UCBPolicy.UCBPolicy attribute)</a>
 </li>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.run">run() (macop.algorithms.Algorithm.Algorithm method)</a>
 
@@ -535,6 +553,8 @@
 
       <ul>
         <li><a href="macop/macop.operators.policies.RandomPolicy.html#macop.operators.policies.RandomPolicy.RandomPolicy.select">(macop.operators.policies.RandomPolicy.RandomPolicy method)</a>
+</li>
+        <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy.select">(macop.operators.policies.UCBPolicy.UCBPolicy method)</a>
 </li>
       </ul></li>
       <li><a href="macop/macop.operators.Operator.html#macop.operators.Operator.Operator.setAlgo">setAlgo() (macop.operators.Operator.Operator method)</a>
@@ -568,6 +588,10 @@
 
 <h2 id="U">U</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="macop/macop.operators.policies.UCBPolicy.html#macop.operators.policies.UCBPolicy.UCBPolicy">UCBPolicy (class in macop.operators.policies.UCBPolicy)</a>
+</li>
+  </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="macop/macop.algorithms.Algorithm.html#macop.algorithms.Algorithm.Algorithm.update">update() (macop.algorithms.Algorithm.Algorithm method)</a>
 </li>

+ 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.5 documentation</title>
+  <title>Minimalist And Customizable Optimization Package &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>Documentation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -113,6 +113,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop/macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop/macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>
@@ -279,9 +280,12 @@
 <td><p>Abstract class which is used for applying strategy when selecting and applying operator</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="macop/macop.operators.policies.RandomPolicy.html#module-macop.operators.policies.RandomPolicy" title="macop.operators.policies.RandomPolicy"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.operators.policies.RandomPolicy</span></code></a></p></td>
-<td><p>Policy class implementation which is used for select operator randomly</p></td>
+<td><p>Policy class implementation which is used for selecting operator randomly</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="macop/macop.operators.Operator.html#module-macop.operators.Operator" title="macop.operators.Operator"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.operators.Operator</span></code></a></p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="macop/macop.operators.policies.UCBPolicy.html#module-macop.operators.policies.UCBPolicy" title="macop.operators.policies.UCBPolicy"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.operators.policies.UCBPolicy</span></code></a></p></td>
+<td><p>Policy class implementation which is used for selecting operator using Upper Confidence Bound</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference internal" href="macop/macop.operators.Operator.html#module-macop.operators.Operator" title="macop.operators.Operator"><code class="xref py py-obj docutils literal notranslate"><span class="pre">macop.operators.Operator</span></code></a></p></td>
 <td><p>Abstract Operator class</p></td>
 </tr>
 </tbody>

+ 19 - 2
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.5 documentation</title>
+  <title>macop.algorithms.Algorithm &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -265,6 +265,12 @@
 </dl>
 </dd></dl>
 
+<dl class="method">
+<dt id="macop.algorithms.Algorithm.Algorithm.end">
+<code class="sig-name descname">end</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/macop/algorithms/Algorithm.html#Algorithm.end"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#macop.algorithms.Algorithm.Algorithm.end" title="Permalink to this definition">¶</a></dt>
+<dd><p>Display end message into <cite>run</cite> method</p>
+</dd></dl>
+
 <dl class="method">
 <dt id="macop.algorithms.Algorithm.Algorithm.evaluate">
 <code class="sig-name descname">evaluate</code><span class="sig-paren">(</span><em class="sig-param">_solution</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/macop/algorithms/Algorithm.html#Algorithm.evaluate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#macop.algorithms.Algorithm.Algorithm.evaluate" title="Permalink to this definition">¶</a></dt>
@@ -294,6 +300,17 @@
 </dl>
 </dd></dl>
 
+<dl class="method">
+<dt id="macop.algorithms.Algorithm.Algorithm.getGlobalMaxEvaluation">
+<code class="sig-name descname">getGlobalMaxEvaluation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/macop/algorithms/Algorithm.html#Algorithm.getGlobalMaxEvaluation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#macop.algorithms.Algorithm.Algorithm.getGlobalMaxEvaluation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the global max number of evaluation (if inner algorithm)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>{int} – current global max number of evaluation</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="method">
 <dt id="macop.algorithms.Algorithm.Algorithm.increaseEvaluation">
 <code class="sig-name descname">increaseEvaluation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/macop/algorithms/Algorithm.html#Algorithm.increaseEvaluation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#macop.algorithms.Algorithm.Algorithm.increaseEvaluation" title="Permalink to this definition">¶</a></dt>

+ 2 - 2
docs/build/html/macop/macop.algorithms.IteratedLocalSearch.html

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

+ 2 - 2
docs/build/html/macop/macop.algorithms.LocalSearch.html

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

+ 2 - 2
docs/build/html/macop/macop.checkpoints.BasicCheckpoint.html

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

+ 2 - 2
docs/build/html/macop/macop.checkpoints.Checkpoint.html

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

+ 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.5 documentation</title>
+  <title>macop.evaluators.EvaluatorExample &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           

+ 5 - 4
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.5 documentation</title>
+  <title>macop.operators.Operator &mdash; macop v0.1.6 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.solutions.BinarySolution" href="macop.solutions.BinarySolution.html" />
-    <link rel="prev" title="macop.operators.policies.RandomPolicy" href="macop.operators.policies.RandomPolicy.html" /> 
+    <link rel="prev" title="macop.operators.policies.UCBPolicy" href="macop.operators.policies.UCBPolicy.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3 current"><a class="current reference internal" href="#">macop.operators.Operator</a></li>
 </ul>
 </li>
@@ -248,7 +249,7 @@
         <a href="macop.solutions.BinarySolution.html" class="btn btn-neutral float-right" title="macop.solutions.BinarySolution" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
-        <a href="macop.operators.policies.RandomPolicy.html" class="btn btn-neutral float-left" title="macop.operators.policies.RandomPolicy" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+        <a href="macop.operators.policies.UCBPolicy.html" class="btn btn-neutral float-left" title="macop.operators.policies.UCBPolicy" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
     </div>
   

+ 3 - 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.5 documentation</title>
+  <title>macop.operators.crossovers.Crossover &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>

+ 3 - 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.5 documentation</title>
+  <title>macop.operators.crossovers.RandomSplitCrossover &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>

+ 4 - 3
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.5 documentation</title>
+  <title>macop.operators.crossovers.SimpleCrossover &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>
@@ -204,7 +205,7 @@
 
 <dl class="method">
 <dt id="macop.operators.crossovers.SimpleCrossover.SimpleCrossover.apply">
-<code class="sig-name descname">apply</code><span class="sig-paren">(</span><em class="sig-param">solution</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/macop/operators/crossovers/SimpleCrossover.html#SimpleCrossover.apply"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#macop.operators.crossovers.SimpleCrossover.SimpleCrossover.apply" title="Permalink to this definition">¶</a></dt>
+<code class="sig-name descname">apply</code><span class="sig-paren">(</span><em class="sig-param">_solution</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/macop/operators/crossovers/SimpleCrossover.html#SimpleCrossover.apply"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#macop.operators.crossovers.SimpleCrossover.SimpleCrossover.apply" title="Permalink to this definition">¶</a></dt>
 <dd><p>Create new solution based on best solution found and solution passed as parameter</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>

+ 3 - 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.5 documentation</title>
+  <title>macop.operators.mutators.Mutation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>

+ 3 - 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.5 documentation</title>
+  <title>macop.operators.mutators.SimpleBinaryMutation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>

+ 3 - 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.5 documentation</title>
+  <title>macop.operators.mutators.SimpleMutation &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3 current"><a class="current reference internal" href="#">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>

+ 3 - 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.5 documentation</title>
+  <title>macop.operators.policies.Policy &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3 current"><a class="current reference internal" href="#">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.RandomPolicy.html">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>

+ 6 - 5
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.5 documentation</title>
+  <title>macop.operators.policies.RandomPolicy &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -35,7 +35,7 @@
   <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="macop.operators.Operator" href="macop.operators.Operator.html" />
+    <link rel="next" title="macop.operators.policies.UCBPolicy" href="macop.operators.policies.UCBPolicy.html" />
     <link rel="prev" title="macop.operators.policies.Policy" href="macop.operators.policies.Policy.html" /> 
 </head>
 
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -101,6 +101,7 @@
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.mutators.SimpleMutation.html">macop.operators.mutators.SimpleMutation</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.Policy.html">macop.operators.policies.Policy</a></li>
 <li class="toctree-l3 current"><a class="current reference internal" href="#">macop.operators.policies.RandomPolicy</a></li>
+<li class="toctree-l3"><a class="reference internal" href="macop.operators.policies.UCBPolicy.html">macop.operators.policies.UCBPolicy</a></li>
 <li class="toctree-l3"><a class="reference internal" href="macop.operators.Operator.html">macop.operators.Operator</a></li>
 </ul>
 </li>
@@ -179,7 +180,7 @@
             
   <div class="section" id="module-macop.operators.policies.RandomPolicy">
 <span id="macop-operators-policies-randompolicy"></span><h1>macop.operators.policies.RandomPolicy<a class="headerlink" href="#module-macop.operators.policies.RandomPolicy" title="Permalink to this headline">¶</a></h1>
-<p>Policy class implementation which is used for select operator randomly</p>
+<p>Policy class implementation which is used for selecting operator randomly</p>
 <p class="rubric">Classes</p>
 <table class="longtable docutils align-default">
 <colgroup>
@@ -228,7 +229,7 @@
   
     <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
       
-        <a href="macop.operators.Operator.html" class="btn btn-neutral float-right" title="macop.operators.Operator" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+        <a href="macop.operators.policies.UCBPolicy.html" class="btn btn-neutral float-right" title="macop.operators.policies.UCBPolicy" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
         <a href="macop.operators.policies.Policy.html" class="btn btn-neutral float-left" title="macop.operators.policies.Policy" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 305 - 0
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.5 documentation</title>
+  <title>macop.solutions.BinarySolution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>macop.solutions.CombinatoryIntegerSolution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>macop.solutions.IntegerSolution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>macop.solutions.Solution &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -60,7 +60,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </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.5 documentation</title>
+  <title>Python Module Index &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -61,7 +61,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           
@@ -243,6 +243,11 @@
        <td>&#160;&#160;&#160;
        <a href="macop/macop.operators.policies.RandomPolicy.html#module-macop.operators.policies.RandomPolicy"><code class="xref">macop.operators.policies.RandomPolicy</code></a></td><td>
        <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="macop/macop.operators.policies.UCBPolicy.html#module-macop.operators.policies.UCBPolicy"><code class="xref">macop.operators.policies.UCBPolicy</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.5 documentation</title>
+  <title>Search &mdash; macop v0.1.6 documentation</title>
   
 
   
@@ -59,7 +59,7 @@
             
             
               <div class="version">
-                0.1.5
+                0.1.6
               </div>
             
           

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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.5'
+version = '0.1.6'
 # The full version, including alpha/beta/rc tags
-release = 'v0.1.5'
+release = 'v0.1.6'
 
 
 # -- General configuration ---------------------------------------------------

+ 0 - 50
docs/source/description.rst

@@ -19,53 +19,3 @@ Just install package using `pip` Python package manager:
 .. code:: bash
    
    pip install macop
-
-
-How to use ?
-------------
-
-Load all `macop` implemented features:
-
-.. code:: python
-    
-   from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
-   from macop.solutions.BinarySolution import BinarySolution
-   from macop.evaluators.EvaluatorExample import evaluatorExample
-
-   from macop.operators.mutators.SimpleMutation import SimpleMutation
-   from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
-   from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
-   from macop.operators.crossovers.RandomSplitCrossover import RandomSplitCrossover
-
-   from macop.operators.policies.RandomPolicy import RandomPolicy
-
-   from macop.checkpoints.BasicCheckpoint import BasicCheckpoint
-
-   # logging configuration
-   logging.basicConfig(format='%(asctime)s %(message)s', filename='example.log', level=logging.DEBUG)
-
-   # default validator
-   def validator(solution):
-      return True
-
-   # define init random solution
-   def init():
-      return BinarySolution([], 30).random(validator)
-
-   filepath = "checkpoints.csv"
-
-   def main():
-
-      operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
-      policy = RandomPolicy(operators)
-
-      algo = ILS(init, evaluatorExample, operators, policy, validator, True)
-      algo.addCheckpoint(_class=BasicCheckpoint, _every=5, _filepath=filepath)
-
-      bestSol = algo.run(425)
-
-      print("Found ", bestSol)
-
-
-   if __name__ == "__main__":
-      main()

+ 246 - 4
docs/source/examples.rst

@@ -1,13 +1,255 @@
 Some examples
 =====================================
 
-Mono-objective example
+1. Mono-objective
 -----------------------
 
-Available soon...
+In this tutorial, it will introduce the way of running your algorithm quickly.
+First of all we need to define the kind of solution best represent the problem. In this tutorial, we use the well known knapsack problem using 30 objects.
 
+1.1 Problem definition
+~~~~~~~~~~~~~~~~~~~~~~
 
-Multi-objective example
-------------------------
+Hence, we define our problem :
+- value of each component of knapsack
+- weight associated to each of these components (objects)
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score = [ random.randint(1, 20) for _ in range(30) ]
+    elements_weight = [ random.randint(5, 25) for _ in range(30) ]
+
+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 things to fit our algorithm :
+- 1. function which validates or not a solution (based on constraints)
+- 2. function which evaluates the solution (in order to obtain fitness)
+- 3. initialization solution function
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    import random
+    from macop.solutions.BinarySolution import BinarySolution
+
+    """
+    Problem definition
+    """
+    random.seed(42)
+
+    elements_score = [ random.randint(1, 20) for _ in range(30) ]
+    elements_weight = [ random.randint(2, 5) for _ in range(30) ]
+
+    # 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. function which computes fitness of solution
+    def evaluator(_solution):
+
+        fitness = 0
+        for index, elem in enumerate(_solution.data):
+            fitness += (elements_score[index] * elem)
+
+        return fitness
+
+    # 3. function which here initializes solution ramdomly and check validity of solution
+    def init():
+        return BinarySolution([], 30).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 Before running algorithm
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Before running algorithm we can define a logger to keep track of the all algorithm run.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    import logging
+
+    """
+    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)
+
+We can now instanciate our algorithm. We use the Iterated Local Search in this example. It is mainly used to avoid local optima using multiple local search.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+
+    import logging
+
+    from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
+
+    """
+    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)
+
+The algorithm is now well defined and is ready to run ! But one thing can be done, and it's very interesting to avoir restart from scratch the algorithm run.
+The use of checkpoint is available in `macop`. A `BasicCheckpoint` class let the algorithm save at `every` evaluations the best solution found.
+
+We need to specify the use of checkpoint if we prefer to restart from.
+
+.. code:: python
+    
+    """
+    imports part
+    """
+    ...
+    
+    import logging
+
+    from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
+    from macop.checkpoints.BasicCheckpoint import BasicCheckpoint
+
+    """
+    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)
+
+    # we specify the checkpoint class directly, the frequency and the path we want to save algorithm evolution
+    algo.addCheckpoint(_class=BasicCheckpoint, _every=5, _filepath='data/checkpoint.csv')
+
+
+In this way, now we can run and obtained the best solution found in `n` evaluations
+
+.. code:: python
+
+    bestSol = algo.run(10000)
+    print('Solution score is {}'.format(evaluator(bestSol)))
+
+2. Multi-objective example
+--------------------------
 
 Available soon...

+ 1 - 0
docs/source/macop.rst

@@ -47,6 +47,7 @@ macop.operators
 
    macop.operators.policies.Policy
    macop.operators.policies.RandomPolicy
+   macop.operators.policies.UCBPolicy
    
    macop.operators.Operator
 

+ 22 - 0
docs/source/macop/macop.operators.policies.UCBPolicy.rst

@@ -0,0 +1,22 @@
+macop.operators.policies.UCBPolicy
+==================================
+
+.. automodule:: macop.operators.policies.UCBPolicy
+
+   
+   
+   
+
+   
+   
+   .. rubric:: Classes
+
+   .. autosummary::
+   
+      UCBPolicy
+   
+   
+
+   
+   
+   

+ 34 - 7
mainExample.py

@@ -1,6 +1,7 @@
 # main imports
 import logging
 import os
+import random
 
 # module imports
 from macop.algorithms.IteratedLocalSearch import IteratedLocalSearch as ILS
@@ -13,6 +14,7 @@ from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
 from macop.operators.crossovers.RandomSplitCrossover import RandomSplitCrossover
 
 from macop.operators.policies.RandomPolicy import RandomPolicy
+from macop.operators.policies.UCBPolicy import UCBPolicy
 
 from macop.checkpoints.BasicCheckpoint import BasicCheckpoint
 
@@ -22,28 +24,53 @@ if not os.path.exists('data'):
 # logging configuration
 logging.basicConfig(format='%(asctime)s %(message)s', filename='data/example.log', level=logging.DEBUG)
 
+random.seed(42)
+
+elements_score = [ random.randint(1, 20) for _ in range(30) ]
+elements_weight = [ random.randint(2, 5) for _ in range(30) ]
+
+def knapsackWeight(_solution):
+
+    weight_sum = 0
+    for index, elem in enumerate(_solution.data):
+        weight_sum += elements_weight[index] * elem
+
+    return weight_sum
+
 # default validator
-def validator(solution):
-    return True
+def validator(_solution):
+
+    if knapsackWeight(_solution) <= 80:
+        return True
+    else:
+        False
 
 # define init random solution
 def init():
     return BinarySolution([], 30).random(validator)
 
+def evaluator(_solution):
+
+    fitness = 0
+    for index, elem in enumerate(_solution.data):
+        fitness += (elements_score[index] * elem)
+
+    return fitness
+
 filepath = "data/checkpoints.csv"
 
 def main():
 
     operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
-    policy = RandomPolicy(operators)
+    policy = UCBPolicy(operators)
 
-    algo = ILS(init, evaluatorExample, operators, policy, validator, True)
+    algo = ILS(init, evaluator, operators, policy, validator, _maximise=True)
     algo.addCheckpoint(_class=BasicCheckpoint, _every=5, _filepath=filepath)
 
-    bestSol = algo.run(425)
-
-    print("Found ", bestSol)
+    bestSol = algo.run(10000)
 
+    print('Solution score is {}'.format(evaluator(bestSol)))
+    print('Solution weigth is {}'.format(knapsackWeight(bestSol)))
 
 if __name__ == "__main__":
     main()

+ 29 - 1
macop/algorithms/Algorithm.py

@@ -3,6 +3,7 @@
 
 # main imports
 import logging
+from ..utils.color import macop_text, macop_line, macop_progress
 
 
 # Generic algorithm class
@@ -74,7 +75,10 @@ class Algorithm():
                 "Need to `addCheckpoint` or `setCheckpoint` is you want to use this process"
             )
         else:
-            print('Checkpoint loading is called')
+            print(macop_line())
+            print(
+                macop_text('Checkpoint found from `{}` file.'.format(
+                    self.checkpoint.filepath)))
             self.checkpoint.load()
 
     def initRun(self):
@@ -122,6 +126,18 @@ class Algorithm():
 
         return self.numberOfEvaluations
 
+    def getGlobalMaxEvaluation(self):
+        """Get the global max number of evaluation (if inner algorithm)
+
+        Returns:
+            {int} -- current global max number of evaluation
+        """
+
+        if self.parent is not None:
+            return self.parent.maxEvaluations
+
+        return self.maxEvaluations
+
     def stop(self):
         """
         Global stopping criteria (check for inner algorithm too)
@@ -218,12 +234,24 @@ class Algorithm():
         if self.checkpoint is not None:
             self.checkpoint.run()
 
+        macop_progress(self.getGlobalEvaluation(),
+                       self.getGlobalMaxEvaluation())
+
         logging.info("-- %s evaluation %s of %s (%s%%) - BEST SCORE %s" %
                      (type(self).__name__, self.numberOfEvaluations,
                       self.maxEvaluations, "{0:.2f}".format(
                           (self.numberOfEvaluations) / self.maxEvaluations *
                           100.), self.bestSolution.fitness()))
 
+    def end(self):
+        """Display end message into `run` method
+        """
+        print(
+            macop_text('({}) Found after {} evaluations => {}'.format(
+                type(self).__name__, self.numberOfEvaluations,
+                self.bestSolution)))
+        print(macop_line())
+
     def information(self):
         logging.info("-- Best %s - SCORE %s" %
                      (self.bestSolution, self.bestSolution.fitness()))

+ 1 - 0
macop/algorithms/IteratedLocalSearch.py

@@ -75,4 +75,5 @@ class IteratedLocalSearch(Algorithm):
         logging.info("End of %s, best solution found %s" %
                      (type(self).__name__, self.bestSolution))
 
+        self.end()
         return self.bestSolution

+ 12 - 1
macop/checkpoints/BasicCheckpoint.py

@@ -8,6 +8,7 @@ import numpy as np
 
 # module imports
 from .Checkpoint import Checkpoint
+from ..utils.color import macop_text, macop_line
 
 
 class BasicCheckpoint(Checkpoint):
@@ -84,7 +85,17 @@ class BasicCheckpoint(Checkpoint):
 
                 self.algo.bestSolution.data = np.array(solutionData)
                 self.algo.bestSolution.score = float(data[2])
+
+            print(
+                macop_text('Restart algorithm from evaluation {}.'.format(
+                    self.algo.numberOfEvaluations)))
+
         else:
-            print('No backup found... Start running')
+            print(
+                macop_text(
+                    'No backup found... Start running algorithm from evaluation 0.'
+                ))
             logging.info(
                 "Can't load backup... Backup filepath not valid in Checkpoint")
+
+        print(macop_line())

+ 5 - 1
macop/evaluators/EvaluatorExample.py

@@ -1,6 +1,10 @@
 """Python evaluator function example
 """
 
+import random
+
+elements_score = [random.randint(1, 20) for _ in range(30)]
+
 
 # evaluator example
 def evaluatorExample(_solution):
@@ -15,6 +19,6 @@ def evaluatorExample(_solution):
     """
     fitness = 0
     for index, elem in enumerate(_solution.data):
-        fitness = fitness + (elem * index)
+        fitness += elements_score[index] * elem
 
     return fitness

+ 9 - 4
macop/operators/crossovers/RandomSplitCrossover.py

@@ -3,13 +3,16 @@
 # main imports
 import random
 import sys
+import pkgutil
 
 # module imports
 from .Crossover import Crossover
 
-# need to import the specify kind of solution
-from ...solutions.BinarySolution import BinarySolution
-from ...solutions.Solution import Solution
+# import all available solutions
+for loader, module_name, is_pkg in pkgutil.walk_packages(
+        path=['macop/solutions'], prefix='macop.solutions.'):
+    _module = loader.find_module(module_name).load_module(module_name)
+    globals()[module_name] = _module
 
 
 class RandomSplitCrossover(Crossover):
@@ -45,4 +48,6 @@ class RandomSplitCrossover(Crossover):
             currentData = secondData
 
         # create solution of same kind with new data
-        return globals()[type(_solution).__name__](currentData, size)
+        class_name = type(_solution).__name__
+        return getattr(globals()['macop.solutions.' + class_name],
+                       class_name)(currentData, size)

+ 12 - 6
macop/operators/crossovers/SimpleCrossover.py

@@ -3,12 +3,16 @@
 # main imports
 import random
 import sys
+import pkgutil
 
 # module imports
 from .Crossover import Crossover
 
-from ...solutions.BinarySolution import BinarySolution
-from ...solutions.Solution import Solution
+# import all available solutions
+for loader, module_name, is_pkg in pkgutil.walk_packages(
+        path=['macop/solutions'], prefix='macop.solutions.'):
+    _module = loader.find_module(module_name).load_module(module_name)
+    globals()[module_name] = _module
 
 
 class SimpleCrossover(Crossover):
@@ -17,7 +21,7 @@ class SimpleCrossover(Crossover):
     Attributes:
         kind: {Algorithm} -- specify the kind of operator
     """
-    def apply(self, solution):
+    def apply(self, _solution):
         """Create new solution based on best solution found and solution passed as parameter
 
         Args:
@@ -27,10 +31,10 @@ class SimpleCrossover(Crossover):
             {Solution} -- new generated solution
         """
 
-        size = solution.size
+        size = _solution.size
 
         # copy data of solution
-        firstData = solution.data.copy()
+        firstData = _solution.data.copy()
         # get best solution from current algorithm
         secondData = self.algo.bestSolution.data.copy()
 
@@ -45,4 +49,6 @@ class SimpleCrossover(Crossover):
             currentData = secondData
 
         # create solution of same kind with new data
-        return globals()[type(solution).__name__](currentData, size)
+        class_name = type(_solution).__name__
+        return getattr(globals()['macop.solutions.' + class_name],
+                       class_name)(currentData, size)

+ 9 - 3
macop/operators/mutators/SimpleBinaryMutation.py

@@ -3,12 +3,16 @@
 # main imports
 import random
 import sys
+import pkgutil
 
 # module imports
 from .Mutation import Mutation
 
-from ...solutions.BinarySolution import BinarySolution
-from ...solutions.Solution import Solution
+# import all available solutions
+for loader, module_name, is_pkg in pkgutil.walk_packages(
+        path=['macop/solutions'], prefix='macop.solutions.'):
+    _module = loader.find_module(module_name).load_module(module_name)
+    globals()[module_name] = _module
 
 
 class SimpleBinaryMutation(Mutation):
@@ -41,4 +45,6 @@ class SimpleBinaryMutation(Mutation):
             currentData[cell] = 1
 
         # create solution of same kind with new data
-        return globals()[type(_solution).__name__](currentData, size)
+        class_name = type(_solution).__name__
+        return getattr(globals()['macop.solutions.' + class_name],
+                       class_name)(currentData, size)

+ 9 - 3
macop/operators/mutators/SimpleMutation.py

@@ -3,12 +3,16 @@
 # main imports
 import random
 import sys
+import pkgutil
 
 # module imports
 from .Mutation import Mutation
 
-from ...solutions.BinarySolution import BinarySolution
-from ...solutions.Solution import Solution
+# import all available solutions
+for loader, module_name, is_pkg in pkgutil.walk_packages(
+        path=['macop/solutions'], prefix='macop.solutions.'):
+    _module = loader.find_module(module_name).load_module(module_name)
+    globals()[module_name] = _module
 
 
 class SimpleMutation(Mutation):
@@ -46,4 +50,6 @@ class SimpleMutation(Mutation):
         currentData[secondCell] = temp
 
         # create solution of same kind with new data
-        return globals()[type(_solution).__name__](currentData, size)
+        class_name = type(_solution).__name__
+        return getattr(globals()['macop.solutions.' + class_name],
+                       class_name)(currentData, size)

+ 0 - 3
macop/operators/policies/Policy.py

@@ -10,8 +10,6 @@ class Policy():
     Attributes:
         operators: {[Operator]} -- list of selected operators for the algorithm
     """
-
-    # here you can define your statistical variables for choosing next operator to apply
     def __init__(self, _operators):
         self.operators = _operators
 
@@ -42,7 +40,6 @@ class Policy():
 
         # compute fitness of new solution
         newSolution.evaluate(self.algo.evaluator)
-        print(newSolution.fitness())
 
         logging.info("---- Obtaining %s" % (_solution))
 

+ 1 - 1
macop/operators/policies/RandomPolicy.py

@@ -1,4 +1,4 @@
-"""Policy class implementation which is used for select operator randomly
+"""Policy class implementation which is used for selecting operator randomly
 """
 # main imports
 import random

+ 85 - 0
macop/operators/policies/UCBPolicy.py

@@ -0,0 +1,85 @@
+"""Policy class implementation which is used for selecting operator using Upper Confidence Bound
+"""
+# main imports
+import logging
+import random
+import math
+
+# module imports
+from .Policy import Policy
+
+
+class UCBPolicy(Policy):
+    """UCB policy class which is used for applying UCB strategy when selecting and applying operator 
+
+    Attributes:
+        operators: {[Operator]} -- list of selected operators for the algorithm
+        C: {float} -- tradeoff between EvE parameter for UCB
+        rewards: {[float]} -- list of summed rewards obtained for each operator
+        occurences: {[int]} -- number of use (selected) of each operator
+    """
+    def __init__(self, _operators, _C=1000.):
+        self.operators = _operators
+        self.rewards = [0. for o in self.operators]
+        self.occurences = [0 for o in self.operators]
+        self.C = _C
+
+    def select(self):
+        """Select randomly the next operator to use
+
+        Returns:
+            {Operator}: the selected operator
+        """
+
+        indices = [i for i, o in enumerate(self.occurences) if o == 0]
+
+        # if operator have at least be used one time
+        if len(indices) == 0:
+
+            ucbValues = []
+            nVisits = sum(self.occurences)
+
+            for i in range(len(self.operators)):
+
+                ucbValue = self.rewards[i] + self.C * math.sqrt(
+                    math.log(nVisits) / self.occurences[i])
+                ucbValues.append(ucbValue)
+
+            return self.operators[ucbValues.index(max(ucbValues))]
+
+        else:
+            return self.operators[random.choice(indices)]
+
+    def apply(self, _solution):
+        """
+        Apply specific operator chosen to create new solution, computes its fitness and returns solution
+        
+        Args:
+            _solution: {Solution} -- the solution to use for generating new solution
+
+        Returns:
+            {Solution} -- new generated solution
+        """
+
+        operator = self.select()
+
+        logging.info("---- Applying %s on %s" %
+                     (type(operator).__name__, _solution))
+
+        # apply operator on solution
+        newSolution = operator.apply(_solution)
+
+        # compute fitness of new solution
+        newSolution.evaluate(self.algo.evaluator)
+
+        # compute reward
+        difference = newSolution.fitness() - _solution.fitness()
+        reward = difference if difference > 0 else 0.
+
+        operator_index = self.operators.index(operator)
+        self.rewards[operator_index] += reward
+        self.occurences[operator_index] += 1
+
+        logging.info("---- Obtaining %s" % (_solution))
+
+        return newSolution

+ 0 - 0
macop/utils/__init__.py


+ 57 - 0
macop/utils/color.py

@@ -0,0 +1,57 @@
+import sys
+
+
+class Colors:
+    ENDC = '\033[m'
+    GREEN = '\033[32m'
+    GREY = '\033[90m'
+
+
+def macop_text(msg):
+    """Display Macop message to user interface
+    """
+    return Colors.GREEN + 'M' + Colors.ENDC + Colors.GREY + 'acop' \
+        + Colors.ENDC + Colors.GREEN + ' :: ' + Colors.ENDC \
+        + Colors.GREY + msg + Colors.ENDC
+
+
+def macop_line():
+    """Macop split line
+    """
+    line = ''
+
+    for i in range(41):
+
+        if i % 2 == 0:
+            line += Colors.GREEN + '----' + Colors.ENDC
+        else:
+            line += Colors.GREY + '----' + Colors.ENDC
+
+    return line
+
+
+def macop_progress(evaluations, max):
+
+    barWidth = 156
+
+    progress = evaluations / float(max)
+
+    output_str = Colors.GREEN + '[' + Colors.ENDC
+    pos = int(barWidth * progress)
+    for i in range(barWidth):
+        if i < pos:
+            output_str = output_str + Colors.GREY + '=' + Colors.ENDC
+        elif i == pos:
+            output_str = output_str + Colors.GREEN + '>' + Colors.ENDC
+        else:
+            output_str = output_str + Colors.GREY + ' ' + Colors.ENDC
+
+    output_str = output_str + Colors.GREEN + '] ' + Colors.ENDC + str(
+        int(progress * 100.0)) + "%\r"
+    print(output_str)
+    sys.stdout.write("\033[F")
+
+    # go to line
+    if progress >= 1.:
+        print()
+        print(macop_line())

+ 2 - 2
setup.py

@@ -23,7 +23,7 @@ class TestCommand(distutils.command.check.check):
 
 setup(
     name='macop',
-    version='0.1.5',
+    version='0.1.6',
     description='Minimalist And Customizable Optimization Package',
     long_description=open('README.md').read(),
     long_description_content_type='text/markdown',
@@ -38,7 +38,7 @@ setup(
     author='Jérôme BUISINE',
     author_email='jerome.buisine@univ-littoral.fr',
     license='MIT',
-    packages=['macop', 'macop.algorithms', 'macop.checkpoints', 'macop.evaluators', 'macop.operators', 'macop.solutions'],
+    packages=['macop', 'macop.algorithms', 'macop.checkpoints', 'macop.evaluators', 'macop.operators', 'macop.solutions', 'macop.utils'],
     install_requires=[
         'numpy',
     ],