调用 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
来将 var1
和 var2
的额外参数传递给您的 objective 函数,而是使用anonymous functions:
[theta,fval,exitflag] = ga(@(x)(smmobj(x,var1,var2)),26,[],[],[],[],LB,UB,[],[]);
然后将smmobj
的定义更改为
function [obj]=smmobj(theta,var1,var2)
我调用了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
来将 var1
和 var2
的额外参数传递给您的 objective 函数,而是使用anonymous functions:
[theta,fval,exitflag] = ga(@(x)(smmobj(x,var1,var2)),26,[],[],[],[],LB,UB,[],[]);
然后将smmobj
的定义更改为
function [obj]=smmobj(theta,var1,var2)