2017-04-21 3 views
2

Ich habe einen Datensatz mit ungefähr 500.000 Einträgen, und ich möchte herausfinden, welche Zeile die beste Kombination ist, wenn eine Reihe von Einschränkungen gegeben ist.Optimieren eines Datasets mit Einschränkungen (keine Funktion)

Ich habe verschiedene lineare Programmiermethoden angeschaut, aber eine meiner Variablen wurde von den anderen mit einem neuronalen Netzwerk erzeugt. Nachdem ich das neuronale Netzwerk nicht mehr in einen linearen Programmierbefehl eingebunden habe, habe ich mich jetzt damit abgefunden, stattdessen die beste Zeile aus einem Datensatz auszuwählen, der unter Verwendung des neuronalen Netzwerks erzeugt wurde. Hier

ist ein Auszug meiner Daten-Set:

 [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 

Das Ziel meiner Arbeit ist, um herauszufinden, welche Kombination die höchste Drehmoment bei reduziertem Kraftstoffverbrauch zurückkehrt, das heißt, minimiert die folgende Funktion:

f<-(2/(1+Torque))+0.25*FuelFlow+0.05*ExhaustT 

Die Einschränkungen ich habe, sind wie folgt:

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

Welches R-Paket kann dies erreichen? Wenn jemand weiß, wie man ein neuronales Netzwerk innerhalb einer LP aufruft, würde ich diese Methode lieber verwenden. Vielen Dank!

+2

Der einfachste Weg ist Ihre Matrix und dann wenden Sie die Funktion mit 'which.min' auf den Ausgang wählen Sie die Zeile mit dem minimalen Wert der Teilmenge. 'myMatNew <- myMat [myMat [," Geschwindigkeit "] == 0.25 & myMat [," Auspuff "] <= 2.5,]' etc, dann führe die Funktion über myMatNew aus. – lmo

Antwort

1

Verwenden data.table für Geschwindigkeit:

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

Vielen Dank! Wenn ich jedoch versuche, dies zu implementieren, erhalte ich den folgenden Fehler: 'i ist ein ungültiger Typ (Matrix). Vielleicht könnte in Zukunft eine 2-Spalten-Matrix eine Liste von Elementen von DT zurückgeben (im Sinne von A [B] in FAQ 2.14). Bitte lassen Sie datatable-help wissen, ob Sie das möchten, oder fügen Sie Ihre Kommentare zu FR # 657' hinzu. – engineerinr

Verwandte Themen