首页 > 解决方案 > 在矢量化函数中调用模式搜索

问题描述

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

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

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工作更快。但是,由于内部ObjectiveFunctionpatternsearch进程,因此这种矢量化将无用,因为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

标签: matlabvectorization

解决方案


请考虑使用arrayfun如下

function error = ObjectiveFunction(a, b, c)
    x = a.*b;
    y = c.*b;
    z = arrayfun(@(x1,y1) patternsearch(@fun, [x1, y1]),x,y);       
    error = x+y.*z;
end

我希望这可能会有所帮助


推荐阅读