matlab有遗传算法工具箱。
核心函数:
(1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数
【输出参数】
pop--生成的初始种群
【输入参数】
num--种群中的个体数目
bounds--代表变量的上下界的矩阵
eevalFN--适应度函数
eevalOps--传递给适应度函数的参数,默认为[]
options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如
precision--变量进行二进制编码时指定的精度 默认为[1e-6 1]
F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)
(2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数
【输出参数】
x--求得的最优解
endPop--最终得到的种群
bPop--最优种群的一个搜索轨迹
【输入参数】
bounds--代表变量上下界的矩阵
evalFN--适应度函数
evalOps--传递给适应度函数的参数
startPop-初始种群
opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0]
termFN--终止函数的名称,如['maxGenTerm']
termOps--传递个终止函数的参数,如[100]
selectFN--选择函数的名称,如['normGeomSelect']
selectOps--传递个选择函数的参数,如[0.08]
xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover']
xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]
mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']
mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]
注意】matlab工具箱函数必须放在工作目录下
【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9
【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08
【程序清单】
交叉概率为0.95,变异概率为0.08
比较简单的设置方法
设置xOverFNs为'simpleXover',xOverOps=0.95
设置mutFNs为'binaryMutation',mutOps=0.08
%编写目标函数
function[sol,eval]=fitness(sol,options)
x=sol(1);
eval=x+10*sin(5*x)+7*cos(4*x);
%把上述函数存储为fitness.m文件并放在工作目录下
initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10
[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...
[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遗传迭代
运算借过为:x =
7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)
注:遗传算法一般用来取得近似最优解,而不是最优解。
遗传算法实例2
【问题】在-5<=Xi<=5,i=1,2区间内,求解
f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
%源函数的matlab代码
function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
%适应度函数的matlab代码
function [sol,eval]=fitness(sol,options)
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
eval=-eval;
%遗传算法的matlab代码
bounds=ones(2,1)*[-5 5];
[p,endPop,bestSols,trace]=ga(bounds,'fitness')
注:前两个文件存储为m文件并放在工作目录下,运行结果为
p =
0.0000 -0.0000 0.0055
大家可以直接绘出f(x)的图形来大概看看f(x)的最值是多少,也可是使用优化函数来验证。matlab命令行执行命令:
fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])
evalops是传递给适应度函数的参数,opts是二进制编码的精度,termops是选择maxGenTerm结束函数时传递个maxGenTerm的参数,即遗传代数。xoverops是传递给交叉函数的参数。mutops是传递给变异函数的参数。
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
遗传工具箱gaot.zip (72个子文件)
遗传工具箱gaot
ga.asv 16KB
arithXover.m 1KB
optMaxGenTerm.m 2KB
unifMutation.m 2KB
inversionMutation.m 2KB
shiftMutation.m 2KB
coranaMin.m 1KB
roulette.asv 920B
simpleXover.asv 2KB
tuihuo.m 1009B
新建 文本文档.txt 3KB
gaZBGradEval.m 684B
b2f.m 1KB
fitness.m 104B
coranaEval.m 1KB
erXover.m 2KB
adjswapMutation.m 1KB
simpleXover.m 2KB
gaMichEval.m 193B
partmapXover.m 2KB
floatGradExample.m 2KB
uniformXover.m 2KB
calcbits.m 1KB
linerorderXover.m 2KB
binaryMutation.m 1KB
multiNonUnifMutation.m 2KB
coranaFeval.m 2KB
singleptXover.m 2KB
floatExample.m 2KB
gademo2.m 3KB
EER.m 2KB
tournSelect.m 2KB
gaZBGrad.m 174B
delta.m 1KB
ga_th.asv 15KB
normGeomSelect.m 2KB
tspEval.m 157B
gademo1.m 4KB
maxGenTerm_th.m 516B
swapMutation.m 2KB
README 1KB
Contents.m 5KB
tuihuo.asv 974B
parse.m 1KB
gaotv5.ps 130KB
roulette.m 951B
新建 文本文档.asv 3KB
ga_th.m 15KB
binaryExample.m 2KB
maxGenTerm.m 1KB
f2b.m 1KB
ga.m 16KB
orderbasedXover.m 2KB
ga1.m 11KB
dists.m 7KB
threeswapMutation.m 1KB
boundaryMutation.m 2KB
initializega.m 1KB
startup.m 49B
cyclicXover.m 2KB
heuristicXover.m 2KB
gademo3.m 6KB
plotCorana.m 514B
enhancederXover.m 2KB
f.m 137B
partmapXover.asv 2KB
initializeoga.m 2KB
gademo1eval1.m 1KB
initializeoga.asv 2KB
orderBasedExample.m 3KB
nonUnifMutation.m 2KB
gademo.m 4KB
共 72 条
- 1
资源评论
- ylfjida20092013-03-04那本很有名的Matlab遗传工具箱与应用书上的例子都是基于Sheffield大学Matlab遗传算法工具箱的,而不是基于goat的,慎重。
- GraceZXKL2013-12-03这个没有使用例子,
FPGA-ALGOer
- 粉丝: 43
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功