У меня есть векторизованная функция, которая является целевой функцией для оптимизатора (генетический алгоритм).
Внутри этой функции есть быстрая оптимизация, которая является частью вычисления этой функции следующим образом:
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
?