(连载之九)
.
扎自<游戏编程中的人工智能技术>第三章
清华大学出版社
3.4.5 运行找路径者程序 (Running the Pathfinder Program)
.......当你运行 Pathfinder 程序时,你将看到,程序不是每次都能找到一条通往出口的路径。Bob 有时会被粘住在一个局部地区不确定地逗来逗去,如同一个喝醉了酒的人在试着寻找他的回家的路。这主要由于群体太快地收敛到一个特殊类型的染色体。这样,由于群体中的成员变得如此相似, crossover 算子的有益效应这时实际上已经不能发挥作用,所有发生的事情都是靠总量很少的变异 操作在起作用 。但因变异率设置很低,当染色体类型的差异消失后,仅仅依靠变异本身已不足以去发现一个解。另外,由于轮盘赌选择的工作方式,使得任何一代的最合适的染色体无法保证传到下一代。 这意味着,只要在适当时候,立即杀死这个成员,遗传算法就能在群体中找到一个几乎完全的解,但在这样做时,它将失去它所拥有的所有好的基因!在后面的章节中,我 将会谈到这些问题,并介绍一些技术来帮助维护基因组的差异性且同时能保留那些较好的基因组。但在这里,我首先需要花费一些时间来考察不同的编码方法,并考察它们怎样和你可能遇到的问题类型关联在一起。这就是我在下一个章中将要做的事情。
l. .11011
2. .21
3.5 练习题(Stuff to Try)
........从现在开始,在每一章的后面,我都要给你出一些点子,让你按照它来编写出相应的游戏程序。我不强调这些程序本身有多么重要。但这是唯一能使你对那些算法产生“感性”认识的方法。而且,当你开始去做复杂的题目时,这种“感性”认识将变得非常重要。
1. 为杂交率,突变率,群体尺寸,染色体长度等参数设置各种不同的值来进行试验,观察它们对算法的效率有什么影响?
2. 试去掉杂交操作,而增加突变率,看会发生什么结果?如果单用杂交操作,而不利用突变,又会发生什么?
3. 修改适应性分数的计算函数,使多次进入同一小格的染色体得到惩罚。这应该导致更有效的到出口的路径。
4. 你能想到另外的什么办法使路径的寻找更为有效吗?
-连载9完-
预告:下一次的最后连载包括下列内容:
。。* 提供本连载所介绍内容的完整的VC++源程序和执行程序的下载。
。。* 介绍《游戏编程中的人工智能技术》全书内容和国外网站对它的评价。
。。* 提供原书后面所附遗传算法的参考文献,包括书、文章、以及相关网站。
。。* 设立了一个简单的调查表,以了解各位对这样的连载有什么看法,并确定
今后是否要搞类似的连载以及如何改进,等。