使用约束优化数据集(无功能)

时间:2017-04-21 16:39:07

标签: r optimization constraints

我有一个大约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内部调用神经网络,我宁愿使用该方法。谢谢!

1 个答案:

答案 0 :(得分: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