没有合适的资源?快使用搜索试试~ 我知道了~
第七章-遗传算法应用举例.doc.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 12 浏览量
2021-12-17
09:49:43
上传
评论
收藏 1.86MB PDF 举报
温馨提示
试读
36页
。。。
资源推荐
资源详情
资源评论
第七章 遗传算法应用举例
遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它
不依赖于问题具体的领域。随着对遗传算法技术的不断研究,人们对遗传算法的实际应用越
来越重视,它已经广泛地应用于函数优化、组合优化、自动控制、机器人学、图象处理、人
工生命、遗传编码、机器学习等科技领域。遗传算法已经在求解旅行商问题、背包问题、装
箱问题、图形划分问题等多方面的应用取得了成功。本章通过一些例子,介绍如何利用第五
章提供的遗传算法通用函数,编写 MATLAB程序,解决实际问题。
7.1 简单一元函数优化实例
利用遗传算法计算下面函数的最大值:
f (x) x sin(10
x) 2.0,x [1,2]
选择二进制编码,种群中个体数目为 40,每个种群的长度为 20,使用代沟为 0.9,最大
遗传代数为 25。
下面为一元函数优化问题的 MATLAB 代码。
figure(1);
fplot ('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线
% 定义遗传算法参数
NIND= 40; % 个体数目(Number of individuals)
MAXGEN = 25; % 最大遗传代数(Maximum number of generations)
PRECI = 20; % 变量的二进制位数(Precision of variables)
GGAP = 0.9; % 代沟(Generation gap)
trace=zeros (2, MAXGEN); % 寻优结果的初始值
FieldD = [20;-1;2;1;0;1;1]; % 区域描述器(Build field descriptor)
Chrom = crtbp(NIND, PRECI); % 初始种群
gen = 0; % 代计数器
variable=bs2rv(Chrom,FieldD); % 计算初始种群的十进制转换
ObjV = variable.*sin (10*pi*variable)+2.0; % 计算目标函数值
while gen < MAXGEN,
FitnV = ranking (-ObjV); % 分配适应度值(Assign fitness values)
SelCh = select ('sus', Chrom, FitnV, GGAP); % 选择
SelCh = recombin ('xovsp',SelCh,0.7); % 重组
SelCh = mut(SelCh); % 变异
variable=bs2rv(SelCh,FieldD); % 子代个体的十进制转换
ObjVSel =variable.*sin(10*pi*variable)+2.0; % 计算子代的目标函数值
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入子代的新种群
gen = gen+1; % 代计数器增加
% 输出最优解及其序号,并在目标函数图象中标出,Y 为最优解,I 为种群的序号
[Y,I]=max(ObjV),hold on;
plot (variable (I),Y, 'bo');
trace (1,gen)=max (ObjV); %遗传算法性能跟踪
97
trace (2,gen)=sum (ObjV)/length (ObjV);
end
variable=bs2rv (Chrom,FieldD); %最优个体的十进制转换
hold on,grid;
plot (variable',ObjV','b*');
figure (2);
plot (trace (1,:)');
hold on;
plot (trace (2,:)','-.');grid;
legend ('解的变化','种群均值的变化')
使用基于适应度的重插入确保四个最适应的个体总是被连续传播到下一代。这样在每一
代中有 36(NIND*GGAP)个新个体产生。
区域描述器 FieldD 描述染色体的表示和解释,每个格雷码采用 20 位二进制,变量区间为
[-1,2]。
程序段 Chrom = crtbp (NIND, PRECI)表示一个初始种群 Chrom 被函数 crtbp 创建,它是由
NIND 个均匀分布长度为 PRECI 的二进制串矩阵构成。
基于排序的适应度分配计算由程序段 FitnV = ranking (-ObjV)实现。
对这个等级评定算法的缺省设置是选择等差为 2 和使用线性评估,给最适应个体的适应
度值为 2,最差个体的适应度值为 0,这里的评定算法假设目标函数是最小化的,所以 ObjV
乘了一个负号,使目标函数为最大化。适应度值结果被向量 FitnV 返回。
选择层使用高级函数选择调用低级函数随机遍历抽样例程 sus,SelCh 包含来自原始染色
体的 GGAP *NIND 个个体,这些个体将使用高级函数 recombin 进行重组,recombin 使个体通
过 SelCh 被选择再生产,并使用单点交叉例程 xovsp,使用交叉概率 Px =0.7 执行并叉。交叉
后产生的子代被同一个矩阵 SelCh 返回,实际使用的交叉例程通过支持使用不同函数名字串传
递给 recombin 而改变。
为了产生一组子代,变异使用变异函数mut。子代再次由矩阵 SelCh 返回,变异概率缺省
值 PM=0.7/Lind= 0.0017,这里 Lind 是假定的个体长度。再次使用 bs2rv,将个体的二进制编
码转换为十进制编码,计算子代的目标函数值 ObjVSel。
由于使用了代沟,所以子代的数量比当前种群数量要小,因此需要使用恢复函数 reins。
这里 Chrom 和 SelCh 是矩阵,包含原始种群和子代结果。这两个事件的第一个被使用单个种
群和采用基于适应度的恢复,基于适应度的恢复用 SelCh 中的个体代替 Chrom 中最不适应的
个体。新种群中的个体是由原始种群中的优良个体和子代中新产生的个体组成。 原始种群中
个体的目标函数值 ObjV 随后又作为函数 reins 的输入参数,子代中个体的目标函数值由
ObjVSel 提供。Reins 返回具有插入子代的新种群 Chrom 和该种群中个体的目标函数值 ObjV。
每次迭代后的最优解和解的均值存放在 trace 中。这个遗传优化的结果包含在矩阵 ObjV
中。决策变量的值为 variable (I)。
画出迭代后个体的目标函数值分布图和遗传算法性能跟踪图。
遗传算法的运行结果如下:
(1)图 7.1 为目标函数
f (x) x sin(10
x) 2.0,x [1,2]
的图象。
98
图 7.1 目标函数图像
2)图 7.2 为目标函数的图像和初始随机种群个体分布图。
图 7.2 初始种群分布图
3)经过 1 次遗传迭代后,寻优结果如图 7.3 所示。x=1.6357,f(x)=3.4729。
图 7.3 一次遗传迭代后的结果
4)经过 10 次遗传迭代后,寻优结果如图 7.4 所示。x= 1.8518,f(x)=3.8489。
99
(
(
(
图 7.4 经过 10 次遗传迭代后的结果
(5)经过 25 次遗传迭代后,寻优结果如图 7.5 所示。
x
=1.8505,f(x)=3.8503。
图 7.5 经过 25 次遗传迭代后的结果
(6)经过 25 次迭代后最优解的变化和种群均值的变化见图 7.6。
图 7.6 经过 25 次迭代后最优解的变化和种群均值的变化
7.2 多元单峰函数的优化实例
目标函数是 De Jong 函数,是一个连续、凸起的单峰函数,它的 M 文件 objfun1 包含在
GA 工具箱软件中。
De Jong 函数的表达式为
f (x)
x
i
2
, 512 x
i
512
i 1
n
求解
min f (x), 512 x
i
512
这里 n 是定义问题维数的一个值。这个例子中选取 n=20。
由 De Jong 函数的表达式可以看出,De Jong 函数是一个简单的平方和函数,只有一个极
小点(0,0,…,0),理论最小值为 f(0,0,…,0)=0。
程序的主要变量:个体的数量 NIND 为 40,最大遗传代数为 MAXGEN=300,变量维数为
NVAR=20,每个变量使用 20 位表示,即 PRECI = 20,使用代沟 GGAP=0.9。
下面为求解 De Jong 函数最小值的 MATLAB 代码。
% 定义遗传算法参数
NIND = 40; % 个体数目(Number of individuals)
MAXGEN =500; % 最大遗传代数(Maximum number of generations)
100
NVAR = 20; % 变量的维数
PRECI = 20; % 变量的二进制位数(Precision of variables)
GGAP = 0.9; % 代沟(Generation gap)
trace=zeros (MAXGEN,2);
% 建立区域描述器(Build field descriptor)
FieldD = [rep ([PRECI],[1,NVAR]);rep ([-512;512],[1,NVAR]);rep ([1;0;1;1],[1,NVAR])];
Chrom = crtbp (NIND, NVAR*PRECI); % 创建初始种群
gen = 0; % 代计数器
ObjV = objfun1(bs2rv (Chrom,FieldD)); % 计算初始种群个体的目标函数值
while gen < MAXGEN, % 迭代
FitnV = ranking (ObjV); % 分配适应度值(Assign fitness values)
SelCh = select ('sus', Chrom, FitnV, GGAP); % 选择
SelCh = recombin ('xovsp',SelCh,0.7); % 重组
SelCh = mut (SelCh); % 变异
ObjVSel = objfun1 (bs2rv (SelCh,FieldD)); % 计算子代目标函数值
[Chrom ObjV]=reins (Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入
gen = gen+1; % 代计数器增加
% 输出最优解及其对应的 20 个自变量的十进制值,Y 为最优解,I 为种群的序号
trace (gen,1)=min (ObjV); % 遗传算法性能跟踪
trace (gen,2)=sum (ObjV)/length (ObjV);
end
plot (trace (:,1));hold on;
plot (trace (:,2),'-.');grid;
legend ('种群均值的变化','解的变化')
区域描述器的构建采用矩阵复制函数 rep 建立矩阵 FieldD,描述染色体的表示和解释。
一个初始种群被函数 crtbp 创建,随后产生一个矩阵 Chrom,它由 NIND 个均匀分布长度
为 NVAR*PRECI 的二进制串构成。
使用函数 objfun1 重新计算目标函数,初始种群中的所有个体的目标函数值由下面程序段
计算:
ObjV = objfun1(bs2rv (Chrom, FieldD));
函数 bs2rv 根据域描述器 FieldD 转换矩阵 Chrom 的二进制串为实值,返回一实值表现型
的矩阵。这个 bs2rv 返回值矩阵通过直接作为目标函数 objfun1 的输入变量,目标函数结果被
返回在矩阵 ObjV 中。
这个例子中基于排序的适应度分配计算由下面程序段实现:
FitnV = ranking (ObjV);
对这个等级评定算法的缺省设置是选择等差 2,使用线性评估,给最适应个体的适应度值
为 2 和最差个体的适应度值为 0。适应度值结果被向量 FitnV 返回。
使用高级函数选择调用低级函数随机遍历抽样例程 sus,程序段为:
SelCh = select (’sus’, Chrom, FitnV, GGAP);
后面的选择中,SelCh 包含来自原始染色体的 GGAP *NIND 个个体,这些个体将使用高
级函数 recombin 进行重组,程序段为:
SelCh = recombin ('xovsp', SelCh, 0.7);
函数 recombin 使个体通过 SelCh 被选择再生产,并使用单点交叉例程函数 xovsp,使用交
叉概率 Px =0.7 执行并叉。个体作为矩阵 SelCh 的输入被排序,以便使奇数位置的个体与它相
邻的个体进行交叉,如果 SelCh 个体的数量是奇数个,则最后一个个体不进行交叉而返回。交
叉后产生的子代被同一个矩阵 SelCh 返回,实际使用的交叉例程通过支持使用不同函数名字串
101
剩余35页未读,继续阅读
资源评论
春哥111
- 粉丝: 1w+
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功