调用 GA 工具箱时输入参数不足

Not enough input arguments when calling GA toolbox

我调用了Matlab的遗传算法求解器ga,方法如下:

[theta,fval,exitflag] = ga(smmobj,26,[],[],[],[],LB,UB,[],[]);

其中 theta 是需要优化的 26-by-1 列向量。

所以在主函数中,它是这样的:

clc
clear
global var1 var2...
load ('abcd.mat')
theta0=[1 2 3....];
LB=[26-by-1 row vector];
UB=[26-by-1 row vector];
[theta,fval,exitflag] = ga(smmobj,26,[],[],[],[],LB,UB,[],[]);

适应度函数,smmobj,定义为:

function [obj]=smmobj(theta)
    global var1 var2...

但是当我运行它时,它总是说:

Error using smmobj (line 4)
Not enough input arguments.

Error in SMMga (line 32)
[theta,fval,exitflag] = ga(smmobj,26,[],[],[],[],LB,UB,[],[]);

但我 运行 适应度函数本身就有效。

[theta,fval,exitflag] = ga(smmobj,26,[],[],[],[],LB,UB,[],[]);

将抛出该错误,因为您实际上是在调用函数 smmobj(不带参数),而不是将 ga 函数 function handle 传递给 objective 函数.您使用 @ 符号执行此操作,因此

[theta,fval,exitflag] = ga(@smmobj,26,[],[],[],[],LB,UB,[],[]);

顺便说一句,我建议您不要使用 global 来将 var1var2 的额外参数传递给您的 objective 函数,而是使用anonymous functions:

[theta,fval,exitflag] = ga(@(x)(smmobj(x,var1,var2)),26,[],[],[],[],LB,UB,[],[]);

然后将smmobj的定义更改为

function [obj]=smmobj(theta,var1,var2)