<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: metaheuristic code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 21:42:45 GMT</pubDate>
    <description>DZone Snippets: metaheuristic code</description>
    <item>
      <title>Particle Swarm Optimization</title>
      <link>http://snippets.dzone.com/posts/show/3327</link>
      <description>Particle Swarm Optimization written in Python, more infos and a pretty printer here : &lt;a href="http://www.biais.org/blog/index.php/2007/01/14/13-metaheuristic-particle-swarm-optimization-pso-in-python"&gt;http://www.biais.org/blog/index.php/2007/01/14/13-metaheuristic-particle-swarm-optimization-pso-in-python&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Particle swarm optimization&lt;br /&gt;# Maxime Biais : &lt;http://www.biais.org/blog/&gt;&lt;br /&gt;&lt;br /&gt;from random import uniform&lt;br /&gt; &lt;br /&gt;class PSO:&lt;br /&gt;    def __init__(self, pop_size, min, max, phi, phi2, lr, maxiter, func):&lt;br /&gt;        self.func = func&lt;br /&gt;        self.pop = []&lt;br /&gt;        # 0: position, 1: velocity, 2: fitness&lt;br /&gt;        self.min = min&lt;br /&gt;        self.max = max&lt;br /&gt;        for i in xrange(pop_size):&lt;br /&gt;            self.pop.append([uniform(self.min, self.max), &lt;br /&gt;                                   uniform(-1, 1), 0])&lt;br /&gt;        self.evaluate()&lt;br /&gt;        self.gdest = self.pop[0]&lt;br /&gt;        self.pdest = self.pop[0]&lt;br /&gt;        self.phi = phi&lt;br /&gt;        self.phi2 = phi2&lt;br /&gt;        self.lr = lr&lt;br /&gt;        self.maxiter = maxiter&lt;br /&gt;    &lt;br /&gt;    def update_velocity(self):&lt;br /&gt;        for i in self.pop:&lt;br /&gt;            i[1] = self.lr * i[1] + uniform(0, self.phi) \&lt;br /&gt;                    * (self.pdest[0] - i[0]) + uniform(0, self.phi2) \&lt;br /&gt;                    * (self.gdest[0] - i[0])&lt;br /&gt; &lt;br /&gt;    def evaluate(self):&lt;br /&gt;        for i in self.pop:&lt;br /&gt;            i[2] = self.func(i[0])&lt;br /&gt; &lt;br /&gt;    def move(self):&lt;br /&gt;        for i in self.pop:&lt;br /&gt;            i[0] += i[1]&lt;br /&gt; &lt;br /&gt;    def __cmp_by_fitness(self, a, b):&lt;br /&gt;        return cmp(a[2], b[2])&lt;br /&gt;    &lt;br /&gt;    def run(self, update_func=False):&lt;br /&gt;        for i in xrange(self.maxiter):&lt;br /&gt;            if update_func:&lt;br /&gt;                update_func()&lt;br /&gt;            self.update_velocity()&lt;br /&gt;            self.move()&lt;br /&gt;            self.evaluate()&lt;br /&gt;            self.pop.sort(self.__cmp_by_fitness, reverse=0)&lt;br /&gt;            self.pdest = self.pop[0]&lt;br /&gt;            if self.pdest[2] &lt; self.gdest[2]:&lt;br /&gt;                self.gdest = self.pdest&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 19 Jan 2007 00:14:49 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3327</guid>
      <author>bugmenot (BugMeNot)</author>
    </item>
  </channel>
</rss>
