Przeglądaj źródła

Add of new solutions

Jérôme BUISINE 4 lat temu
rodzic
commit
673a3e9786

+ 1 - 1
algorithms/Algorithm.py

@@ -97,7 +97,7 @@ class Algorithm():
 
 
     def progress(self):
-        logging.info("-- Evaluation n°%s/%s, %s%%" % (self.numberOfEvaluations, self.maxEvalutations, "{0:.2f}".format((self.numberOfEvaluations) / self.maxEvalutations * 100.)))
+        logging.info("-- Evaluation n°%s of %s, %s%%" % (self.numberOfEvaluations, self.maxEvalutations, "{0:.2f}".format((self.numberOfEvaluations) / self.maxEvalutations * 100.)))
 
 
     def information(self):

+ 3 - 3
algorithms/IteratedLocalSearch.py

@@ -7,7 +7,7 @@ from.LocalSearch import LocalSearch
 
 class IteratedLocalSearch(Algorithm):
 
-    def run(self, _evaluations, _lc_evaluations=100):
+    def run(self, _evaluations, _ls_evaluations=100):
 
         # by default use of mother method to initialize variables
         super().run(_evaluations)
@@ -18,14 +18,14 @@ class IteratedLocalSearch(Algorithm):
         while self.numberOfEvaluations < self.maxEvalutations:
             
             # create and search solution from local search
-            newSolution = ls.run(_lc_evaluations)
+            newSolution = ls.run(_ls_evaluations)
 
             # if better solution than currently, replace it
             if self.isBetter(newSolution):
                 self.bestSolution = newSolution
 
             # increase number of evaluations
-            self.numberOfEvaluations += _lc_evaluations
+            self.numberOfEvaluations += _ls_evaluations
 
             self.progress()
             self.information()            

+ 3 - 3
algorithms/LocalSearch.py

@@ -1,4 +1,5 @@
 # main imports
+import logging
 
 # module imports
 from .Algorithm import Algorithm
@@ -28,13 +29,12 @@ class LocalSearch(Algorithm):
                 self.numberOfEvaluations += 1
 
                 self.progress()
+                self.information()
 
                 # stop algorithm if necessary
                 if self.numberOfEvaluations >= self.maxEvalutations:
                     break
             
-            self.information()
-
         logging.info("End of %s, best solution found %s" % (type(self).__name__, self.bestSolution))
 
-        return self.bestSolution
+        return self.bestSolution

+ 38 - 0
solutions/CombinatoryIntegerSolution.py

@@ -0,0 +1,38 @@
+# main imports
+import numpy as np
+
+# modules imports
+from .Solution import Solution
+
+
+# Solution which stores solution data as combinatory integer array
+class CombinatoryIntegerSolution(Solution):
+
+    def __init__(self, _data, _size):
+        """
+        Initialize data of solution using specific data
+
+        - `data` field is array of integer values
+        - `size` field is the size of array integer values
+        """
+
+        self.data = _data
+        self.size = _size
+
+
+    def random(self, _validator):
+        """
+        Intialize combinatory integer array using size solution data
+
+        Use of validator to generate valid random solution
+        """
+
+        while not self.isValid(_validator):
+            self.data = np.random.shuffle(np.arange(self.size))
+
+        return self
+
+
+    def __str__(self):
+        return "Combinatory integer solution %s of size %s" % (self.data, self.size)
+        

+ 38 - 0
solutions/IntegerSolution.py

@@ -0,0 +1,38 @@
+# main imports
+import numpy as np
+
+# modules imports
+from .Solution import Solution
+
+
+# Solution which stores solution data as integer array
+class IntegerSolution(Solution):
+
+    def __init__(self, _data, _size):
+        """
+        Initialize data of solution using specific data
+
+        - `data` field is array of integer values
+        - `size` field is the size of array integer values
+        """
+
+        self.data = _data
+        self.size = _size
+
+
+    def random(self, _validator):
+        """
+        Intialize integer array using size solution data
+
+        Use of validator to generate valid random solution
+        """
+
+        while not self.isValid(_validator):
+            self.data = np.random.randint(self.size, size=self.size)
+
+        return self
+
+
+    def __str__(self):
+        return "Integer solution %s of size %s" % (self.data, self.size)
+