我需要一些关于在matlab中使用ga函数的指导。我发现的所有例子都是处理一个变量(参数),例如
function y = two_min(x)
if x<=20
y = x+1;
else
y = x+1;
end
所以我可以打电话给ga(@ two_min,1)开始。
但是当我尝试使用多个变量时,例如。
function y = two_min(x,z)
if x<=20
y = x+1+z;
else
y = x+1+z;
end
它一直向我显示错误:没有足够的输入结果.. 是不是因为我没有设置约束或其他选项? 我应该以什么格式设置其他选项.. 谢谢!
答案 0 :(得分:0)
当它执行你的函数two_min时,它会传入x的值,并且z在使用之前不会在任何地方定义,因此你的错误。您可以尝试的一件事是在调用ga之前绑定您的z值:
a = 500; %the value that will be used for z
fitness_fun = @(x) two_min(x,a);
n_var = 1;
[x,fval] = ga(fitness_fun,n_var)
请注意,这只会将fitness_fun创建点的a值作为z的值,因此如果稍后再次更改“a”的值,则不会对z的值产生任何影响在two_min中,除非你重新创建匿名函数(这是因为matlab匿名函数是闭包,它们的内部状态是在创建时从工作区获取的)。
这是一种做你要求的方法;你还有别的想法吗?