<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: optimization code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 12 Oct 2008 11:07:49 GMT</pubDate>
    <description>DZone Snippets: optimization code</description>
    <item>
      <title>Random key from Ruby Hash (even faster)</title>
      <link>http://snippets.dzone.com/posts/show/3942</link>
      <description>I came across &lt;a href="/posts/show/54"&gt;baby's code&lt;/a&gt; and then &lt;a href="/posts/show/251"&gt;aiosup's&lt;/a&gt; from 2 years ago, and realized that I like the simplicity of one and the approach of the other. Kudos to both authors, and I found a way to combine the two approaches into one neat mechanism. &lt;a href="http://pqmf.com"&gt;More of my ruby here,&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Hash&lt;br /&gt;  @keys_not_used = nil&lt;br /&gt;&lt;br /&gt;  def random_key&lt;br /&gt;          @keys_not_used = self.dup if (!@keys_not_used or @keys_not_used.size == 0)&lt;br /&gt;	  key = @keys_not_used.keys[rand(@keys_not_used.size)]&lt;br /&gt;	  @keys_not_used.delete(key)&lt;br /&gt;          key&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 02 May 2007 03:00:58 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3942</guid>
      <author>blackrat (Paul McKibbin)</author>
    </item>
    <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>
