24小时热门版块排行榜    

查看: 686  |  回复: 2

witzwq

银虫 (小有名气)

[求助] 遗传算法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     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');%b是blue,o是圆圈
    trace(1,gen)=max(ObjV);%遗传算法性能跟踪
    trace(2,gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom,FieldD);%最优个体的十进制转换
hold on ;
grid on;%显示网格线
plot(variable',ObjV','b*');
figure(2);
plot(trace(1,');%plot函数可以接受字符串输入变量,这些字符串输入变量用来指定不同的颜色、线型和标记符号。:表示点线
hold on;
plot(trace(2,','-.');grid;%-.表示点划线
legend('解的变化','种群均值的变化');%图形加标注
   


麻烦问一下 染色体数目会变为36?
怎么样解决,使其一直为40?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

web22

新虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★
witzwq: 金币+5, 有帮助 2013-05-13 20:06:02
能不能将crtbp也贴上来,上面这个执行不了
2楼2013-05-02 23:39:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

web22

新虫 (初入文坛)

搞错了,是我的matlab没装遗传算法工具箱
3楼2013-05-02 23:52:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 学员Uaj2Wn 的主题更新
信息提示
请填处理意见