我目前正在进行激光切割的程序优化-在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));我尝试在约束函数中为神经网络(net())定义一个输入向量,它独立于x-这很好:
dummyInput = [value; value; value];
net(dummyInput);我和其他人一样会遇到错误,我的函数约束没有得到足够的输入参数。
问题似乎是将动态更改的"x“传递给一个函数,然后使用一组动态变化的约束的输出对其进行预测。
对于这个问题有什么想法吗?
任何帮助都是感激的我有几篇关于这个问题的文章--没有一篇是在matlab中解释问题的,只是程序而已。
发布于 2013-04-14 21:00:40
通过最大化1/x,这将给你最慢的切割速度,对此约束是有效的。我想你要的是最大的切割速度,而不是最小的速度。
此外,约束函数实际上并不有效。需要以x <= 0的形式给出约束。因此,如果输出应该是有界的,那么约束就变成x >= 495 <=> 0 >= 495 - x和x <= 505 <=> x - 505 <= 0。
但是,在您的函数中,您可以编写c = [outs(2)+495; outs(2)-505];,然后应该是c = [495 - outs(2); outs(2) - 505]。
关于函数中的额外参数,这个文档可能是帮助的。
https://stackoverflow.com/questions/15632936
复制相似问题