1

私は現在、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));

xに依存しない制約関数内でニューラルネットワーク(net())の入力ベクトルを定義しようとしました-これは正常に機能しました:

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

とりわけ、関数の制約が十分な入力パラメーターを取得していないというエラーが発生しています。

問題は、動的に変化する「x」を関数に渡し、動的に変化する一連の制約の出力を使用して関数を予測することにあるようです。

何が問題になるのかについてのアイデアはありますか?

私はこれとこれをインスピレーションのために使ってきまし

どんな助けでもありがたいです-長い質問をしてすみません。私はこの問題についていくつかの記事を持っています-それらのどれもmatlabの問題を説明しておらず、単に手順です。

4

1 に答える 1

1

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]

関数の追加パラメーターに関しては、このドキュメントが役立つかもしれません。

于 2013-04-14T21:00:40.437 に答える