2016-06-30 24 views
1

Ich habe LP-Task. Das Problem ist plötzlich aufgetreten. Ich benutze automatisierten Code für das Erstellen der Zielfunktion, Gleichungen und Einschränkungen, aus zwei Vektoren von Knoten und Linien, auch benutze ich die Methode zum Erstellen von Code meiner Tas im LPSolve-Format und schreibe es in Datei.
Zum Beispiel:LPSolve C++ - Quellbibliothek und IDE gibt verschiedene LP-Task-Lösung Ergebnisse

/* Objective function */ 
max: +y4 +y5 +y6; 

/* Constraints */ 
n1: +x4 -y4 -z4_5_4 -z4_6_5 +z5_4_8 +z6_4_9 = 0; 
n2: +x5 -y5 +z4_5_4 -z5_6_6 +z6_5_7 -z5_4_8 +z6_5_10 -z5_6_11 = 0; 
n3: +x6 -y6 +z4_6_5 +z5_6_6 -z6_5_7 -z6_4_9 -z6_5_10 +z5_6_11 = 0; 

/* Variable bounds */ 
x4 <= 16210; 
x5 <= 16600; 
x6 <= 17950; 
y4 <= 15000; 
y5 <= 15000; 
y6 <= 15000; 
z4_5_4 <= 2000; 
z4_6_5 <= 2000; 
z5_6_6 <= 1000; 
z6_5_7 <= 1000; 
z5_4_8 <= 2000; 
z6_4_9 <= 2000; 
z6_5_10 <= 1000; 
z5_6_11 <= 1000; 

Nach dem Erstellen und Schreiben von Gleichungen in der Datei ausführen ich den Solver:

int result = solve(lp); 

Usualy für Aufgaben mit zufälligen Werten, ich habe wie diese bekam Ergebnisse:

Var-s Result 
     45000 
x4  15000 
x5  15000 
x6  15000 
y4  15000 
y5  15000 
y6  15000 
z4_5_4 0 
z4_6_5 0 
z5_4_8 0 
z5_6_11 0 
z5_6_6 0 
z6_4_9 0 
z6_5_10 0 
z6_5_7 0 

Aber in der LPSolve IDE habe ich Ergebnisse wie folgt (und ich denke, es ist rigth Ergebnisse):

Var-s Result 
     45000 
x4  16210 
x5  16600 
x6  12190 
y4  15000 
y5  15000 
y6  15000 
z4_5_4 400 
z4_6_5 810 
z5_4_8 0 
z5_6_11 1000 
z5_6_6 1000 
z6_4_9 0 
z6_5_10 0 
z6_5_7 0 

Auf einigem Forum habe ich gelesen, dass "1E-5" verwenden statt "0" und "1000" statt "1.0" als Koeffizienten in meiner Zielfunktion besser. Ich habe versucht, dies zu tun, und ich habe die gleichen Ergebnisse in Solver-IDE und in meinem Programm, aber die Ergebnisse wurden nicht für randome Werte in der Aufgabe geändert.
Also, ich brauche Ergebnisse wie in LPSolve IDE (wroten am Ende), aber benutze mein Programm. Wenn es möglich ist, bitte hilf mir.
Gebrauchte Versionen LPSolve v-5.5.2.3, v-5.5.2.0

Antwort

0

Also, ich mit einem Typen Gespräch hatte, die LPSolve viele Zeit verwendet und kennt einige Tücken. In meiner Frage habe ich Gleichungen und Nebenbedingungen, wenn wir x, y, z unbekannte Werte zu der resultierenden Lösung ersetzen, werden die Gleichungen erfüllt.

/* Constraints */ 
n1: +x4 -y4 -z4_5_4 -z4_6_5 +z5_4_8 +z6_4_9 = 0; 
n2: +x5 -y5 +z4_5_4 -z5_6_6 +z6_5_7 -z5_4_8 +z6_5_10 -z5_6_11 = 0; 
n3: +x6 -y6 +z4_6_5 +z5_6_6 -z6_5_7 -z6_4_9 -z6_5_10 +z5_6_11 = 0; 

/* satisfied equations */ 
n1: +15000 -15000 -0 -0 +0 +0 = 0; 
n2: +15000 -15000 +0 -0 +0 -0 +0 -0 = 0; 
n3: +15000 -15000 +0 +0 -0 -0 -0 +0 = 0; 

LPSolve wird die optimale Lösung zu finden und wird mehrere verschiedene Lösungen in IDE, Programm usw. In dieser Situation schreiben, wenn Y Last ist, X ist, die Erzeugung, ist Z fließt und wenn weniger Lasterzeugung , wir brauchen nicht fließt zu Balancing-System und im Programm habe ich eine Lösung wie in Beispiel, aber In IDE haben auch richtige Lösung.

Bevor Sie also denken, dass Löser falsche Lösung schreiben, müssen Sie das Modell, die Zielfunktion, Gleichungen und Constrains überprüfen und versuchen, Ergebniswerte durch Constrains zu ersetzen, um zufriedene Gleichungen zu erhalten oder das duale Problem zu lösen.

Das nächste Mal versuche ich spezielle Konstrukteure in objektiver Funktion zu finden. Vielleicht kann es jemandem helfen.