0

我需要一些关于在 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

它一直向我显示错误:没有足够的输入参数..不是因为我没有设置约束或其他选项吗?我应该以什么格式设置其他选项.. 谢谢!

4

1 回答 1

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”的值,它将不会对two_min 中的z 值产生任何影响,除非您重新创建匿名函数(这是因为 matlab 匿名函数是闭包,它们的内部状态是在创建时从工作区获取的)。

这是做你所问的一种方法;你有别的想法吗?

于 2013-01-23T00:04:46.330 回答