import multiprocessing
from functools import partial
-def particle(dimension, bound, v_max, func_d):
- position = [2 * bound * random.random() - bound for _ in xrange(dimension)]
+import lhs
+
+def particle(dimension, bound, v_max, func_d, pos=None):
+ if not pos:
+ position = [2 * bound * random.random() - bound for _ in xrange(dimension)]
+ else:
+ position = pos
velocity = [2 * v_max * random.random() - v_max for _ in xrange(dimension)]
value = func_d(*position)
return value, position, velocity, value, position
def optimize(dimension, boundary, function_d, n_parts, n_turns):
pool = multiprocessing.Pool(None)
v_max = boundary
- particles = [particle(dimension, boundary, v_max, function_d)
- for _ in xrange(n_parts)]
+ particles = [particle(dimension, boundary, v_max, function_d, pos)
+ for pos in lhs.latin_hypercube(dimension, bound, n_parts)]
gl_best = max(particles)
for _ in xrange(n_turns):
move_p = partial(move,