我使用ga MATLAB optimtool来最小化目标函数。
我在同一个脚本main.m
中创建了两个函数。
如果我不使用变量a
遗传算法
效果很好。当我引入变量a
调用时
它在a = fcn( a );
的每次迭代中main.m
然后我得到一个错误没有足够的输入参数。 (第5行)
%% main function
function [x,fval,a] = main()
nvars = 1; a = 0; % assign the number of values and the variable a
a = fcn( a,t ); % call the fitness fcn
[x,fval] = ga(@(t) fcn(t),nvars);
end
%% fitness function
function [ y,a ] = fcn( a,t )
y = abs( t - 1 ); % objective fcn
a = a + 1;
end
我提到a
是一个额外的变量,与ga的操作无关。
我意识到虽然Ι第一次刷新值a
,但我没有
只要遗传算法迭代以找到更好的值,就设法改变a
。
有什么想法吗?提前谢谢!
答案 0 :(得分:2)
首先,如果您的目标只是计算ga
对您的健身功能的调用次数,则您已经可以通过output
的{{1}}输出访问它:
[x,fval,exitflag,output] = ga(fitnessfcn,nvars,...)返回输出,a 包含每一代和另一代的输出的结构 有关算法性能的信息。
当您查看此ga
变量中的内容时,您可以直接找到:
output
通过调用output =
problemtype: 'unconstrained'
rngstate: [1x1 struct]
generations: 56
funccount: 2850
message: 'Optimization terminated: average change in the fit...'
maxconstraint: []
如果问题更多是关于如何更新适应度函数中的任何额外变量,我认为最好的办法是使用output.funccount
变量:
global
global a
a=0;
[x,fval,output] = main();
功能main
function [x,fval,output] = main()
nvars = 1;
[x,fval,~,output] = ga(@fcn,nvars);
end
功能fcn
function [ y ] = fcn(t)
global a
y = abs( t - 1 ); % objective fcn
a = a + 1;
end
您可以看到output =
problemtype: 'unconstrained'
rngstate: [1x1 struct]
generations: 100
funccount: 5050
message: 'Optimization terminated: maximum number of gener...'
maxconstraint: []
a =
5050
等于a
,这意味着它已在每次output.funccount
来电时刷新