feval在matlab ga优化中花了很多时间

时间:2015-02-14 09:25:54

标签: performance matlab genetic-algorithm

我正在运行ga优化,并且在fcnvectorizer.m的feval行中浪费了大量时间。这是ga优化的私有功能。我已经运行了profiler,结果如下。

健身功能被称为1600次,总共需要9.8秒。

以下fval行总共被调用1600次,总共需要117秒。

      y(i,:) = feval(fun,(pop(i,:))); 

在这里,fun是我的健身功能的功能句柄。上面的行应该简单地调用适应度函数并将结果分配给y向量。我不明白为什么简单的健身功能调用需要花费很多时间。

我正在使用Matlab 7.9.0(R2009b),以下是内存命令的输出

Maximum possible array:              25346 MB (2.658e+010 bytes) *
Memory available for all arrays:     25346 MB (2.658e+010 bytes) *
Memory used by MATLAB:                 661 MB (6.936e+008 bytes)
Physical Memory (RAM):               16324 MB (1.712e+010 bytes)

启动ga的代码片段:

 contract='NIFTY';
 dates=all_dates([20140801 20140831]); % all_dates between given two dates
 options=gaoptimset('PopInitRange',Bound,'PopulationSize',100,...
    'EliteCount',2, 'Generations',16,'StallGenL',8,...
    'Display','iter');
options.dates=dates;
for i=1:length(dates)
   options.data(i)=loaddata(contract,dates(i)); %loaddata is custom function to load data for a particular date.
end
fitnessFcn=@(x)fitness(x,options);
[x,fval] = ga(fitnessFcn,8,options);

1 个答案:

答案 0 :(得分:1)

无法想象改善feval。因此决定完全绕过它。

设置options.Vectorized =' on'并修改了适应度函数以获取输入数组。