向量化功能中的调用模式搜索

时间:2018-10-08 17:55:41

标签: matlab vectorization

我有一个向量化函数,它是优化程序(遗传算法)的目标函数。

此函数内部有一个快速优化,它是该函数计算的一部分,如下所示:

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的矢量化调用来代替循环?

1 个答案:

答案 0 :(得分:1)

请考虑如下使用return

arrayfun

我希望这会有所帮助