如何使用粒子群优化从脚本调用函数
How to use Particle Swarm Optimization calling a function from a script
我想在以下结构中使用 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)
fun 在其他脚本中的保存位置,结构如下
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)
但这不是我要找的。我正在寻找在另一个脚本中保存的函数中应用 swarm。
我怎样才能让 PSO 在这个意义上发挥作用?
只需添加一个@
:
x = particleswarm(@fun,nvars,lb,ub)
这确保您为优化器提供了函数 fun
的句柄,并且不会在没有任何输入参数的情况下评估函数。请参阅函数句柄上的 Matlab docs。
我想在以下结构中使用 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)
fun 在其他脚本中的保存位置,结构如下
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)
但这不是我要找的。我正在寻找在另一个脚本中保存的函数中应用 swarm。 我怎样才能让 PSO 在这个意义上发挥作用?
只需添加一个@
:
x = particleswarm(@fun,nvars,lb,ub)
这确保您为优化器提供了函数 fun
的句柄,并且不会在没有任何输入参数的情况下评估函数。请参阅函数句柄上的 Matlab docs。