Как использовать Particle Swarm Optimization, вызывая функцию из скрипта - PullRequest
0 голосов
/ 21 октября 2019

Я хочу использовать PSO в следующей структуре:

lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);
rng default  % For reproducibility
nvars = 2;

x = particleswarm(fun,nvars,lb,ub)

Где веселье сохраняется в другом скрипте со следующей структурой

function y = fun(x)

y = x(1)*exp(-norm(x)^2);
end

Но это не работает. Я вижу, что PSO работает, если я сохраняю веселье в одном и том же коде:

lb = [-10,-15];
ub = [15,20];
fun = @(x)x(1)*exp(-norm(x)^2);
options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);
rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub)

Но это не то, что я ищу. Я ищу применение роя в функции, сохраненной в другом скрипте. Как я мог заставить PSO работать в этом смысле?

1 Ответ

1 голос
/ 22 октября 2019

Просто добавьте @:

x = particleswarm(@fun,nvars,lb,ub)

Это гарантирует, что вы даете оптимизатору указатель на функцию fun, а не оцениваете функцию без каких-либо входных параметров. См. Matlab документы о функциональных ручках.

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