一个简单问题的遗传算法的实现

来源:互联网 发布:js base64转换成file 编辑:程序博客网 时间:2024/06/06 01:29

刚开始研究遗传算法,所以先尝试用该算法实现解决一个简单的问题问题如下:

求函数f(x)=x^2在区间[0,31]内的最大值,其中x取整数

 

利用遗传算法解决的思路如下:

   1.编码策略

            用五位二进制表示x0~3132个数

   2.初始种群

            初始种群为随机的4个个体

   3.适应函数

            将二进制转换为十进制,并取其平方即得到适应度

   4.选择算子

            适应性大的个体被选中的概率也大

   5.交叉算子与变异算子

            交叉概率为1,变异概率为0.01

            交叉点为随机产生的一个范围为1-5的数,假定产生一个随机数位3,则1000011111交叉后为1011111000

 

以下是该算法的java代码实现,代码写的时间比较短,没怎么优化及注释,不过可以看到结果了。代码只输出了遗传算法中每一代中的种群个体染色体情况。从代码的输出结果可以看出,算法找到了最优解11111,但是由于变异的存在,又会跳到其他解,不过运行几秒之后停下来后你会发现他的解是接近最优的。

本文参考了《人工智能导论》(鲍军鹏,张选平等著,机械工业出版社,第207-209页)

本文为lgjfly原著,转载时请注明出处:http://blog.csdn.net/lgjfly

 

 

原创粉丝点击