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' 并修改适应度函数以获取输入数组。
我正在 运行 进行 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' 并修改适应度函数以获取输入数组。