遗传算法求解函数最小值问题
继上一次用遗传算法求解TSP问题问题以后,万万没有想到,实验的时候,老师居然改了题目,改成了求解函数的最小值问题(有点坑哈),而且要求结果尽量的稳定,可以确定得到最小值,并且,精度尽可能的高……虽然有点坑,不过老师还是简单的说明了一下基本的思路,思路和上一次没有太大的变化,唯一的难点就是怎样尽可能的提高解的精度。
不管怎样,终究在实验课的时候解决了这个问题,唯一的问题就是进度最多10的负六次方,老师说他的精度可以达到10的负几百次方(膜拜……)。
思路不变,选择用轮盘赌,变异要稍微变一下,具体会在下面讲解,废话少说,进入正题。.
问题描述:
设计高效遗传算法,求解下列函数在-5<=x1,x2<=5上的最小值:
在正式的开始求解之前,老师先将函数的图片展示了出来,如下图所示:
并且公布结果,在(0,0)的位置取得最小值0。
在这个结果的基础上,我们开始试验。
代码编写:
首先是个体的类代码:
class problem1_individual(object):
def __init__(self, n1, n2):
self.gene = [n1, n2]
self.score = 0
pass
接着轮盘赌选择的代码,和上一次没有多少变化,同样是采用倒数的方式来作为个体的适配值,因为事先知道结果的最小值为0,所以采用倒数的方式很好,因为越接近0,倒数越大,被选中的概率就越大。
代