遗传算法工具箱使用2.谢菲尔德大学工具箱函数

种群表示和初始化

函数 bs2rv:  二进制串到实值的转换

             Phen=bs2rv(Chrom,FieldD) 

             FieldD=[len, lb, ub, code, scale, lbin, ubin]

             code(i)=1为标准的二进制编码,code(i)=0为格雷编码

             scale(i)=0为算术刻度,scale(i)=1为对数刻度

函数 crtbp:  创建初始种群

            [Chrom,Lind,BaseV]=crtbp(Nind,Lind)    

            [Chrom,Lind,BaseV]=crtbp(Nind,BaseV)

            [Chrom,Lind,BaseV]=crtbp(Nind,Lind,BaseV)

             Nind指定种群中个体的数量,Lind指定个体的长度

函数 crtrp:  创建实值原始种群

            Chrom=crtrp(Nind,FieldDR)

适应度计算

函数 ranking:  基于排序的适应度分配(此函数是从最小化方向对个体进行排序的)

              FitV=ranking(ObjV)

              FitV=ranking(ObjV, RFun)

              FitV=ranking(ObjV, RFun, SUBPOP)

              Rfun(1)线性排序标量在[1 2]间为,非线性排序在[1 length(ObjV)-2]

              Rfun(2)指定排序方法,0为线性排序,1为非线性排序

              SUBPOP指明ObjV中子种群的数量,默认为1

选择

高级函数 select:  从种群中选择个体

                SelCh=select(SEL_F, Chrom, FitnV)

                SelCh=select(SEL_F, Chrom, FitnV, GGAP)

                SelCh=select(SEL_F, Chrom, FitnV, GGAP, SUBPOP)

                SEL_F是一字符串,为一低级选择函数名,如rws或sus

                GGAP指出了代沟,默认为1;也可大于1,允许子代数多于父代的数量

rws: 轮盘赌选择

     NewChrIx=rws(FitnV, Nsel) 使用轮盘赌选择从一个种群中选择Nsel个个体

     NewChrIx 是为育种选择的个体的索引值

sus:  随机遍历抽样

     NewChrIx=sus(FitnV, Nsel)

交叉

高级函数 recombin:  重组个体

                    NewChrom=recombin(REC_F, Chrom)

                    NewChrom=recombin(REC_F, Chrom, RecOpt)

                    NewChrom=recombin(REC_F, Chrom, RecOpt, SUBPOP)

                    REC_F是包含低级重组函数名的字符串,例如recdis,recint,reclin,xovdp, xovdprs, xovmp, xovsh, xovshrs, xovsp, xovsprs

recdis:    离散重组

          NewChrom=recdis(OldChorm)

recint:    中间重组

          NewChrom=recint(OldChorm)

reclin:    线性重组

          NewChrom=reclin(OldChorm)

xovdp:    两点交叉

          NewChrom=xovdp(OldChrom, XOVR)

          XOVR为交叉概率, 默认为0.7

Xovdprs:  减少代理的两点交叉

          NewChrom=xovdprs(OldChrom, XOVR)

Xovmp:   多点交叉

          NewChrom=xovmp(OldChrom, XOVR, Npt, Rs)

          Npt指明交叉点数, 0 洗牌交叉;1 单点交叉;2 两点交叉;  默认为0

          Rs指明使用减少代理, 0 不减少代理;1 减少代理;  默认为0

Xovsh:    洗牌交叉

          NewChrom=xovsh(OldChrom, XOVR)

Xovshrs:  减少代理的洗牌交叉

          NewChrom=xovshrs(OldChrom, XOVR)

Xovsp:    单点交叉

          NewChrom=xovsp(OldChrom, XOVR)

Xovsprs:  减少代理的单点交叉

          NewChrom=xovsprs(OldChrom, XOVR)

变异

高级函数 mutate:  个体的变异

                  NewChorm=mutate(MUT_F, OldChorm, FieldDR)

NewChorm=mutate(MUT_F, OldChorm, FieldDR, MutOpt)

NewChorm=mutate(MUT_F, OldChorm, FieldDR, MutOpt, SUBPOP)

MUT_F为包含低级变异函数的字符串,例如mut, mutbga, recmut

mut:  离散变异算子

      NewChrom=mut(OldChorm, Pm)

NewChrom=mut(OldChorm, Pm, BaseV)

      Pm为变异概率,默认为Pm=0.7/Lind

mutbga:  实值种群的变异(遗传算法育种器的变异算子)

NewChrom=mutbga(OldChorm, FieldDR)

          NewChrom=mubga(OldChorm, FieidDR, MutOpt)

          MutOpt(1)是在[ 0 1]间的重组概率的标量,默认为1

          MutOpt(2)是在[0 1]间的压缩重组范围的标量,默认为1(不压缩)

recmut:   具有突变特征的线性重组

          NewChrom=recmut(OldChorm, FieldDR)

          NewChrom=recmut(OldChorm, FieidDR, MutOpt)

         

重插入

函数 reins:  重插入子群到种群

            Chorm=reins(Chorm, SelCh)

            Chorm=reins(Chorm, SelCh, SUBPOP)

            Chorm=reins(Chorm, SelCh, SUBPOP, InsOpt, ObjVch)

            [Chorm, ObjVch]=reins(Chorm, SelCh, SUBPOP, InsOpt, ObjVch, ObjVSel)

            InsOpt(1)指明用子代代替父代的选择方法,0为均匀选择,1为基于适应度的选择,默认为0

            InsOpt(2)指明在[0 1]间每个子种群中重插入的子代个体在整个子种群的中个体的比率,默认为1

            ObjVch包含Chorm中个体的目标值,对基于适应度的重插入是必需的

            ObjVSel包含Selch中个体的目标值,如子代数量大于重插入种群的子代数量是必需的

其他函数

矩阵复试函数 rep:  MatOut=rep(MatIn, REPN)   REPN为复制次数

简单的遗传算法,计算函数最值. function ga_main() % 遗传算法程序 % n-- 种群规模% ger-- 迭代次数% pc--- 交叉概率% pm-- 变异概率 % v-- 初始种群(规模为n)% f-- 目标函数值% fit-- 适应度向量 % vx-- 最优适应度值向量% vmfit-- 平均适应度值向量 clear all; close all; clc;%清屏 tic;%计时器开始计时 n=20;ger=100;pc=0.65;pm=0.05;%初始化参数 %以上为经验值,可以更改。 % 生成初始种群 v=init_population(n,22); %得到初始种群,22串长,生成20*22的0-1矩阵 [N,L]=size(v); %得到初始规模行,列 disp(sprintf('Number of generations:%d',ger)); disp(sprintf('Population size:%d',N)); disp(sprintf('Crossover probability:%.3f',pc)); disp(sprintf('Mutation probability:%.3f',pm)); %sprintf可以控制输出格式 % 待优化问题 xmin=0;xmax=9; %变量X范围 f='x+10*sin(x.*5)+7*cos(x.*4)'; % 计算适应度,并画出初始种群图形 x=decode(v(:,1:22),xmin,xmax);"位二进制换成十进制,%冒号表示对所有行进行操作。 fit=eval(f);%eval转化成数值型的 %计算适应度 figure(1);%打开第一个窗口 fplot(f,[xmin,xmax]);%隐函数画图 grid on;hold on; plot(x,fit,'k*');%作图,画初始种群的适应度图像 title('(a)染色体的初始位置');%标题 xlabel('x');ylabel('f(x)');%标记轴 % 迭代前的初始化 vmfit=[];%平均适应度 vx=[]; %最优适应度 it=1; % 迭代计数器 % 开始进化 while it<=ger %迭代次数 0代 %Reproduction(Bi-classist Selection) vtemp=roulette(v,fit);%复制算子 %Crossover v=crossover(vtemp,pc);%交叉算子 %Mutation变异算子 M=rand(N,L)<=pm;%这里的作用找到比0.05小的分量 %M(1,:)=zeros(1,L); v=v-2.*(v.*M)+M;%两个0-1矩阵相乘后M是1的地方V就不变,再乘以2. NICE!!确实好!!!把M中为1的位置上的地方的值变反 %这里是点乘 %变异 %Results x=decode(v(:,1:22),xmin,xmax);%解码,求目标函数值 fit=eval(f); %计算数值 [sol,indb]=max(fit);% 每次迭代中最优目标函数值,包括位置 v(1,:)=v(indb,:); %用最大值代替 fit_mean=mean(fit); % 每次迭代中目标函数值的平均值。mean求均值 vx=[vx sol]; %最优适应度值 vmfit=[vmfit fit_mean];%适应度均值 it=it+1; %迭代次数计数器增加 end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值