我通过以下方式调用了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,[],[]);
但我自己运行健身功能,它有效。
答案 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,[],[]);
将global
和var1
的额外参数传递给目标函数,而是使用function handle:
var2
然后将[theta,fval,exitflag] = ga(@(x)(smmobj(x,var1,var2)),26,[],[],[],[],LB,UB,[],[]);
的定义更改为
smmobj