10

Ich benutze den IBM Cplex-Optimierer, um ein Optimierungsproblem zu lösen, und ich möchte nicht alle Terminal-Drucke, die der Optimierer tut. Gibt es ein Mitglied, das dies in der IloCplex- oder IloModel-Klasse deaktiviert? Dies sind die Drucke über Schnitte und Iterationen. Drucke zum Terminal sind teuer und mein Problem wird irgendwann in der Größenordnung von Millionen von Variablen liegen und ich möchte keine Zeit mit diesen überflüssigen Ausgaben verschwenden. Vielen Dank.Wie cplex nicht an Terminal ausgeben

+2

Während mit Millionen von Variablen mit cplex ein MIP-Modell zu lösen ist nicht trivial, ist es nicht ungewöhnlich, und das Standard-Protokoll die Lösungszeit in signifikanter Weise nicht beeinträchtigt wird. Im Durchschnitt gilt, je größer die Probleminstanz ist, desto mehr Berechnungen werden pro Zeile der Protokollnachricht ausgeführt. (Es dauert genauso lange, eine Zeile über 10 Schnitte zu drucken, wie es beim Drucken einer Linie um 1000 Schnitte der Fall ist, aber es dauert viel länger, die 1000 Schnitte tatsächlich zu berechnen). In der Tat, für größere Probleme werde ich normalerweise die Abholzung einstellen. –

+0

Danke für den Hinweis – DiegoNolan

Antwort

14

Mit cplex/Konzert können Sie ganz cplex die Protokollierung auf der Konsole mit

cpx.setOut(env.getNullStream()) 

ausschalten Wo CPX ein Objekt IloCplex ist. Sie können die setOut-Funktion auch verwenden, um Protokolle in eine Datei umzuleiten.

Es gibt mehrere cplex-Parameter, um zu steuern, was geloggt wird. Zum Beispiel wird MIPInterval die Anzahl der zwischen den Zeilen gesuchten MIP-Knoten festlegen. Wenn Sie zum Beispiel MIPDisplay auf 0 stellen, wird die Anzeige von Schnitten ausgeschaltet, außer wenn neue Lösungen gefunden werden. Das MIPDisplay von 5 zeigt detaillierte Informationen zu jedem lp-Teilproblem.

Logging bezogenen Parameter umfassen MIPInterval MIPDisplay SimDisplay BarDisplay NetDisplay

Sie legen Parameter mit der setParam Funktion.

cpx.setParam(IloCplex::MIPInterval, 1000) 
+1

Danke, sehr hilfreich – DiegoNolan