我目前正在对激光切割进行工艺优化 - 在 MATLAB 中。我试图将工艺参数与切割质量联系起来,例如:
输入(过程参数)
- 切割速度
- 激光功率
- 辅助气压
输出(质量参数)
- 切削深度
- 切割宽度
我首先训练一个神经网络模型,以便根据工艺参数预测切割质量。
[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 中的问题,只是解释了程序。