我正在运行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);
答案 0 :(得分:1)
无法想象改善feval。因此决定完全绕过它。
设置options.Vectorized =' on'并修改了适应度函数以获取输入数组。