用遗传算法解决多元函数的优化问题

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

  • 2
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值