只要MATLAB ga optimtool迭代,哪个是刷新额外变量的最佳方法?

时间:2016-05-27 07:40:48

标签: matlab optimization genetic-algorithm

我使用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

有什么想法吗?提前谢谢!

1 个答案:

答案 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来电时刷新