2016-07-13 12 views
2

Ich verwende JaCoP - eine Constraint-Programmierung Solver für Java - um eine Lösung für ein komplexes Scheduling-Problem zu berechnen. Jetzt stehe ich vor dem Problem, dass die gefundene Lösung nicht korrekt ist.Einschränkung Programmierung Solver JaCoP Lösung gefunden, aber speichern inkonsistent

Ich Auferlegung der folgenden Einschränkung:

store.impose(new XplusYeqZ(start, duration, cipStart)); 

Nach Beendigung der der Solver eine Lösung gefunden suchen, aber leider ist die Lösung ist eindeutig falsch, über die Einschränkung verletzen.

Ich bin Überprüfung der Konsistenz des Speichers mit consistency(), bevor ich die Suche zu starten und es kehrt true, aber nach der Suche gibt es false.

I iteriert auch alle Einschränkungen des Speichers nach der Suche über und gedruckt, wenn Sie diesen Code zufrieden mit:

store.getConstraints().forEach(constraint -> { 
      System.out.println(constraint.id() + " " + constraint.satisfied()); 
}); 

Das Verfahren false oben auf der Einschränkung zurück.

Meine Frage ist: Gibt es eine logische Erklärung, warum nicht jede Einschränkung für eine korrekte Lösung erfüllt werden muss? Übersehe ich etwas?

Nachtrag: Ich bin mit Jacop 4.4.0

+1

Einige Löser haben Schwierigkeiten mit Integerüberläufen/Unterläufen bei bestimmten Problemen. Sie können dies treffen. – TLW

Antwort

1

Zuerst, wenn Sie Sie suchen soll das Ergebnis (true/false) des Such überprüfen. Wenn das Ergebnis falsch ist, ist das Modell inkonsistent und der Speicher befindet sich in einem undefinierten Zustand. Das könnte bei Ihrem Problem der Fall sein.

+0

Meinst du den Rückgabewert von 'labelling' nach der Suche? Ich mache das und der Rückgabewert ist "wahr". Oder meinst du etwas anderes? –