提问者:小点点

用神经网络关联输入与输出,用遗传算法优化输入


我目前正在做激光切割的过程优化——在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));

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

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

我和其他人一起得到了一个错误,我的函数约束没有得到足够的输入参数。

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

有什么问题吗?

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

感谢任何帮助——抱歉问题太长了。我有几篇关于这个问题的文章——没有一篇解释matlab中的问题,只是程序。


共1个答案

匿名用户

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

此外,约束函数也不是真正有效的。约束需要以x的形式给出

然而,在函数中,您可以编写c=[out(2)495; out(2)-505];,这应该是c=[495-out(2); out(2)-505]

关于函数中的额外参数,这个文档可能会有所帮助。