代码之家  ›  专栏  ›  技术社区  ›  Humam Helfawi

矢量化函数中的调用模式搜索

  •  0
  • Humam Helfawi  · 技术社区  · 6 年前

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

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

    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 速度更快。不过,既然里面 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
    

    有没有办法用一个向量化的调用来替换循环 ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mohammad nagdawi    6 年前

    请考虑使用 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
    

    我希望这会有帮助