2016-09-30 5 views
0

Ich implementierte mein mathematisches Modell mit Ilog Cplex mit C++. Die meisten meiner Entscheidungsvariablen haben Bruchwerte in den optimalen Lösungen. Einige von ihnen sind sehr klein, dass cplex sie als 0 ausgibt. Gibt es eine Möglichkeit, die Genauigkeit zu erhöhen, so dass ich die Werte solcher Variablen noch sehen kann?Präzision in Berechnungen C++ Cplex

Auch wenn ich cplex.getBestObjValue() verwende, gibt es mir "-Inf". (Dies ist ein Maximierungsproblem.)

Antwort

0

Sie könnten versuchen, die Einstellung verwenden IloCplex :: Param :: Emphasis :: Numerische

Präzision Betont in numerisch instabil oder schwierigen Problemen. Mit diesem Parameter können Sie festlegen, dass bei CPLEX die Genauigkeit in numerisch schwierigen oder instabilen Problemen betont werden soll, mit entsprechenden Leistungseinbußen in Bezug auf Zeit und Arbeitsspeicher.

Über Ihre zweite Frage, ist Ihr Modell eine LP?

Grüße

+0

Danke für Ihre Antwort. Wenn ich die Einstellung IloCplex :: Param :: Emphasis :: Numerical verwende, wie kann ich die Genauigkeit angeben? Können Sie mir ein Beispiel für die Verwendung dieses Parameters geben? Und ja, mein Modell ist eine LP. – user2147241

+0

Standardwert ist 0: Betonung der numerischen Genauigkeit nicht; Aber 1 bedeutet Übung mit äußerster Vorsicht in der Berechnung –

1

Werte für Integer-Variablen zu haben, die nahe sind (aber nicht genau) ganzzahlige Werte ganz normal. CPLEX hat eine Integritäts-Toleranz, so dass diese Werte so nah an die korrekten ganzzahligen Werte akzeptiert werden. Verwenden Sie einfach die Standard-C++ - Ausgabefunktionen, um diese Werte in der von Ihnen gewünschten Genauigkeit auszugeben.

Meistens ist das kein Problem, aber Sie können die Integrity-Toleranz bei Bedarf auf einen kleineren Wert setzen. Normalerweise runde ich diese Werte auf den nächsten ganzzahligen Wert und verwende das als meine Lösung. Sie können auch versuchen, Ihr Modell erneut mit diesen Entscheidungsvariablen zu lösen, die auf ihre gerundeten Ganzzahlwerte festgelegt sind, um sicherzustellen, dass die Lösung wirklich gültig ist. Wenn Sie nicht sicher sind, ob das ausreicht, versuchen Sie es mit Alex 'Vorschlag für numerische Präzision.