⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga.m

📁 用matlab编写遗传算法的源代码。是很实用的一个小程序。
💻 M
字号:
clear 
clc
echo on
GGAP=0.2;%代沟
XOVR=0.6;%交叉率
NVAR=20;%变量维数
MUTR=1/NVAR;%变异率
MAXGEN=60;%最大遗传代数(迭代次数)
INSR=0.9;%插入率
SUBPOP=10;%子种群数
MIGR=0.2;%迁移率
MIGGEN=60;%每20代迁移个体
NIND=20;%个体数目
RANGE=[0;1];%变量范围
SEL_F='rws';%选择函数名
XOV_F='recdis';%重组函数名
MUT_F='mutbga';%变异函数名()

%FieldDD=rep(RANGE,[1,NVAR])%变量范围
FieldDD1=load('ganox1.txt')
FieldDD2=load('gaxl1.txt')
FieldDD3=load('gafuji1.txt')
trace=zeros(MAXGEN,2)%性能跟踪
Chrom=crtrp(SUBPOP*NIND,FieldDD1)
Chrom1=crtrp(SUBPOP*NIND,FieldDD1)'%初始化种群
Chrom0=crtrp(SUBPOP*NIND,FieldDD2)
Chrom2=crtrp(SUBPOP*NIND,FieldDD2)'%初始化种群
Chrom5=crtrp(SUBPOP*NIND,FieldDD3)
Chrom7=crtrp(SUBPOP*NIND,FieldDD3)'%初始化种群
gen=0;
load testnox net%载入训练好的网络
ObjV=sim(net, Chrom1)%获得目标函数
load testxl net%载入训练好的网络
ObjVV=sim(net, Chrom2)%获得目标函数
load testfuji net%载入训练好的网络
ObjVVV=sim(net, Chrom7)%获得目标函数
ObjV1=ObjV(1,:)'%优化第一个参数
ObjV2=ObjVV(1,:)'%优化第一个参数
ObjV3=ObjVVV(1,:)'%优化第一个参数
while gen<MAXGEN,%代循环
    FitnV=ranking(ObjV1,[2,0],SUBPOP)%分配适应度值
    SelCh=select(SEL_F,Chrom,FitnV,GGAP,SUBPOP)%选择
    SelCh=recombin(XOV_F,SelCh,XOVR,SUBPOP)%重组
    SelCh=mutate(MUT_F,SelCh,FieldDD1,[MUTR],SUBPOP)%变异  
    Chrom3=SelCh'
    load testnox net%载入训练好的网络
    ObjVOff1=sim(net, Chrom3)%计算子代目标函数   
    ObjVOff1=ObjVOff1(1,:)'%子代输出中的第一个函数
    [Chrom,ObjV1]=reins(Chrom,SelCh,SUBPOP,[1,INSR],ObjV1,ObjVOff1)%代替
   
    
    FitnV1=ranking(ObjV2,[2,0],SUBPOP)%分配适应度值
    SelCh1=select(SEL_F,Chrom0,FitnV1,GGAP,SUBPOP)%选择
    SelCh1=recombin(XOV_F,SelCh1,XOVR,SUBPOP)%重组
    SelCh1=mutate(MUT_F,SelCh1,FieldDD2,[MUTR],SUBPOP)%变异
    Chrom4=SelCh1'
    load testxl net%载入训练好的网络
    ObjVOff2=sim(net, Chrom4)%计算子代目标函数   
    ObjVOff2=ObjVOff2(1,:)'%子代输出中的第一个函数
    [Chrom0,ObjV2]=reins(Chrom0,SelCh1,SUBPOP,[1,INSR],ObjV2,ObjVOff2)%代替
    
    FitnV2=ranking(ObjV3,[2,0],SUBPOP)%分配适应度值
    SelCh2=select(SEL_F,Chrom5,FitnV2,GGAP,SUBPOP)%选择
    SelCh2=recombin(XOV_F,SelCh2,XOVR,SUBPOP)%重组
    SelCh2=mutate(MUT_F,SelCh2,FieldDD3,[MUTR],SUBPOP)%变异
    Chrom6=SelCh2'
    load testfuji net%载入训练好的网络
    ObjVOff3=sim(net, Chrom6)%计算子代目标函数   
    ObjVOff3=ObjVOff3(1,:)'%子代输出中的第一个函数
    [Chrom5,ObjV3]=reins(Chrom5,SelCh2,SUBPOP,[1,INSR],ObjV3,ObjVOff3)%代替
    
    gen=gen+1
  [trace(gen,1),I]=min(0.5*(1-ObjV1)+0.4*ObjV2+0.1*ObjV3)%
   trace(gen,2)=mean(ObjV1)%解得平均值
end 
%[Y1,I]=min(ObjV)
%[Y,I]=min(ObjV1)%最优控制向量值及其序
%[Y,I]=min(0.6*(0.987-ObjV1)+0.4*(0.92603-ObjV2))%
[Y,I]=min(0.5*(1-ObjV1)+0.4*ObjV2+0.1*ObjV3)%
%t=Chrom(I,:)
%load testnox net%载入训练好的网络
t=Chrom0(I,:)
load testxl net%载入训练好的网络
%t=Chrom5(I,:)
%load testfuji net%载入训练好的网络
A=sim(net,t') 

subplot(211)%最优控制向量分布图
plot(Chrom(I,:));hold on;
plot(Chrom(I,:),'.');grid
legend('最优控制向量')
subplot(212);%遗传算法性能跟踪分布图
%plot(trace(:,1));hold on;
plot(trace(:,1),'*');grid
plot(trace(:,2),'.')
legend('解的变化','种群均值的变化');xlabel('迭代次数')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -