Ich versuche, ganzzahlige Programmierprobleme zu lösen. Ich habe versucht, sowohl die Verwendung SCIP und LPSolveLösung eines ganzzahligen linearen Programms: Warum sind Solver, die eine lösbare Instanz beanspruchen, undurchführbar?
Zum Beispiel der letzten Werte von A und B gegeben, mag ich für Vala in dem folgenden C# -Code lösen:
Int32 a = 0, b = 0;
a = a*-6 + b + 0x74FA - valA;
b = b/3 + a + 0x81BE - valA;
a = a*-6 + b + 0x74FA - valA;
b = b/3 + a + 0x81BE - valA;
// a == -86561, b == -32299
, die ich als diese ganzen Zahl umgesetzt Programm in lp-Format (das Kürzen Teilung verursacht einige Komplikationen):
min: ;
+valA >= 0;
+valA < 92;
remAA_sign >= 0;
remAA_sign <= 1;
remAA <= 2;
remAA >= -2;
remAA +2 remAA_sign >= 0;
remAA +2 remAA_sign <= 2;
remAA +4294967296 remAA_range >= -2147483648;
remAA +4294967296 remAA_range <= 2147483647;
remAA +4294967296 remAA_range +2147483648 remAA_sign >= 0;
remAA +4294967296 remAA_range +2147483648 remAA_sign <= 2147483648;
-1 remAA +4294967296 remAA_range +3 remAA_mul3 = 0;
remAB_sign >= 0;
remAB_sign <= 1;
remAB <= 2;
remAB >= -2;
remAB +2 remAB_sign >= 0;
remAB +2 remAB_sign <= 2;
remAB +4294967296 remAB_range >= -2147483648;
remAB +4294967296 remAB_range <= 2147483647;
remAB +4294967296 remAB_range +2147483648 remAB_sign >= 0;
remAB +4294967296 remAB_range +2147483648 remAB_sign <= 2147483648;
+1431655765 remAA +1 offA -2 valA +1 offB -1 remAB +4294967296 remAB_range +3 remAB_mul3 = 0;
a = -86561;
b = -32299;
offA = 29946;
offB = 33214;
-4 offA +3 valA +1431655765 remAA +1 offB +4294967296 Fa - a = 0;
+477218588 remAA -1431655769 offA -1431655764 valA -1431655763 offB +1431655765 remAB +4294967296 Fb - b = 0;
int valA;
int remAA;
int remAA_range;
int remAA_sign;
int remAA_mul3;
int remAB;
int remAB_range;
int remAB_sign;
int remAB_mul3;
int Fa;
int Fb;
int offA;
int offB;
int a;
int b;
Und dann versucht, es zu lösen:
The model is INFEASIBLE
Allerdings weiß ich, dass es eine machbare Lösung gibt, weil ich eine variable Zuweisung kenne, die funktioniert. Hinzufügen die folgenden Bedingungen verursacht eine Lösung gefunden werden:
a = -86561;
b = -32299;
offA = 29946;
offB = 33214;
valA = 3;
remAA = 0;
remAA_range = 0;
remAA_sign = 0;
remAA_mul3 = 0;
remAB = 1;
remAB_range = 0;
remAB_sign = 0;
remAB_mul3 = -21051;
Fa = 0;
Fb = 21054;
Zwei verschiedene Solver behauptet haben dies möglich Problem nicht machbar ist. Verletze ich einen ungeschriebenen Zustand? Was ist los? Gibt es Löser, die das Problem tatsächlich lösen?
Wenn Sie Ihr Modell erstellen, exportieren Sie eine .lp-Datei und senden Sie es mir, ich werde es über CPLEX ausführen. Es hat gute Konflikt (Unbrauchbarkeit) Informationen. Meine E-Mail-Adresse ist mein Benutzername bei gmail dot com. Ich nehme an, du könntest es auch einfach auf Pastebin oder etwas ähnliches setzen. – raoulcousins
@raoul Ich habe die LP-Dateien geschickt, die ich mit scip benutzt habe. –
Ich löste es mit CPLEX und es war machbar. Die optimale Lösung hatte einen Zielfunktionswert von Null. Dies war die gleiche wie die LP-Relaxation, die eine Basismatrix mit der Konditionszahl (kappa) von 3,4 aufwies. Mit den zusätzlichen Beschränkungen war die Zielfunktion dieselbe; die Konditionsnummer von 4.6.Ich bin nicht sicher, was CPLEX unter der Haube tut, die sich von SCIP für dieses spezifische Problem unterscheidet. Können Sie Ihr Modell mit neos-server.org lösen und CPLEX verwenden? – raoulcousins