R 使用约束优化数据集(无函数)

R 使用约束优化数据集(无函数),r,optimization,constraints,R,Optimization,Constraints,我有一个大约500000个条目的数据集,我想找出哪一行是最好的组合,给定一组约束条件 我研究过各种线性规划方法,但其中一个变量是使用神经网络从其他变量生成的。在没有将神经网络整合到任何线性规划命令中之后,现在我只好从使用神经网络生成的数据集中选择最佳行 以下是我的数据集摘录: [Speed] [BoostP] [InletT] [ExhaustT] [FuelFlow] [Lambda] [Torque] [1] 0.25 1.53144

我有一个大约500000个条目的数据集,我想找出哪一行是最好的组合,给定一组约束条件

我研究过各种线性规划方法,但其中一个变量是使用神经网络从其他变量生成的。在没有将神经网络整合到任何线性规划命令中之后,现在我只好从使用神经网络生成的数据集中选择最佳行

以下是我的数据集摘录:

        [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

f使用
数据。速度表

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

d直接的方法是首先对矩阵进行子集划分,然后应用函数,在输出上使用
which.min
选择具有最小值的行<代码>myMatNew非常感谢!但是,当我尝试实现此功能时,会出现以下错误:
I是无效类型(矩阵)。也许在将来,一个2列矩阵可以返回DT元素的列表(按照FAQ 2.14中a[B]的精神)。请让datatable help知道您是否希望这样做,或将您的评论添加到FR#657
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