поиск шаблона вызова в векторизованной функции - PullRequest
0 голосов
/ 08 октября 2018

У меня есть векторизованная функция, которая является целевой функцией для оптимизатора (генетический алгоритм).

Внутри этой функции есть быстрая оптимизация, которая является частью вычисления этой функции следующим образом:

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 голосов
/ 09 октября 2018

Пожалуйста, рассмотрите возможность использования 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

Я надеюсь, что это может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...