我有一个向量化函数,它是优化程序(遗传算法)的目标函数。
此函数内部有一个快速优化,它是该函数计算的一部分,如下所示:
function error = ObjectiveFunction(a, b, c)
x = a.*b;
y = c.*b;
z = patternsearch(@fun, [x, y]);
error = x+y.*z;
end
solution = ga(@ObjectiveFunction, 'vectorized', true);
ObjectiveFunction
接受解的向量。这使ga
的运行速度更快。但是,由于在ObjectiveFunction
内部有patternsearch
进程,因此此向量化将无用,因为patternsearch
(作为优化程序)不能以向量化方式工作。
所以我必须将函数编辑为:
function error = ObjectiveFunction(a, b, c)
x = a.*b;
y = c.*b;
for i = 1:size(x,1)
z(i) = patternsearch(@fun, [x(i), y(i)]);
end
error = x+y.*z;
end
总有没有用对patternsearch
的矢量化调用来代替循环?
答案 0 :(得分:1)
请考虑如下使用return
arrayfun
我希望这会有所帮助