bugfix
[imago.git] / pso.py
diff --git a/pso.py b/pso.py
index 9fdee2d..9149167 100644 (file)
--- a/pso.py
+++ b/pso.py
@@ -4,9 +4,9 @@ import random
 import multiprocessing
 from functools import partial
 
-def particle(dimension, bound, func_d):
+def particle(dimension, bound, v_max, func_d):
     position = [2 * bound * random.random() - bound for _ in xrange(dimension)]
-    velocity = [2 * bound * random.random() - bound for _ in xrange(dimension)]
+    velocity = [2 * v_max * random.random() - v_max for _ in xrange(dimension)]
     value = func_d(*position)
     return value, position, velocity, value, position
 
@@ -26,11 +26,13 @@ def move(particle, omega, phi_p, phi_g, v_max, global_best, func_d):
 
 def optimize(dimension, boundary, function_d, n_parts, n_turns):
     pool = multiprocessing.Pool(None)
-    particles = [particle(dimension, boundary, function_d)
+    v_max = 30.
+    particles = [particle(dimension, boundary, v_max, function_d)
                  for _ in xrange(n_parts)]
     gl_best = max(particles)
     for _ in xrange(n_turns):
-        move_p = partial(move, omega=0.9, phi_p=0.9, phi_g=0.2, v_max=20.,
+        move_p = partial(move, 
+                         omega=0.98, phi_p=2.75, phi_g=3., v_max=v_max,
                          global_best=gl_best[1], func_d=function_d)
         particles = pool.map(move_p, particles)
         gl_best = max(max(particles), gl_best)