用遗传算法解决多元函数的优化问题
2018-02-04 15:45
597 查看
opt_minmax=1;%目标优化类型;1最大化、-1最小化
num_ppu=60; %种群规模;个体个数
num_gen=100; %遗传最大代数
num_v=2; %变量个数
len_ch=20; %基因长度
gap=0.9; %代沟
sub=-10; %函数取值下限
up=10; %函数取值的上限
cd_gray=1; %为防止汉明悬崖,使用格雷编码;若不使用,则取值为0
sc_log=0;
trace=zeros(num_gen,2);
fieldd=[rep([len_ch],[1,num_v]);rep([sub;up],[1,num_v]);rep([1-cd_gray;sc_log;1;1],[1,num_v])];
chrom=crtbp(num_ppu,len_ch*num_v);%区域描述器
k_gen=0;
x=bs2rv(chrom,fieldd);
fun_v=fun_mutv(x(:,1),x(:,2));%计算目标函数值
[tx,ty]=meshgrid(-10:.1:10);
mesh(tx,ty,fun_mutv(tx,ty))
xlabel('x')
ylabel('y')
zlabel('z')
title('多元函数优化结果')
holdon
whilek_gen<num_gen
fit_v=ranking(-opt_minmax*fun_v); %计算目标函数适应度
selchrom=select('rws',chrom,fit_v,gap);%使用轮盘赌选择
selchrom=recombin('xovsp',selchrom); %交叉
selchrom=mut(selchrom);%变异
x=bs2rv(selchrom,fieldd);%子代个体翻译
fun_v_sel=fun_mutv(x(:,1),x(:,2));%计算子代个体对应目标函数值
fit_v_sel=ranking(-opt_minmax*fun_v_sel);
[chrom,fun_v]=reins(chrom,selchrom,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel);%根据目标函数值将子代个体插入新种群
[f,id]=max(fun_v); %寻找当前种群最优解
x=bs2rv(chrom(id,:),fieldd);
f=f*opt_minmax;
fun_v=fun_v*opt_minmax;
plot3(x(1,1),x(1,2),f,'k*')
hold on
k_gen=k_gen+1;
trace(k_gen,1)=f;
trace(k_gen,2)=mean(fun_v);
end
figure
plot(trace(:,1),'r-*')
holdon
plot(trace(:,2),'b-o')
legend('各子代种群最优解','各子代种群平均值')
xlabel('迭代次数')
ylabel('目标函数优化情况')
title('多元函数优化过程')
functionmy=fun_mutv(x,y) %多元函数的描述
t1=zeros(size(x));
t2=t1;
fori=1:5
t1=t1+i*sin((i+1)*x+i);
t2=t2+i*cos((i+1)*y+i);
end
my=t1.*t2;
end
num_ppu=60; %种群规模;个体个数
num_gen=100; %遗传最大代数
num_v=2; %变量个数
len_ch=20; %基因长度
gap=0.9; %代沟
sub=-10; %函数取值下限
up=10; %函数取值的上限
cd_gray=1; %为防止汉明悬崖,使用格雷编码;若不使用,则取值为0
sc_log=0;
trace=zeros(num_gen,2);
fieldd=[rep([len_ch],[1,num_v]);rep([sub;up],[1,num_v]);rep([1-cd_gray;sc_log;1;1],[1,num_v])];
chrom=crtbp(num_ppu,len_ch*num_v);%区域描述器
k_gen=0;
x=bs2rv(chrom,fieldd);
fun_v=fun_mutv(x(:,1),x(:,2));%计算目标函数值
[tx,ty]=meshgrid(-10:.1:10);
mesh(tx,ty,fun_mutv(tx,ty))
xlabel('x')
ylabel('y')
zlabel('z')
title('多元函数优化结果')
holdon
whilek_gen<num_gen
fit_v=ranking(-opt_minmax*fun_v); %计算目标函数适应度
selchrom=select('rws',chrom,fit_v,gap);%使用轮盘赌选择
selchrom=recombin('xovsp',selchrom); %交叉
selchrom=mut(selchrom);%变异
x=bs2rv(selchrom,fieldd);%子代个体翻译
fun_v_sel=fun_mutv(x(:,1),x(:,2));%计算子代个体对应目标函数值
fit_v_sel=ranking(-opt_minmax*fun_v_sel);
[chrom,fun_v]=reins(chrom,selchrom,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel);%根据目标函数值将子代个体插入新种群
[f,id]=max(fun_v); %寻找当前种群最优解
x=bs2rv(chrom(id,:),fieldd);
f=f*opt_minmax;
fun_v=fun_v*opt_minmax;
plot3(x(1,1),x(1,2),f,'k*')
hold on
k_gen=k_gen+1;
trace(k_gen,1)=f;
trace(k_gen,2)=mean(fun_v);
end
figure
plot(trace(:,1),'r-*')
holdon
plot(trace(:,2),'b-o')
legend('各子代种群最优解','各子代种群平均值')
xlabel('迭代次数')
ylabel('目标函数优化情况')
title('多元函数优化过程')
functionmy=fun_mutv(x,y) %多元函数的描述
t1=zeros(size(x));
t2=t1;
fori=1:5
t1=t1+i*sin((i+1)*x+i);
t2=t2+i*cos((i+1)*y+i);
end
my=t1.*t2;
end
相关文章推荐
- 遗传算法解决函数优化问题
- 遗传算法解决函数优化问题
- 使用遗传算法解决多变量函数优化问题!
- 初学遗传算法解决tsp问题(C++)
- 解决mysql卡死的问题 彻底优化mysql
- 在Ubuntu上源码安装MySQL+安装问题解决+安全优化
- 遗传算法解决TSP问题(c++实现)
- CMA-ES算法解决连续优化问题
- apache配置优化 - 解决apache环境下网站访问速度慢的问题(重点参考)
- android问题及其解决-优化listView卡顿和怎样禁用ListView的fling
- 优化篇 05. 解决加入域后打开网页响应慢的问题 ❀ Windows Server 2016
- EBS的优化问题解决思路
- 遗传算法解决0-1背包问题
- C++解决最大子列和问题,算法时间复杂度优化
- Tair LDB基于Prefixkey的范围查找性能优化项目之后续问题解决记录
- 如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
- Bitmap OOM问题解决及优化
- 解决XP越用越慢的问题,很好的XP优化方案
- eclipse运行速度优化(解决狂读盘、发布慢、CPU100%等问题)
- android问题及其解决-优化listView卡顿和如何禁用ListView的fling