1

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

输入(过程参数)

  1. 切割速度
  2. 激光功率
  3. 辅助气压

输出(质量参数)

  1. 切削深度
  2. 切割宽度

我首先训练一个神经网络模型,以便根据工艺参数预测切割质量。

[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));

我尝试在与 x 无关的约束函数内为神经网络 (net()) 定义一个输入向量 - 这很好用:

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

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

问题似乎在于将动态变化的“x”传递给函数,然后对其进行预测,将输出用于一组动态变化的约束。

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

我一直在使用THISTHIS来获得灵感。

任何帮助表示赞赏 - 很抱歉长时间的问题。我有几篇关于此事的文章 - 没有一篇文章解释了 matlab 中的问题,只是解释了程序。

4

1 回答 1

1

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

此外,您的约束功能也不是真正有效的。约束需要在表格中给出x <= 0。因此,如果输出应该是有界的,则约束x >= 495 <=> 0 >= 495 - x变为x <= 505 <=> x - 505 <= 0

但是,在您的功能中,您应该写c = [outs(2)+495; outs(2)-505];which should then be c = [495 - outs(2); outs(2) - 505].

关于函数中的额外参数,也许这个文档可以提供帮助

于 2013-04-14T21:00:40.437 回答