遗传算法借鉴“适者生存”的遗传遗传学理论,将优化问题的求解表示成“染色体”的“适者生存”过程,通过“染色体”群的一代代复制、交叉、变异的进化,最终得到的是最适应环境的个体,从而得到问题的最优解或者满意解。这是一种高度并行、随机和自适应的通用的优化算法。
NO.1|原始的遗传算法
原始版本的遗传算法可以查看我之前发布的文章:一文搞清楚遗传算法(Genetic Algorithm,GA)详解,附带应用及源码
NO.2|改进遗传算法
针对适应度值标定问题本章提出以下计算公式:
(1)当适应度值低于平均适应度值时,说明该个体是性能不好的个体,对它就采用较大的交叉率和变异率;如果适应度值高于平均适应度值,说明该个体性能优良,对它就根据其适应度值取相应的交叉率和变异率。
(2)当适应度值越接近最大适应度值时,交叉率和变异率就越小;
(3)当适应度值等于最大适应度值时,交叉率和变异率的值为零。
这种调整方法对于群体处于进化后期比较合适,但对于进化初期不利,因为进化初期群体中的较优的个体几乎处于一种不发生变化的状态,而此时的优良个体不一定是优化的全局最优解,这容易使进化走向局部最优解的可能性增加。
道路交通信号优化
% 城市交通信号系统参数
C = 140; % 信号周期
L = 10; % 总损失时间
load('data.mat') % 包含交通流量q以及饱和流量xij
q = q./3600; % 转化为秒s
xij = xij./3600; % 转化为秒s
%该函数用来计算适应度值
t1 = x(1);
t2 = x(2);
t3 = x(3);
t4 = C-L - t1-t2-t3;
lamda(1) = t1/C; % 为第1相位的绿信比
lamda(2) = t2/C; % 为第2相位的绿信比
lamda(3) = t3/C; % 为第3相位的绿信比
lamda(4) = t4/C; % 为第4相位的绿信比
目标函数如下:
pick=rand(1,2);
while prod(pick)==0
pick=rand(1,2);
end
index=ceil(pick.*sizepop);
f1 = fun( chrom(index(1),:) ); % 个体适应度值
f2 = fun( chrom(index(2),:) ); % 个体适应度值
f3 = max(f1,f2); % 两者中大者
if f3>=favg
pcross = k1*(fmax - f3)./(fmax-favg);
else
pcross = k2;
end
NO.4|运行结果