MATLAB遗传算法函数总结

种群表示和初始化函数 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中子种群的数量,默认为

选择高级函数 select:
从种群中选择个体 
SelCh=select(SEL_F, Chrom, FitnV) 
SelCh=select(SEL_F, Chrom, FitnV, GGAP) 
SelCh=select(SEL_F, Chrom, FitnV, GGAP, SUBPOP) 

SEL_F是一字符串,为一低级选择函数名,如rwssus 
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 洗牌交叉;单点交叉;两点交叉;
默认为

Rs指明使用减少代理, 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]间的重组概率的标量,默认为
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为基于适应度的选择,默认为
InsOpt(2)指明在[0 1]间每个子种群中重插入的子代个体在整个子种群的中个体的比率,默认为

ObjVch包含Chorm中个体的目标值,对基于适应度的重插入是必需的 
ObjVSel包含Selch中个体的目标值,如子代数量大于重插入种群的子代数量是必需的 

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


------------------------------------------------------------------------------------
注:本总结来自网络,只为学习经验交流。
摘自:http://zdisheng.spaces.live.com/Blog/cns!B5BC47573DD7AA9B!395.entry



  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
简单的遗传算法,计算函数最值. 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
根据引用和引用可知,MATLAB中可以使用遗传算法进行优化问题的求解。MATLAB提供了遗传算法工具箱,其中包含了一些常用的遗传算法函数。其中,基本遗传算法(Simple Genetic Algorithm, SGA)是最基础的遗传算法之一,只使用选择算子、交叉算子和变异算子这三种遗传算子进行进化过程。通过随机方式产生初始群体后,通过适应度函数对每个个体进行评价,选择适应度值高的个体参与遗传操作,适应度低的个体被淘汰。经过复制、交叉和变异等操作,形成新一代种群,直到满足停止准则。具体的MATLAB函数名与参数使用方法可以查询MATLAB官方文档或者遗传算法工具箱的使用说明。123 #### 引用[.reference_title] - *1* [MATLAB 遗传算法](https://blog.csdn.net/qq_63585949/article/details/129014972)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* *3* [详解遗传算法(含MATLAB代码)](https://blog.csdn.net/m0_66889551/article/details/129262418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值