回 帖 发 新 帖 刷新版面

主题:求教调用toolbox的方法和关于遗传算法的一些问题

首先请问调用toolbox里的工具箱是不是把它复制到work里然后 编写要运行的程序然后也放到work里就可以了?

然后借用网上一个基于matlab的遗传算法的例子 在-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的最小值 
(其中我已下了goatv5工具箱)下面是例子的分析: 
【分析】种群大小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') 

我的问题是1:sol表示解空间吗还是表示种群2:为什么没有把十进制数转化为2进制的代码3:x=sol(1:numv)是什么意思 工具箱里没有sol函数!!4:适应度函数中怎么会numv=size(sol,2)-1? 
 诚心请教 
[em2]

回复列表 (共5个回复)

沙发


你用的是gaot工具箱吧?
把gaot工具箱的函数和编写的函数都放到work文件夹中。
问题一:
sol表示解空间,种群在ga函数里创建
问题二:
由于你的ga输入的参数很多都没有设置,ga函数的默认是实数类型,所以没有把十进制数转化为2进制,那你说为什么要转化为二进制呢?
问题三:
x=sol(1:numv)表示解空间矩阵,sol是变量名而非函数名
问题四:
因为numv表示染色体中基因的个数,不包含目标值,而sol表示除了包含染色体中的基因,而且还包含了计算出的目标值,所以在确定染色体中基因的个数时必须把计算出的目标值减掉。这是ga.m函数中定义的,没有别的原因。
不知这样回答是否满意?
[em2]

板凳


其实也不用把Gaot中的m文件都复制到work文件夹中,你可以先把Gaot复制到toolbox中,再打开matlab的主界面,打开file下拉菜单的set path命令,你会看到一个小的窗口,Add folder用来选择你刚刚复制Gaot文件夹,然后点击save.这样Gaot中的命令就添加到你的toolbox中了,你可以在command window中查看一下Gaot中的命令。

3 楼

楼上说的我试了,可行,呵呵!

4 楼


你们这些目标函数和约束条件都太简单了;

5 楼

谢谢,我搞定了,可是又出来问题了,说是达到运行最大次数500了,怎么改呢???

我来回复

您尚未登录,请登录后再回复。点此登录或注册