私は現在、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の問題を説明しておらず、単に手順です。