当前位置: 首页 > 知识库问答 >
问题:

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

朱慈
2023-03-14

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

尉迟高澹
2023-03-14

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

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

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

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

 类似资料:
  • 我对TensorFlow和LSTM架构相当陌生。我在计算数据集的输入和输出(x_train、x_test、y_trainy_test)时遇到了问题。 我最初输入的形状: X_列车:(366,4) Ytrain和Ytest是一系列股票价格。Xtrain和Xtest是我想学习的四个预测股价的功能。 这是产生的错误: -------------------------------------------

  • 我正在开发一种卷积神经网络用于图像分类或更好的车牌分类。这些车牌最多包含8个字符,每个字符可以包含37个字符(A-Z、0-9和空格)。我现在想知道如何设计网络中的最后两层。我认为,最后一个必须是具有37个概率的softmax层。这应该完全连接到一个(?)神经元在前一层?我想,在前一层我们需要8个神经元,因为之前的车牌上有8个字符,但我不确定。在此层之前,我添加了一些卷积层和maxPooling层。

  • 我正在尝试创建一个CNN来对数据进行分类。我的数据是X[N\u数据,N\u特征]我想创建一个能够对其进行分类的神经网络。我的问题是关于keras后端Conv1D的输入形状。 我想在上面重复一个过滤器。。假设有10个特征,然后为接下来的10个特征保持相同的权重。对于每个数据,我的卷积层将创建N\U特征/10个新神经元。我该怎么做?我应该在input\u形状中放置什么? 有什么建议吗?非常感谢。

  • 文件 std::fs::File 本身实现了 Read 和 Write trait,所以文件的输入输出非常简单,只要得到一个 File 类型实例就可以调用读写接口进行文件输入与输出操作了。而要得到 File 就得让操作系统打开(open)或新建(create)一个文件。还是拿例子来说明 use std::io; use std::io::prelude::*; use std::fs::File;

  • 回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用

  • 我在使用Keras和Python对3D形状进行分类时遇到了一个问题。我有一个文件夹,里面有一些JSON格式的模型。我将这些模型读入Numpy数组。模型是25*25*25,表示体素化模型的占用网格(每个位置表示位置(i、j、k)中的体素是否有点),因此我只有1个输入通道,就像2D图像中的灰度图像一样。我拥有的代码如下: 在此之后,我得到以下错误 使用TensorFlow后端。回溯(最后一次调用):文