使用神经网络将输入与输出相关联并使用遗传算法优化输入

时间:2013-03-26 08:59:35

标签: matlab optimization neural-network genetic-algorithm

我目前正在进行激光切割的工艺优化 - 在MATLAB中。我试图将工艺参数与切割质量联系起来,例如:

输入(过程参数)

  1. 切割速度
  2. 激光功率
  3. 辅助气压
  4. 输出(质量参数)

    1. 切割深度
    2. 切割宽度
    3. 我首先训练神经网络模型,以便根据工艺参数预测切割质量。

      [inputs,targets] = lasercutting_dataset;
      
      nLayers = 2;            % number of hidden layers
      trainFcn = 'trainlm';   % Levenberg Marqhart training function
      
      net = fitnet(nLayers,trainFcn);
      

      这很好用,现在我对表现不感兴趣。

      接下来,我想使用遗传算法优化(最大化)输入参数切割速度。这意味着我的健身功能(物体功能)是1 /切割速度。

      我为我的健身功能做了一个matlab函数:

      function y = fitness(x)
      
          y = 1/x(1);
      
      end
      

      接下来,我设置设计变量的数量及其上限和下限:

      nvars = 3;    % Number of variables
      LB = [130 8130  4470];   % Lower bound
      UB = [175 11255 8250];  % Upper bound
      

      接下来我在切割宽度上定义了我的约束(我也将为深度添加一个)。

      function [c, ceq] = constraints(net,x) 
      
          outs = net(x)
      
          c = [outs(2)+495; outs(2)-505];
          % 495 <= outs
          % outs <= 505
      
          ceq = [];
      
      end
      

      此功能导致问题!

      最后,我为函数创建句柄并开始优化:

      [x,fval] = ga(@fitness_func,nvars,[],[],[],[],LB,UB,@(x) ConstraintFunction(net,x));
      

      我已经尝试在约束函数中定义神经网络的输入向量(net()),该函数独立于x - 这很好用:

      dummyInput = [value; value; value];
      net(dummyInput);
      

      我遇到了其他错误,我的函数约束没有获得足够的输入参数。

      这个问题似乎是将动态变化的“x”传递给一个函数,然后使用输出来预测一个动态变化的约束。

      关于可能出现什么问题的任何想法?

      我一直在使用THISTHIS作为灵感。

      感谢任何帮助 - 对不起,长期提问。我有几篇关于这个问题的文章 - 没有一篇解释matlab中的问题,只是程序。

1 个答案:

答案 0 :(得分:1)

通过最大化1 / x,这将为您提供约束所持有的最慢切割速度。我假设你想要最大化切割速度,而不是最小化它。

此外,您的约束功能并非真正有效。约束需要以x <= 0的形式给出。因此,如果输出应该是有界的,则约束变为x >= 495 <=> 0 >= 495 - xx <= 505 <=> x - 505 <= 0

在您的函数中,您可以编写c = [outs(2)+495; outs(2)-505];,然后应该c = [495 - outs(2); outs(2) - 505]

关于函数中的额外参数,可能此文档可以是help