feval 在 matlab ga 优化中花费了大量时间

feval taking a lot of time in matlab ga optimization

我正在 运行 进行 GA 优化,在 fcnvectorizer.m 的 feval 行上浪费了很多时间。这是ga优化的私有函数。我有 运行 探查器,结果如下。

适应度函数调用1600次,共耗时9.8秒

下面的fval行一共调用了1600次,总共耗时117秒。

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

这里fun是我的fitness函数的函数句柄。上面的行应该简单地调用适应度函数并将结果分配给 y 向量。我无法理解为什么简单的适应度函数调用需要那么多时间。

我使用的是 Matlab 7.9.0(R2009b),下面是 memory 命令的输出

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);

无法改善 feval。所以决定完全绕过它。

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