只要MATLAB ga optimtool迭代,刷新额外变量的最佳方法是什么?
我使用ga MATLAB优化工具最小化目标函数 我在同一个脚本只要MATLAB ga optimtool迭代,刷新额外变量的最佳方法是什么?,matlab,optimization,genetic-algorithm,Matlab,Optimization,Genetic Algorithm,我使用ga MATLAB优化工具最小化目标函数 我在同一个脚本main.m中创建了两个函数。 如果我不使用变量a遗传算法 效果很好。当我引入变量a调用 它在每次迭代中a=fcn(a)
main.m
中创建了两个函数。
如果我不使用变量a
遗传算法
效果很好。当我引入变量a
调用
它在每次迭代中a=fcn(a)在main.m
然后我得到一个错误,输入参数不够。(第5行)
我提到a
是一个额外变量,与ga的操作无关。
我意识到,虽然我第一次刷新了值a
,但我没有
只要遗传算法迭代以找到更好的值,就可以设法更改a
有什么想法吗?提前谢谢你 首先,如果您的目标只是计算ga
对健身功能的调用次数,那么您已经可以通过ga
的输出访问该功能:
[x,fval,exitflag,output]=ga(fitnessfcn,nvars,…)返回输出,a
包含每一代和其他代的输出的结构
有关算法性能的信息
当您查看此输出中的内容时,您会直接发现:
output =
problemtype: 'unconstrained'
rngstate: [1x1 struct]
generations: 56
funccount: 2850
message: 'Optimization terminated: average change in the fit...'
maxconstraint: []
通过调用output.funccount
如果问题更多的是关于如何更新适应度函数中的任何额外变量,我认为最好的选择是使用global
变量:
测试脚本
main
功能
fcn
功能
输出
您可以看到a
等于output.funcount
,这意味着它在每次fcn
调用时都会被刷新。首先,如果您的目标只是计算ga
对健身功能的调用次数,那么您已经可以通过ga
的输出访问它:
[x,fval,exitflag,output]=ga(fitnessfcn,nvars,…)返回输出,a
包含每一代和其他代的输出的结构
有关算法性能的信息
当您查看此输出中的内容时,您会直接发现:
output =
problemtype: 'unconstrained'
rngstate: [1x1 struct]
generations: 56
funccount: 2850
message: 'Optimization terminated: average change in the fit...'
maxconstraint: []
通过调用output.funccount
如果问题更多的是关于如何更新适应度函数中的任何额外变量,我认为最好的选择是使用global
变量:
测试脚本
main
功能
fcn
功能
输出
您可以看到a
等于output.funccount
,这意味着它在每次fcn
调用时都被刷新,但如果a
发生变化,则最佳拟合将发生变化。目标函数在GA优化过程中不应改变,否则您可以轻松编程一个目标函数,在GA迭代后始终选择最远的点。另外,您a
除了计算迭代之外什么都不做,您是否需要将其放在那里来计算迭代次数?谢谢您的回复!!这就是为什么,我说变量a
与ga的操作无关。我使用a
只是为了改变它。它可以是计算迭代次数。具体来说,我正在为遗传算法进行模拟。仿真软件采用一个输入参数(遗传算法的总体)。只要ga运行,我就想在每次迭代中更改这个输入。在每次迭代中,模拟输出将因变量a
的不同而不同。您需要找到另一种方法来计算迭代次数,因为MATLAB无法知道a
是不相关的,即使它显然是不相关的。您是否知道如何使用变量funcount
或generations
?这是MATLAB的输出。例如,它是否可以写成a=generations
,a=a+1
?我可以使用generations
作为global
参数来获得该值。我这么说是因为generations
变量在每次迭代中都会发生变化。但是如果a
发生变化,那么最佳匹配就会发生变化。目标函数在GA优化过程中不应改变,否则您可以轻松编程一个目标函数,在GA迭代后始终选择最远的点。另外,您a
除了计算迭代之外什么都不做,您是否需要将其放在那里来计算迭代次数?谢谢您的回复!!这就是为什么,我说变量a
与ga的操作无关。我使用a
只是为了改变它。它可以是计算迭代次数。具体来说,我正在为遗传算法进行模拟。仿真软件采用一个输入参数(遗传算法的总体)。只要ga运行,我就想在每次迭代中更改这个输入。在每次迭代中,模拟输出将因变量a
的不同而不同。您需要找到另一种方法来计算迭代次数,因为MATLAB无法知道a
是不相关的,即使它显然是不相关的。您是否知道如何使用变量funcount
或generations
?这是MATLAB的输出。例如,它是否可以写成a=generations
,a=a+1
?我可以使用generations
作为global
参数来获得该值。我这么说是因为世代变量在每次迭代中都会发生变化。
global a
a=0;
[x,fval,output] = main();
function [x,fval,output] = main()
nvars = 1;
[x,fval,~,output] = ga(@fcn,nvars);
end
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