Dies ist das Ergebnis der Umsetzung meines allerersten Modells in CPLEX C++ und ich bin sehr überrascht, wie langsam und schlecht die Qualität ist. Ich glaube, dass vieles davon durch eine bessere Formulierung vermieden werden kann. Kann mir bitte jemand helfen, den Code zu verbessern? Hinweise, Ideen, Gedanken ... alles wird geschätzt!Beschleunigung CPLEX C++ Code
Es geht um die Planung von Prüfungen innerhalb von 5 Tagen mit jeweils 2 verfügbaren Zeitfenstern. Meine Eingabe ist die Anzahl der Prüfungen (erste Reihe erste Nummer) und widersprüchliche Prüfung Paare (erste Reihe zweite Nummer), wo ich auch die Anzahl der Schüler kennen beide Prüfungen (in den folgenden Reihen -> Prüfung1 Prüfung2 #Studenten, die beide Prüfungen). Der Code finden Sie here und die Instanz here.
Die Einschränkungen Ich bin auch sind:
- jeweils Prüfungen genau einmal geplant ist
- widersprüchliche Prüfungen können nicht an der gleichen Periode
- bestrafen, wenn widersprüchliche Prüfungen am selben Tag geplant sind geplant werden
- bestrafen, wenn widersprüchliche Prüfungen an aufeinanderfolgenden Tagen geplant sind
- bestrafen, wenn widersprüchliche Prüfungen in benachbarten Perioden über Nacht geplant sind
Ich habe das Gefühl, dass etwas in der Formulierung auch falsch ist, weil ich mich nicht vorstellen kann, dass der Wert des objektiven Wertes, hoch ist. Sieht jemand den Fehler? Ich stecke fest.
Das Problem könnte in der Schleife sein, wo ich versuche herauszufinden, ob eine weiche Einschränkung verletzt ist oder nicht. Dort schleife ich über Tage, aber wahrscheinlich überschreibe ich versehentlich meine Variablen die ganze Zeit. Hat jemand eine Idee, wie man die binäre Variable bestimmt, die anzeigt, ob die weiche Einschränkung an irgendeinem Tag verletzt wird (und natürlich kann sie nur einmal vorkommen, aber höchstwahrscheinlich ist sie nicht am Ende).
Wenn Sie sagen, das Modell ist langsam, ich denke, du meinst die Lösung Leistung? Das klingt nach einem kleinen Problem. Wie langsam war das Modell zu bauen und zu lösen? Wenn Sie schlechte Qualität sagen, beziehen Sie sich auf die generierte Lösung? Inwiefern ist die Qualität schlecht? Wie groß ist Ihr objektiver Wert? – TimChippingtonDerrick
Das Protokoll liest "Root Relaxation Lösung Zeit = 0,05 Sek. (38,16 Ticks)", ich denke, das ist die Zeit, die benötigt wird, um die erste mögliche Lösung zu finden.Ihr Zielwert ist 28722 (in der Spalte Best Integer) und es wird nicht niedriger als 28608 und es sollte mehr wie 700 etwas sein – steph
Nein. Die Wurzel Relaxationszeit ist, wie lange es dauerte, das entspannte Problem zu lösen (Ignorieren Integralität) bei der Wurzelknoten. Das wäre normalerweise keine ganzzahlige machbare Lösung. Können Sie manuell eine Lösung zum Vergleich erstellen? – TimChippingtonDerrick