MATLAB遗传算法 单目标优化问题

clc

clear

close all

%%画出函数图

figure(1);

hold on;

lb=0;ub=31;%函数自变量范围【0,31】

ezplot('X^2',[lb,ub]);%画出函数曲线

xlabel('自变量/X')

ylabel('函数值/Y')

%%定义遗传算法参数

NIND=40;%个体数目

MAXGEN=20;%最大遗传代数

PRECI=20;%变量的二进制位数

GGAP=0.95;%代沟

px=0.7;%交叉概率

pm=0.01;%变异概率

trace=zeros(2,MAXGEN);%寻优结果的初始值

FieldD=[PRECI;lb;ub;1;0;1;1];%区域描述器

Chrom=crtbp(NIND,PRECI);%初始种群

%%优化

gen=0;%代计数器

X=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换

ObjV=X.^2;%计算目标函数值

while gen<MAXGEN

FitnV=ranking(ObjV);%分配适应度值

SelCh=select('sus',Chrom,FitnV,GGAP);%选择

SelCh=recombin('xovsp',SelCh,px);%重组

SelCh=mut(SelCh,pm);%变异

X=bs2rv(SelCh,FieldD);%子代个体的十进制转换

ObjVSel=X.^2;%计算子代的目标函数值

[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重新插入子代到父代,得到新品种

X=bs2rv(Chrom,FieldD);

gen=gen+1; %代计算器增加

[Y,I]=max(ObjV);%获取每代的最优解及其序号,Y为最优解,I为个体的序号

trace(1,gen)=X(I);%记下每代的最优值

trace(2,gen)=Y;%记下每代的最优值

end

plot(trace(1,:),trace(2,:),'bo');%画出每代的最优点

grid on;

plot(X,ObjV,'b*');%画出最后一代的种群

hold off

%%画进化图

figure(2);

plot(1:MAXGEN,trace(2,:));

grid on

xlabel('遗传代数')

ylabel('解的变化')

title('进化过程')

bestY=trace(2,end);

bestX=trace(1,end);

fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值