Próbuję rozwiązać problemy z programowaniem całkowitym. Próbowałem zarówno wykorzystanie SCIP i LPSolveRozwiązywanie liniowego programu typu integer: dlaczego solwery twierdzą, że niemożliwe do rozwiązania wystąpienie?
Na przykład, biorąc pod uwagę ostateczne wartości A i B, chcę rozwiązać przez Vala w następujący kod C#:
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
Które I wdrożone jako tej liczby całkowitej Program w formacie lP (podział powoduje skracanie kilka komplikacji):
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;
a następnie próbował go rozwiązać:
The model is INFEASIBLE
Jednak wiem, że istnieje wykonalne rozwiązanie, ponieważ znam przypisanie zmiennych, które działa. Dodawanie następujących warunków powoduje rozwiązanie można znaleźć:
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;
Dwa różne rozwiązują twierdzili to wykonalne problemem jest niewykonalne. Czy naruszam jakiś niepisany warunek? Co się dzieje? Czy istnieją rozwiązania, które faktycznie rozwiązują problem?
Jeśli zbudujesz model, wyeksportujesz plik .lp i prześlesz go, uruchomię go przez CPLEX. Ma dobre informacje o konfliktach (infekcyjności). Mój adres e-mail to moja nazwa użytkownika w gmail dot com. Sądzę, że mógłbyś po prostu umieścić go na Pastebin lub coś podobnego. – raoulcousins
@raoul Wysłałem e-mailem pliki lp-cplex, których używałem z scip. –
Rozwiązałem go za pomocą CPLEX i było to wykonalne. Optymalne rozwiązanie miało obiektywną wartość funkcji równą zero. Było to to samo, co relaksacja LP, która miała matrycę podstawową z numerem warunku (kappa) 3.4. Przy dodatkowych ograniczeniach funkcja celu była taka sama; numer warunku 4,6.Nie jestem pewien, co CPLEX robi pod maską, która różni się od SCIP dla tego konkretnego problemu. Czy możesz rozwiązać swój model za pomocą neos-server.org i użyć CPLEX? – raoulcousins