我有大约500,000个条目的数据集,并且在给定一组约束的情况下,我想找出哪一行是最佳组合。

我研究了各种线性编程方法,但是其中一个变量是使用神经网络从其他变量生成的。在无法将神经网络合并到任何线性编程命令中之后,现在我已辞职,而是从使用神经网络生成的数据集中选择最佳行。

这是我的数据集的摘录:

        [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内调用神经网络,我宁愿使用该方法。谢谢!

最佳答案

使用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

07-24 20:34