利用神经网络将输入与输出联系起来,并利用遗传算法优化输入



我目前正在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"给一个函数,然后预测它,使用一组动态变化的约束的输出。

你知道是什么问题吗?

我一直在用这个和这个来寻找灵感。

任何帮助都是感激的-抱歉长时间的问题。我有几篇关于这个问题的文章-没有一篇解释了matlab中的问题,仅仅是过程。

通过最大化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]

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

最新更新