<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Focusheart&#039;s World</title>
	<atom:link href="http://focusheart.cn/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://focusheart.cn</link>
	<description>new era is now</description>
	<lastBuildDate>Wed, 01 Sep 2010 08:25:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BoneCP</title>
		<link>http://focusheart.cn/?p=543</link>
		<comments>http://focusheart.cn/?p=543#comments</comments>
		<pubDate>Wed, 01 Sep 2010 08:25:58 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[bonecp]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[openoffice]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=543</guid>
		<description><![CDATA[恩，以前都是自己写个简单的连接池，这次用别人写的，感觉真不错~用起来挺舒服的，而且速度很快，除了要依赖一大堆包以外，没什么不好的。推荐一下。
顺便一提的是刚知道OpenOffice Base原来可以通过JDBC连接各种数据库，不过要配置一下Class Path才可以识别Driver，很好用~目前反正也懒得解决中文问题，能看英文字符就行了。
BoneCP：http://jolbox.com/
]]></description>
			<content:encoded><![CDATA[<p>恩，以前都是自己写个简单的连接池，这次用别人写的，感觉真不错~用起来挺舒服的，而且速度很快，除了要依赖一大堆包以外，没什么不好的。推荐一下。<br />
顺便一提的是刚知道OpenOffice Base原来可以通过JDBC连接各种数据库，不过要配置一下Class Path才可以识别Driver，很好用~目前反正也懒得解决中文问题，能看英文字符就行了。</p>
<p>BoneCP：http://jolbox.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=543</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在Windows 7上用Python MySQLdb</title>
		<link>http://focusheart.cn/?p=542</link>
		<comments>http://focusheart.cn/?p=542#comments</comments>
		<pubDate>Thu, 26 Aug 2010 06:44:34 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[mysqldb]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=542</guid>
		<description><![CDATA[原来挺简单的一个事情，结果在windows7上有些复杂了，以前用egg或者setup.py install都挺好，但是7上不行，特别是sourceforge好像没有提供2.6的安装……恩，即便装了也还有问题，一个一个来解决了：
参考这儿：
http://xiaolin0199.javaeye.com/blog/648409
1 下载安装python2.6，这个没什么好说的
2 下载MySQLdb并且安装：
http://home.netimperia.com/files/misc/MySQL-python-1.2.2.win32-py2.6.exe
3 下载几个需要的库并解压到python安装路径/Lib\site-packages
libguide40.dll.zip(77.3 KB)
http://www.3gmatrix.cn/batch.download.php?aid=13881
libmmd.dll.zip(169 KB)
http://www.3gmatrix.cn/batch.download.php?aid=13882
libmySQL.dll.zip(861 KB)
http://www.3gmatrix.cn/batch.download.php?aid=13883
4 修改库本身：
1) “__init__”, 替换:
from sets import ImmutableSet
class DBAPISet(ImmutableSet):
为
class DBAPISet(frozenset) 
2) “converters.py”, 去掉这行:
from sets import BaseSet, Set 
3) “converters.py”, 将“Set”改为“set” 只有两处，如下：
line 48: return set([ i for i in s.split(',') if i ])
line 128: set: Set2Str, 
]]></description>
			<content:encoded><![CDATA[<p>原来挺简单的一个事情，结果在windows7上有些复杂了，以前用egg或者setup.py install都挺好，但是7上不行，特别是sourceforge好像没有提供2.6的安装……恩，即便装了也还有问题，一个一个来解决了：<br />
参考这儿：<br />
http://xiaolin0199.javaeye.com/blog/648409<br />
1 下载安装python2.6，这个没什么好说的<br />
2 下载MySQLdb并且安装：<br />
http://home.netimperia.com/files/misc/MySQL-python-1.2.2.win32-py2.6.exe<br />
3 下载几个需要的库并解压到python安装路径/Lib\site-packages<br />
libguide40.dll.zip(77.3 KB)<br />
http://www.3gmatrix.cn/batch.download.php?aid=13881<br />
libmmd.dll.zip(169 KB)<br />
http://www.3gmatrix.cn/batch.download.php?aid=13882<br />
libmySQL.dll.zip(861 KB)<br />
http://www.3gmatrix.cn/batch.download.php?aid=13883<br />
4 修改库本身：<br />
1) “__init__”, 替换:<br />
from sets import ImmutableSet<br />
class DBAPISet(ImmutableSet):<br />
为<br />
class DBAPISet(frozenset) </p>
<p>2) “converters.py”, 去掉这行:<br />
from sets import BaseSet, Set </p>
<p>3) “converters.py”, 将“Set”改为“set” 只有两处，如下：<br />
line 48: return set([ i for i in s.split(',') if i ])<br />
line 128: set: Set2Str, </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=542</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>过去的工具</title>
		<link>http://focusheart.cn/?p=541</link>
		<comments>http://focusheart.cn/?p=541#comments</comments>
		<pubDate>Thu, 26 Aug 2010 02:44:56 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=541</guid>
		<description><![CDATA[看书上说"无奈的是用过去的工具来解决现在的问题"，现在真是感觉确实如此，自己所面临的问题用我自己知道的东西都是没办法解决，不论是工具还是经验或者方法论之类的，就好像刚开始扫雷那样一切都不清楚，瞎摸。
看新项目的领域完全和自己所学习过的东西不一样，看来有很多的事情要做了。几个事情都纠结在了一起，但是又不得不做，自己怎么来整理头绪？
    Del.icio.us : tools 
]]></description>
			<content:encoded><![CDATA[<p>看书上说"无奈的是用过去的工具来解决现在的问题"，现在真是感觉确实如此，自己所面临的问题用我自己知道的东西都是没办法解决，不论是工具还是经验或者方法论之类的，就好像刚开始扫雷那样一切都不清楚，瞎摸。</p>
<p>看新项目的领域完全和自己所学习过的东西不一样，看来有很多的事情要做了。几个事情都纠结在了一起，但是又不得不做，自己怎么来整理头绪？</p>
<p xmlns="" class="zoundry_raven_tags">  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->  <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a href="http://del.icio.us/tag/tools" class="ztag" rel="tag">tools</a></span> </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=541</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>舟曲</title>
		<link>http://focusheart.cn/?p=539</link>
		<comments>http://focusheart.cn/?p=539#comments</comments>
		<pubDate>Sun, 15 Aug 2010 08:34:07 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[bbs]]></category>
		<category><![CDATA[bmy]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=539</guid>
		<description><![CDATA[哀悼

]]></description>
			<content:encoded><![CDATA[<p>哀悼<br />
<a href="http://focusheart.cn/wp-content/uploads/20100815_zq2.jpg"><img class="alignnone size-medium wp-image-538" title="20100815_zq2" src="http://focusheart.cn/wp-content/uploads/20100815_zq2-300x155.jpg" alt="20100815_zq2" width="300" height="155" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=539</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>解决问题</title>
		<link>http://focusheart.cn/?p=537</link>
		<comments>http://focusheart.cn/?p=537#comments</comments>
		<pubDate>Wed, 11 Aug 2010 02:05:19 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[solve problem]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=537</guid>
		<description><![CDATA[问题的解决总是有很多方法，自己怎么来选择？
比如说可以用渐进的策略，一点点的改善，尽量取得共赢。也可以休克的来做，直接推翻了重来，不过这个似乎不是解决问题，而且规避问题。因为解决问题太麻烦，不如消灭了算了。只是副作用当然也很大，看自己如何来衡量了。
解决问题，从内外两个方面来找源头，如果可以从源头上解决问题，那么问题的解决应该是很容易的，不论是消灭问题还是解决问题，从源头上解决都是个好方法。只是自己能不能找对源头呢？也许不一定是那个自己认为的源头……也许当我再过几十年回首的时候才能看清楚自己现在的问题究竟是问题在哪里，也许，也只是也许了。
还是不知道。不禁想起了以前看的一句话：既然我避免不了那个结局，那就拒绝那个开始。
    Del.icio.us : solve problem 
]]></description>
			<content:encoded><![CDATA[<p>问题的解决总是有很多方法，自己怎么来选择？</p>
<p>比如说可以用渐进的策略，一点点的改善，尽量取得共赢。也可以休克的来做，直接推翻了重来，不过这个似乎不是解决问题，而且规避问题。因为解决问题太麻烦，不如消灭了算了。只是副作用当然也很大，看自己如何来衡量了。</p>
<p>解决问题，从内外两个方面来找源头，如果可以从源头上解决问题，那么问题的解决应该是很容易的，不论是消灭问题还是解决问题，从源头上解决都是个好方法。只是自己能不能找对源头呢？也许不一定是那个自己认为的源头……也许当我再过几十年回首的时候才能看清楚自己现在的问题究竟是问题在哪里，也许，也只是也许了。</p>
<p>还是不知道。不禁想起了以前看的一句话：既然我避免不了那个结局，那就拒绝那个开始。</p>
<p xmlns="" class="zoundry_raven_tags">  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->  <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a href="http://del.icio.us/tag/solve%20problem" class="ztag" rel="tag">solve problem</a></span> </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=537</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文档过滤</title>
		<link>http://focusheart.cn/?p=536</link>
		<comments>http://focusheart.cn/?p=536#comments</comments>
		<pubDate>Wed, 11 Aug 2010 02:05:07 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[classifier]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=536</guid>
		<description><![CDATA[简单的分类器原来也挺容易就能建立好的，赞美把复杂东西搞简单的作者，嗯，还有译者~
建立一个简单的分类器只要70来行的python代码，也不需要太复杂的什么依赖包之类的，真好~就像是遗传编程那个部分的例子一样，写代码看到成果的感觉真让人开心  
下来是朴素的分类器，称之为naive bayes的简单分类器，确实比较容易~连我都看得懂……
    Del.icio.us : classifier 
]]></description>
			<content:encoded><![CDATA[<p>简单的分类器原来也挺容易就能建立好的，赞美把复杂东西搞简单的作者，嗯，还有译者~</p>
<p>建立一个简单的分类器只要70来行的python代码，也不需要太复杂的什么依赖包之类的，真好~就像是遗传编程那个部分的例子一样，写代码看到成果的感觉真让人开心 <img src='http://focusheart.cn/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>下来是朴素的分类器，称之为naive bayes的简单分类器，确实比较容易~连我都看得懂……</p>
<p xmlns="" class="zoundry_raven_tags">  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->  <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a href="http://del.icio.us/tag/classifier" class="ztag" rel="tag">classifier</a></span> </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=536</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ph.D?</title>
		<link>http://focusheart.cn/?p=535</link>
		<comments>http://focusheart.cn/?p=535#comments</comments>
		<pubDate>Wed, 11 Aug 2010 02:04:42 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[phd]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=535</guid>
		<description><![CDATA[http://matt.might.net/articles/phd-school-in-pictures/
真有趣~  
    Del.icio.us : phd 
]]></description>
			<content:encoded><![CDATA[<p><a href="http://matt.might.net/articles/phd-school-in-pictures/">http://matt.might.net/articles/phd-school-in-pictures/</a></p>
<p>真有趣~ <img src='http://focusheart.cn/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p xmlns="" class="zoundry_raven_tags">  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->  <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a href="http://del.icio.us/tag/phd" class="ztag" rel="tag">phd</a></span> </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=535</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zoundry~</title>
		<link>http://focusheart.cn/?p=534</link>
		<comments>http://focusheart.cn/?p=534#comments</comments>
		<pubDate>Tue, 10 Aug 2010 03:32:13 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=534</guid>
		<description><![CDATA[最近上网少,都是用Zoundry先写好,然后再发出来,感觉挺方便的~不错~
http://cn.zoundry.com/
]]></description>
			<content:encoded><![CDATA[<p>最近上网少,都是用Zoundry先写好,然后再发出来,感觉挺方便的~不错~<br />
http://cn.zoundry.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=534</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>遗传编程 Grid War 3</title>
		<link>http://focusheart.cn/?p=533</link>
		<comments>http://focusheart.cn/?p=533#comments</comments>
		<pubDate>Tue, 10 Aug 2010 01:35:31 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[genetic programming]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=533</guid>
		<description><![CDATA[接着上次的，话说要增加基础函数，那么我们先增加一个比较直观的东西，在我们的算法和遗传程序之间，差别最大的来自于那个计算距离的函数，那么我们把这个增加进去：
# distance function distancew = fwrapper(lambda p:(p[0]-p[2])**2+(p[1]-p[3])**2,4,'distance') flist = [addw,mulw,ifw,gtw,subw,distancew]
然后重新启动测试，结果很神奇，相较于上一次，直观的感觉就是GP果然nb很多了啊，大约是一段时间以后，AP已经没法前十了，一般都是在20名以后：
gp/74 gp/82 gp/85 gp/90 gp/91 gp/92 gp/93 gp/94 gp/96 gp/101 apr:24 gp/66 gp/79 gp/80 gp/85 gp/86 gp/86 gp/90 gp/91 gp/92 gp/92 apr:32 gp/85 gp/86 gp/90 gp/91 gp/92 gp/95 gp/98 gp/99 gp/99 gp/102 apr:40 gp/80 gp/83 gp/90 gp/92 gp/92 gp/93 gp/94 gp/96 gp/96 gp/97 apr:27 gp/75 gp/80 [...]]]></description>
			<content:encoded><![CDATA[<p>接着上次的，话说要增加基础函数，那么我们先增加一个比较直观的东西，在我们的算法和遗传程序之间，差别最大的来自于那个计算距离的函数，那么我们把这个增加进去：</p>
<p># distance function <br/>distancew = fwrapper(lambda p:(p[0]-p[2])**2+(p[1]-p[3])**2,4,'distance') <br/>flist = [addw,mulw,ifw,gtw,subw,distancew]</p>
<p>然后重新启动测试，结果很神奇，相较于上一次，直观的感觉就是GP果然nb很多了啊，大约是一段时间以后，AP已经没法前十了，一般都是在20名以后：</p>
<p>gp/74 gp/82 gp/85 gp/90 gp/91 gp/92 gp/93 gp/94 gp/96 gp/101 apr:24 <br/>gp/66 gp/79 gp/80 gp/85 gp/86 gp/86 gp/90 gp/91 gp/92 gp/92 apr:32 <br/>gp/85 gp/86 gp/90 gp/91 gp/92 gp/95 gp/98 gp/99 gp/99 gp/102 apr:40 <br/>gp/80 gp/83 gp/90 gp/92 gp/92 gp/93 gp/94 gp/96 gp/96 gp/97 apr:27 <br/>gp/75 gp/80 gp/82 gp/88 gp/88 gp/91 gp/92 gp/94 gp/94 gp/96 apr:40 <br/>gp/75 gp/78 gp/80 gp/82 gp/84 gp/89 gp/90 gp/92 gp/93 gp/95 apr:22 <br/>gp/69 gp/70 gp/71 gp/71 gp/83 gp/91 gp/93 gp/95 gp/97 gp/98 apr:20 <br/>gp/64 gp/68 gp/70 gp/71 gp/71 gp/75 gp/81 gp/87 gp/92 gp/92 apr:28 <br/>gp/83 gp/84 gp/85 gp/92 gp/93 gp/93 gp/94 gp/98 gp/100 gp/100 apr:28 <br/>gp/82 gp/82 gp/86 gp/88 gp/89 gp/94 gp/95 gp/96 gp/98 gp/100 apr:30 <br/>gp/66 gp/75 gp/84 gp/85 gp/87 gp/88 gp/90 gp/91 gp/91 gp/91 apr:31 <br/>gp/74 gp/79 gp/81 gp/85 gp/86 gp/86 gp/92 gp/93 gp/98 gp/99 apr:22 <br/>gp/67 gp/71 gp/78 gp/81 gp/81 gp/84 gp/85 gp/89 gp/90 gp/96 apr:27 <br/>gp/76 gp/78 gp/78 gp/81 gp/83 gp/84 gp/84 gp/88 gp/89 gp/91 apr:29 <br/>gp/65 gp/75 gp/75 gp/79 gp/81 gp/82 gp/84 gp/85 gp/85 gp/87 apr:17 <br/>gp/62 gp/70 gp/75 gp/82 gp/86 gp/87 gp/88 gp/89 gp/93 gp/93 apr:29 <br/>gp/66 gp/76 gp/76 gp/77 gp/78 gp/78 gp/80 gp/80 gp/81 gp/88 apr:19 <br/>gp/71 gp/76 gp/83 gp/83 gp/86 gp/88 gp/88 gp/91 gp/93 gp/95 apr:26 <br/>gp/79 gp/87 gp/87 gp/90 gp/90 gp/95 gp/98 gp/101 gp/104 gp/106 apr:27</p>
<p>嗯，基础函数真神奇，书里边对这个也有说明，只要增加基础函数，就有可能让程序有很大的进步，比如现在平均的得分大约是70，那么也就是说现在排名第一程序只输了35次，在200次的比赛中只输3次，还是挺不错的~</p>
<p>那么，不知道和真人的水平相比如何……加赛！稍微修改了一下，在return之前：</p>
<p>gridgame([humanplayer(),scores[0][1]])</p>
<p>这样就可以加赛了~</p>
<p>不过这个随机性很强……这次开始ap总是处于不败……为什么呢？</p>
<p>ap/62 gp/75 gp/77 gp/87 gp/97 gp/98 gp/104 gp/107 gp/112 gp/112 apr:0 <br/>ap/65 gp/74 gp/92 gp/94 gp/105 gp/107 gp/109 gp/109 gp/111 gp/126 apr:0 <br/>ap/77 gp/104 gp/104 gp/105 gp/109 gp/114 gp/118 gp/118 gp/119 gp/121 apr:0 <br/>ap/66 gp/92 gp/102 gp/104 gp/105 gp/105 gp/106 gp/109 gp/110 gp/116 apr:0 <br/>ap/88 gp/92 gp/104 gp/105 gp/105 gp/108 gp/109 gp/110 gp/110 gp/111 apr:0 <br/>ap/62 gp/96 gp/102 gp/112 gp/112 gp/112 gp/113 gp/115 gp/115 gp/115 apr:0 <br/>ap/99 gp/119 gp/127 gp/128 gp/129 gp/133 gp/133 gp/134 gp/134 gp/134 apr:0 <br/>ap/69 gp/92 gp/98 gp/102 gp/104 gp/105 gp/109 gp/109 gp/109 gp/110 apr:0 <br/>ap/98 gp/114 gp/121 gp/132 gp/132 gp/133 gp/134 gp/134 gp/135 gp/136 apr:0 <br/>ap/76 gp/103 gp/107 gp/108 gp/108 gp/113 gp/114 gp/115 gp/115 gp/115 apr:0 <br/>ap/60 gp/95 gp/105 gp/107 gp/107 gp/108 gp/109 gp/110 gp/111 gp/113 apr:0 <br/>ap/82 gp/111 gp/119 gp/124 gp/126 gp/127 gp/128 gp/129 gp/129 gp/130 apr:0 <br/>ap/87 gp/107 gp/107 gp/108 gp/108 gp/110 gp/110 gp/110 gp/113 gp/113 apr:0 <br/>ap/84 gp/100 gp/112 gp/114 gp/114 gp/115 gp/115 gp/116 gp/118 gp/120 apr:0 <br/>ap/72 gp/92 gp/94 gp/101 gp/103 gp/104 gp/104 gp/107 gp/109 gp/110 apr:0 <br/>ap/68 gp/95 gp/109 gp/110 gp/110 gp/110 gp/112 gp/114 gp/115 gp/115 apr:0</p>
<p xmlns="" class="zoundry_raven_tags">  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->  <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a href="http://del.icio.us/tag/genetic%20programming" class="ztag" rel="tag">genetic programming</a></span> </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=533</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>遗传编程 Grid War 2</title>
		<link>http://focusheart.cn/?p=532</link>
		<comments>http://focusheart.cn/?p=532#comments</comments>
		<pubDate>Tue, 10 Aug 2010 01:35:24 +0000</pubDate>
		<dc:creator>focusheart</dc:creator>
				<category><![CDATA[Doing!]]></category>
		<category><![CDATA[genetic programming]]></category>

		<guid isPermaLink="false">http://focusheart.cn/?p=532</guid>
		<description><![CDATA[书里提供的框架非常好用，只要自己设计一个简单的类决定如何根据当前的情况走下一步，就能够用新的算法来进行游戏，可以试试看，我提供一个还算凑合的算法，然后让遗传程序自己来进化如何比较好的战胜我的算法。
 
首先是我的算法，因为传入的参数也比较少，所以能够做的很简单，就是根据当前的距离，尽量逼近对方的位置：
class simpleplayer:
def gonear(self,me,lastmove,others): predict = [] for i in range(4): if i==lastmove: continue if i==0 and me[0]&#60;&#62;0: predict.append(((me[0]-1-others[0][0])**2+(me[1]-others[0][1])**2,i)) elif i==1 and me[0]&#60;&#62;3: predict.append(((me[0]+1-others[0][0])**2+(me[1]-others[0][1])**2,i)) elif i==2 and me[1]&#60;&#62;0: predict.append(((me[0]-others[0][0])**2+(me[1]-1-others[0][1])**2,i)) elif i==3 and me[1]&#60;&#62;3: predict.append(((me[0]-others[0][0])**2+(me[1]+1-others[0][1])**2,i)) return min(predict)[1] def evaluate(self,board): me = tuple(board[0:2]) lastmove = board[len(board)-1] others = [tuple(board[x:x+2]) for x in range(2,len(board)-1,2)] return self.gonear(me,lastmove,others)
然后是要对循环赛的程序做一些修改，达到这些目标：
1 希望能够看到每一轮战况的汇报，也就是说要看到AP和GP的输赢情况。
2 在下一轮中，AP保持不变，GP要进行进化
那么需要改变一下evolve函数函数：
def [...]]]></description>
			<content:encoded><![CDATA[<p>书里提供的框架非常好用，只要自己设计一个简单的类决定如何根据当前的情况走下一步，就能够用新的算法来进行游戏，可以试试看，我提供一个还算凑合的算法，然后让遗传程序自己来进化如何比较好的战胜我的算法。</p>
<p> <span id="more-532"></span>
<p>首先是我的算法，因为传入的参数也比较少，所以能够做的很简单，就是根据当前的距离，尽量逼近对方的位置：</p>
<p>class simpleplayer:</p>
<p>def gonear(self,me,lastmove,others): <br/>predict = [] <br/>for i in range(4): <br/>if i==lastmove: continue <br/>if i==0 and me[0]&lt;&gt;0: <br/>predict.append(((me[0]-1-others[0][0])**2+(me[1]-others[0][1])**2,i)) <br/>elif i==1 and me[0]&lt;&gt;3: <br/>predict.append(((me[0]+1-others[0][0])**2+(me[1]-others[0][1])**2,i)) <br/>elif i==2 and me[1]&lt;&gt;0: <br/>predict.append(((me[0]-others[0][0])**2+(me[1]-1-others[0][1])**2,i)) <br/>elif i==3 and me[1]&lt;&gt;3: <br/>predict.append(((me[0]-others[0][0])**2+(me[1]+1-others[0][1])**2,i)) <br/>return min(predict)[1] <br/><br/>def evaluate(self,board): <br/>me = tuple(board[0:2]) <br/>lastmove = board[len(board)-1] <br/>others = [tuple(board[x:x+2]) for x in range(2,len(board)-1,2)] <br/>return self.gonear(me,lastmove,others)</p>
<p>然后是要对循环赛的程序做一些修改，达到这些目标：</p>
<p>1 希望能够看到每一轮战况的汇报，也就是说要看到AP和GP的输赢情况。</p>
<p>2 在下一轮中，AP保持不变，GP要进行进化</p>
<p>那么需要改变一下evolve函数函数：</p>
<p>def evolvewithap(ap,pc,popsize,rankfunction,maxgen=500, <br/>mutationrate=0.1,breedingrate=0.4,pexp=0.7,pnew=0.05): <br/>def selectindex(aprank): <br/>while True: <br/>i = int(log(random())/log(pexp)) <br/>if i&lt;&gt;aprank: return i</p>
<p># create a lot <br/>population = [randomtree(pc) for i in range(popsize)] <br/># put the ap <br/>population.append(ap) <br/><br/>for i in range(maxgen): <br/>scores = rankfunction(population) <br/><br/># display the top 10 <br/># if the ap is out of top 10, tournament break <br/>aprank = -1 <br/>newpop = [] <br/>for i in range(len(scores)): <br/>if isinstance(scores[i][1],simpleplayer): <br/>aprank = i <br/>if i&lt;10: <br/>print 'ap/%d ' % scores[i][0] , <br/>else: <br/>break <br/>elif i&lt;10: <br/>print 'gp/%d ' % scores[i][0] , <br/>newpop.append(scores[i][1]) <br/><br/>if aprank &gt; 50: break <br/>print ' apr:%d' % aprank <br/><br/># create the next generation <br/>while len(newpop)&lt;popsize: <br/>if random()&gt;pnew: <br/>newpop.append(mutate( <br/>crossover(scores[selectindex(aprank)][1], <br/>scores[selectindex(aprank)][1], <br/>probswap=breedingrate), <br/>pc, <br/>probchange=mutationrate)) <br/>else: <br/>newpop.append(randomtree(pc)) <br/># put the ap <br/>newpop.append(ap) <br/>population = newpop <br/># evolve over <br/>scores[0][1].display() <br/>return scores[0][1]</p>
<p>最后，进行测试：</p>
<p>import gp</p>
<p>gp.evolvewithap(gp.simpleplayer(),5,100,gp.tournament, <br/>mutationrate=0.2,breedingrate=0.1,pexp=0.7,pnew=0.1)</p>
<p>运行的一部分结果如下：</p>
<p>ap/100 gp/103 gp/104 gp/106 gp/108 gp/109 gp/112 gp/113 gp/114 gp/117 apr:0 <br/>gp/93 gp/94 gp/95 gp/96 gp/99 gp/100 gp/100 gp/100 gp/100 gp/104 apr:10 <br/>gp/94 gp/99 gp/99 gp/100 gp/100 gp/100 gp/102 ap/102 gp/109 gp/109 apr:7 <br/>gp/85 gp/86 gp/88 gp/91 ap/92 gp/92 gp/93 gp/93 gp/94 gp/96 apr:4 <br/>gp/90 gp/102 ap/104 gp/106 gp/108 gp/110 gp/111 gp/112 gp/113 gp/115 apr:2 <br/>gp/88 ap/93 gp/101 gp/101 gp/101 gp/104 gp/104 gp/113 gp/114 gp/114 apr:1 <br/>gp/92 gp/94 gp/96 ap/97 gp/100 gp/101 gp/106 gp/106 gp/108 gp/111 apr:3 <br/>gp/87 gp/92 gp/96 gp/98 gp/105 gp/108 gp/110 gp/112 gp/112 gp/115 apr:10 <br/>gp/89 ap/96 gp/101 gp/102 gp/104 gp/104 gp/105 gp/107 gp/107 gp/108 apr:1 <br/>gp/87 gp/95 gp/96 gp/101 ap/102 gp/102 gp/105 gp/105 gp/106 gp/107 apr:4 <br/>gp/86 gp/90 gp/93 gp/97 gp/101 gp/101 gp/105 gp/105 gp/105 gp/106 apr:13 <br/>gp/81 gp/82 gp/82 gp/83 gp/83 gp/85 gp/88 gp/93 gp/95 gp/99 apr:13 <br/>gp/85 gp/89 gp/90 ap/91 gp/96 gp/97 gp/97 gp/97 gp/99 gp/101 apr:3 <br/>gp/84 gp/85 gp/86 gp/90 gp/91 gp/93 gp/94 gp/94 gp/95 ap/98 apr:9</p>
<p>从结果来看……这个算法总体比遗传算法能强一些，不过偶尔也有跌出前十名的情况，还以为能把gp的程序训练的好一些，不过似乎在目前很基础的这些函数面前，能做到这个程度已经很不错的，下来如果要改进的话，需要在基础函数方面增加一些东西吧？</p>
<p xmlns="" class="zoundry_raven_tags">  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->  <span class="ztags"><span class="ztagspace">Del.icio.us</span> : <a href="http://del.icio.us/tag/genetic%20programming" class="ztag" rel="tag">genetic programming</a></span> </p>
]]></content:encoded>
			<wfw:commentRss>http://focusheart.cn/?feed=rss2&amp;p=532</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
