我在使用Matlab编写遗传算法时遇到了问题。我正在使用ga
函数,我对ga
的概念及其工作原理没有任何问题。为了实现我的对象函数,我需要将一个额外的变量传递给这个函数(除了参数向量)。 (我打算实际上尝试混合不同情节的配件,我正在将Matlab的ga
函数集成到我的另一个代码中)。我尝试使用全局变量,它工作正常。但我只是想知道这个问题有没有其他解决方案?随着全局变量开始变得越来越大,以后的任务。
答案 0 :(得分:2)
您可能想要阅读函数句柄 - 尤其是parameterising function handles。这可以让你'绑定'你的目标函数的额外参数。例如,而不是
ga(@myfcn, ...);
你可能会说
param = 17;
fh = @(x) myfcn(x, param);
ga(fh, ...);
所以myfcn
总是以17
作为第二个参数。
答案 1 :(得分:1)
完整的答案是这样的。
编辑新创建的函数,如下所示:
function [x,fval,exitFlag,output,population,scores] = ga_customized(fun,nvars,Aineq,bineq,Aeq,beq,lb,ub,nonlcon,intcon,options,extra_param)
并添加此代码
fun = @(x) fun(x, extra_param);
还可以在第230行找到代码部分并按照以下方式编辑它:
if nargin < 12, extra_param = [];
if nargin < 11, options = [];
if nargin < 10, intcon = [];
if nargin < 9, nonlcon = [];
if nargin < 8, ub = [];
if nargin < 7, lb = [];
if nargin <6, beq = [];
if nargin <5, Aeq = [];
if nargin < 4, bineq = [];
if nargin < 3, Aineq = [];
end
end
end
end
end
end
end
end
end
end