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

时间:2015-10-13 03:53:03

标签: matlab genetic-algorithm

我通过以下方式调用了Matlab的遗传算法求解器ga

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

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

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

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,[],[]);

但我自己运行健身功能,它有效。

1 个答案:

答案 0 :(得分:0)

class X{
     void f1() {
       System.out.println("XXX") ;
    }
}

class Y extends X {
    void f1(){
        System.out.println("YYY");
    }
}    



public class Test {


    public static void main(String[] args) {

        Object obj =  new Y();
        obj.f1();  // why this does not work?

    }

}

会抛出该错误,因为您实际上是在调用函数[theta,fval,exitflag] = ga(smmobj,26,[],[],[],[],LB,UB,[],[]); (没有参数),而不是将smmobj函数jet_estimate_normals()传递给目标函数。您可以使用ga符号执行此操作

@

顺便提一下,我建议您不要使用[theta,fval,exitflag] = ga(@smmobj,26,[],[],[],[],LB,UB,[],[]); globalvar1的额外参数传递给目标函数,而是使用function handle

var2

然后将[theta,fval,exitflag] = ga(@(x)(smmobj(x,var1,var2)),26,[],[],[],[],LB,UB,[],[]); 的定义更改为

smmobj