利用遗传算法求解函数最大值题目利用遗传算法求解函数f(x,y)=x∗sin(6∗y)+y∗cos(8∗x)在x∈[1,2]及y∈[1,2]的最大值
解答算法利用遗传算法进行求解,篇末所附源代码中带有算法的详细注释
算法中涉及不同的参数,参数的取值需要依如实际情形进行设定,下面运行时将给出不同参数的结果对照
概念整体算法的终止条件为,当种群进化次数达到maxGeneration时停止,现在种群中的最优解即作为算法的最终输出
设种群规模为N,第一是随机产生N个个体,实验中概念了类型Chromosome表示一个个体,而且在默许构造函数中即进行了随机的操作
然后程序进行假设干次的迭代,在每次迭代进程中,进行选择、交叉及变异三个操作
一选择操作第一计算当前每一个个体的适应度函数值,那个地址的适应度函数即为所要求的优化函数,然后归一化求得每一个个体选中的概率,然后用轮盘赌的方式以许诺重复的方式选择选择N个个体,即为选择以后的群体
但实验时发觉结果不行,通过认真研究以后发觉,那个地址在x、y取某些值的时候,目标函数计算出来的适应值可能会显现负值,这时若是依照把每一个个体的适应值除以适应值的总和的进行归一化的话会显现问题,因为个体可能显现负值,总和也可能显现负值,若是归一化的时候除以了一个负值,选择时就会选择一些不良的个体,对实验结果造成阻碍
对于那个问题,我把适应度函数定为目标函数的函数值加一个正数,保证取得的适应值为正数,然后再进行一样的归一化和选择的操作
实验结果说明,之前的实验结果很不稳固,修正后的结果比较稳固,趋于最大值
二交叉操作第一是依照交叉概率probCross选择要交叉的个体进行交叉
那个地址依照交叉参数crossnum进行多点交叉,第一随机生成交叉点位置,许诺交叉点重合,两个重合的交叉点成效相互抵消,相当于没有交叉点,然后依照交叉点进行交叉操作,取得新的个体