您的位置:首页 > 大数据 > 人工智能

游戏编程中的人工智能技术-第三章:遗传算法入门(一)

2016-05-31 21:37 417 查看
写在算法之前:1、遗传算法的本质是优胜劣汰,优胜劣汰的方法是轮盘赌选择。

                            2、学习遗传算法程序的关键是:遗传算法使用的情境是什么,如何在情境中使用遗传算法。遗传算法只是理论,你如何在实际的情境中构造它?还有的关键是:了解什么时候认为遗传算法已经成功。

本文主要对遗传算法的程序进行讲解,由于作者非计算机专业出身,因此不涉及SDK程序设计,这个我是一点都不懂。

先说理论,参考扬天齐编著的《人工智能及其应用》,遗传算法的几个名词为:

1.种群(Population):初始给定的多个解的集合。也就是刚开始的时候,生成一系列随机的染色体,这些染色体会进行交叉,变异等操作。那么初始的生成的这么些染色体就是种群。

2.基因(Gen):这个还未定。到底是表示染色体中的某个位,还是表示种群中的其中一个元素?

3.染色体(Chromos):表示对种群中的某一元素进行编码,也就是我们所看到的1100111这个东西。

4.适应度(Fitness)函数:如何来对种群中的染色体进行优胜劣汰?这就靠适应度函数了,每个染色体对应一个适应度函数。那么,当然是适应度函数越高的染色体更优秀,容易在竞争中生存下来。

5.操作:对染色体的三种操作:选择(Selection)、交叉(Crossover)、变异(Mutation)。

遗传算法的步骤为:

1、生成初始种群,这个一般是随机生成的。

2、对初始种群中的每一个染色体计算适应度,有符合条件的染色体吗?

3、若没有(一般肯定是没有的),则进行选择操作。选择出两(?到底几个)个染色体。本章采用轮盘赌法。

4、对选择出的染色体进行交叉操作,但注意,不是每次都要交叉的,什么时候交叉,有个概率问题,可以定义为交叉率。

5、对交叉后的染色体进行变异操作。当然,这个也是有概率的,并且这个概率比交叉率小的多。

6、重复第2步骤,直至最终得到符合条件的染色体为止。

一些特殊的说明:

1、染色体编码:可采用二进制编码,或者实数编码。本章采用二进制编码。

2、选择方法:本章采用轮盘赌方法。啥叫轮盘赌呢?就是个体被选择的概率取决于其适应度。这就是为什么轮盘赌法可以进行优胜劣汰的原因。虽然你无法保证每次选择的个体适应度是最好的,但是至少,选到适应度高的个体的概率是高的。



那么轮盘赌该怎么实现呢?首先你要得到两个值:当前个体的适应度函数,以及种群中所有个体的适应度函数之和。那么当前个体被选中的概率为:P(xi)=当前个体适应度函数/所有个体适应度函数之和。

3、交叉和变异书上都有,比较简单。就不介绍了。

接下来举个例子,主要讲述轮盘赌选择方法。

按照杨天齐书113页,初始种群情况表为:

编号个体串x适应值百分比(%)累计百分比(%)选中次数
S01011011316914.3014.301
S02110012562552.8867.182
S03010008645.4172.590
S04100101832427.411001
现采用轮盘赌方式选择个体,依次生成4个随机数为0.85、0.32、0.12、0.46。
请注意一下原则:

0.85在72.59和100之间,这个是S04在轮盘中的区域,所以选择的是S04:10010

0.32在14.30和67.18之间,这个是S02在轮盘中区域,所以选择的是S02:11001

0.12在0和14.30之间,这个是S01在轮盘中的区域,所以选择的是S01:01101

0.46在14.30和67.18之间,这个是S02在轮盘中的区域,所以选择的是S02:11001

从上面分析可知,S02适应值高,占总体的适应值的百分比高,这就类似于他在轮盘中占据了52.88%的空间,所以被选到2次也是正常的。

S03适应值低,占总体的适应值的百分比低,这就类似于他在轮盘中占据了5.41%的空间,所以没被选到。

其他问题见教材。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: