2017-04-21 5 views
2

私は約500,000のデータセットのデータセットを持っており、制約のセットを考えると、どのローが最良の組み合わせであるかを知りたいと思います。制約付き(関数なし)のデータセットの最適化

私はさまざまな線形プログラミング方法を見てきましたが、私の変数の1つは、ニューラルネットワークを使って他のものから生成されています。線形プログラミングコマンドにニューラルネットワークを組み込むことができなかった後、ニューラルネットワークを使用して生成されたデータセットから、代わりに最良の行を選択するように辞任しました。ここで

は私のデータセットの抽出物である:

 [Speed] [BoostP] [InletT] [ExhaustT] [FuelFlow] [Lambda] [Torque] 
[1]  0.25 1.53144 2.29048 -0.39812 -0.65421 -0.19841 0.52364 
[2]  0.50 -2.26588 0.54588 2.65987 0.05721 -0.78777 0.53268 
[3]  0.25 0.14583 0.89634 0.98554 -0.33293 0.48981 0.51389 
[4]  0.25 -0.21985 0.84242 0.66724 0.12758 -0.89856 0.48713 
[5]  0.25 0.52630 0.79399 0.73567 0.13699 0.69841 0.56812 
[6]  0.75 0.87531 0.84658 0.98555 2.98945 0.26843 0.52487 
[7]  0.25 0.96512 0.88127 2.35642 0.98254 1.89546 0.50320 
[8]  0.25 -0.05984 0.65542 4.58643 -0.56988 -2.65412 0.59856 
私の研究の目的は、それは最小限に抑え、次の関数で、組み合わせは減少した燃料消費量と最も高いトルクを返す見つけることです

次のように私が持っている
f<-(2/(1+Torque))+0.25*FuelFlow+0.05*ExhaustT 

制約は以下のとおりです。

Speed=0.25 
ExhaustT<=2.5 
-0.5<=Lambda<=1.5 

どのRパッケージでこれを達成できますか?また、誰かがLP内からニューラルネットワークを呼び出す方法を知っていれば、私はむしろその方法を使用したいと思います。ありがとうございました!

+2

簡単な方法は、最小値を持つ行を選択するために、出力に 'which.min'を使用して、最初に行列のサブセットと、関数を適用することです。 'myMatNew < - myMat [、" speed "] == 0.25&myMat [、" exhaust "] <= 2.5、]など、myMatNewで関数を実行します。 – lmo

答えて

1

使用data.table速度のため:

df<-read.table(text="Speed BoostP InletT ExhaustT FuelFlow Lambda Torque 
[1]  0.25 1.53144 2.29048 -0.39812 -0.65421 -0.19841 0.52364 
      [2]  0.50 -2.26588 0.54588 2.65987 0.05721 -0.78777 0.53268 
      [3]  0.25 0.14583 0.89634 0.98554 -0.33293 0.48981 0.51389 
      [4]  0.25 -0.21985 0.84242 0.66724 0.12758 -0.89856 0.48713 
      [5]  0.25 0.52630 0.79399 0.73567 0.13699 0.69841 0.56812 
      [6]  0.75 0.87531 0.84658 0.98555 2.98945 0.26843 0.52487 
      [7]  0.25 0.96512 0.88127 2.35642 0.98254 1.89546 0.50320 
      [8]  0.25 -0.05984 0.65542 4.58643 -0.56988 -2.65412 0.59856",header=T) 

library(data.table) 
setDT(df) 
df[Speed==0.25 & ExhaustT<=0.25 & Lambda>=-0.5 & Lambda<=1.5, 
    Result := (2/(1+Torque)) + 0.25*FuelFlow + 0.05*ExhaustT] 

df[which.min(Result)] 
Speed BoostP InletT ExhaustT FuelFlow Lambda Torque Result 
1: 0.25 1.53144 2.29048 -0.39812 -0.65421 -0.19841 0.52364 1.129188 
+0

ありがとう!しかし、これを実装しようとすると、次のエラーが表示されます。 'iは無効な型(行列)です。たぶん将来、2列の行列はDTの要素のリストを返すことができます(FAQ 2.14のA [B]の精神の中で)。あなたがこれを望むかどうかをdatatable-helpに知らせてください、またはあなたのコメントをFR#657'に追加してください。 – engineerinr

関連する問題