Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只要MATLAB ga optimtool迭代,刷新额外变量的最佳方法是什么?_Matlab_Optimization_Genetic Algorithm - Fatal编程技术网

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

只要MATLAB ga optimtool迭代,刷新额外变量的最佳方法是什么?,matlab,optimization,genetic-algorithm,Matlab,Optimization,Genetic Algorithm,我使用ga MATLAB优化工具最小化目标函数 我在同一个脚本main.m中创建了两个函数。 如果我不使用变量a遗传算法 效果很好。当我引入变量a调用 它在每次迭代中a=fcn(a)

我使用ga MATLAB优化工具最小化目标函数

我在同一个脚本
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