[数学建模]遗传算法

现代优化算法:遗传算法步骤

1、初始种群的选择

采用tsp问题中的改良圈算法(见文末),可以更快收敛。

2、选择

采用轮盘赌选择法,轮盘赌选择法(Croulette wheel selectio) 是最简单也是最常用的选择方法。

在该方法中,各个个体的选择概率和其适应度值成比例。设种群中个体总数为N,个体i的适应度为fi,则个体i被选取的几率为:
Pi=fi/总适应度
显然,概率反映了个体i的适应度在整个群体的个体适应度总和中所占的比例。个体适应度越大,其被选择的概率就越高,反之亦然。
计算出群体中各个个体的选择概率后,为了选择交配个体,需要进行多轮选择。每一轮产生一个[0,1]之间均匀随机数,将该随机数作为选择指针来确定被选个体。
个体被选后,被选择的个体进入交配过程。一般的遗传算法都有一个交配概率(又称为交叉概率),范围一般是0.6~1,这个交配概率反映两个被选中的个体进行交配的概率

这个地方涉及到适应度函数的选择:

 
  1. 1.遗传算法和直接搜索工具箱中的函数ga是求解目标函数的最小值,所以如果目标函数为求解最小值,则直接令目标函数为适应度函数即可。编写的适应度函数,语法如下:

  2. function f = fitnesscn(x)

  3. f = f(x);

  4. end

  5. 2.如果有约束条件(包括自变量的取值范围),对于求解函数的最小值问题,语法如下:

  6. function f = fitnessfcx(x)

  7. if x<=-1||x>3

  8. f = inf;

  9. else

  10. f = f(x);

  11. end

  12. end

3、交叉

一般采用单点交叉,在个体串中随机设定一个交叉点,进行交叉,也就是基因重组

改良交叉算法是采用多维向量空间下的的黄金分割点,具体可以参考《黄金分割下的遗传算法》。

4、变异(实值变异,二值变异)

变异算子的操作步骤:

     a、对种群中所有个体以事先设定的概率判断是否变异

     在第n代种群中,随机产生一个数 r∈(0,1),如果 r≤0.382+0.618^n−1,则变异概率为1/(N*M),(N为个体数目,M为参数个数),即让一个基因变异。

     b、对进行变异的个体随机选择变异位置

5、终止条件(繁殖多少代)

 
  1. 伪代码:

  2.  
  3. begin

  4. t=0

  5. 初始化种群p(t)=(x1,x2,x3...xn)

  6. 改良圈算法选择较为优良的种群

  7. 计算P(t)的适应值

  8. while(不满足停止准则)

  9. do

  10. begin

  11. t=t+1

  12. 从p(t+1)中选择p(t)

  13. 交叉变异重组p(t)

  14. 计算p(t)的适应值

  15. end

附1:改良圈算法

首先求得一个Hamilton圈,然后修改圈得到具有较小权的另一个Hamilton圈,直至无法改进则停止

构建新圈

对于 1≤i<i+1<j≤n,构建新的Hamilton圈
Cij = v1v2…vivjvj-1vj-2…vi+1vJ+1vJ+2…vnv1
它是由C中将vi和vj之间的边逆序得到的。
若 w(vivj)+w(vi+1vj+1)<w(vivi+1)+w(vjvj+1)
则该圈替换有效

附2:遗传算法的参数设计原则

1.种群的规模
种群不宜过大也不宜过小。种群规模的一个建议值为0-100。(50)

2.变异概率
变异概率也不宜过大或者过小。一般取值为0.0001-0.2

黄金分割:在第n代种群中,随机产生一个数 r∈(0,1),如果 r≤0.382+0.618^n−1,则变异概率为1/(N*M),(N为个体数目,M为参数个数),即让一个基因变异

3.交配概率
同上,不宜过大或者过小。一般取值 为0.4-0.99

4.进化代数
同上,不宜过大或者过小。一般取值为100-500。(100)

猜你喜欢

转载自blog.csdn.net/kwame211/article/details/81284497