0

Ich habe eine gerichtete azyklische Grafik, Bögen sind Entities und Gewichte zugeordnet sind jeder Arc die PlanningVariables. Ich verwende:Branch And Bound funktioniert nicht in OptaPlanner

@ValueRangeProvider(id = "bufferRange") 
public CountableValueRange<Integer> getDelayRange() { 
    return ValueRangeFactory.createIntValueRange(1, 1000); 
} 

, um Werte zu meinen Variablen zuzuweisen. Auch ich bin auf dieses Problem gestoßen: Exhaustive Search in OptaPlanner does not work on very simple example, die jetzt durch Setzen von Variablen von int zu Integer und Überprüfung null Werte in der Score-Berechnung gelöst wird.

Jetzt ist das Problem, dass der Löser nicht scheint, beim Zuweisen von Werten zurückzuschalten. Ich habe einen Ausdruck verwendet, um die Werte zu überprüfen, die jedem Bogen zugeordnet sind. Zu Beginn des Lösungsprozesses kann ich sehen, dass Werte auf verschiedene Bögen gesetzt werden. Aber nach einiger Zeit Zuordnungen der Löser stecken in die Zuordnung von Werten zu dem gleichen Bogen. Wenn ich die Drucke überprüfe, sehe ich, dass die Attribute von 1 bis 1000 gehen und dann von vorne beginnen. Da alle Werte aus der Domäne einmal getestet werden, warum wird der Solver nicht zurückverfolgt, anstatt dieselben Werte erneut zuzuweisen?

Ich habe mit allen <nodeExplorationType> Optionen getestet und erstellt eine Klasse, um die <entitySorterManner> mit den gleichen Ergebnissen zu verwenden.

Vielen Dank im Voraus.

+0

Verwenden Sie DEBUG oder TRACE-Protokollierung? Ein Debug-Protokoll ohne Trace-Protokoll könnte den falschen Eindruck erwecken, dass es in der Endlosschleife steckenbleibt. –

+0

Wie viele Entitäten haben Sie? Ich sehe, Sie haben 999 Planungswerte pro Variable und ich nehme 1 Variable pro Entität an. Sehen Sie dasselbe Verhalten, wenn Sie die Anzahl der Entitäten und die Anzahl der Planungswerte auf eine Handvoll reduzieren? –

+0

Aktiviert auf TRACE-Ebene, so dass die variable Einstellung angezeigt wird. Betrachten wir diese Probleminstanz: Ich verwende 5 Entitäten, folglich gibt es 5 Variablen. Wenn der Bereich auf 1 - 5 reduziert wird, ist die Lösung die beste Lösung, die in 0.685s gefunden wird. Wenn ich den Bereich auf 1 - 50 ändere, passiert das gleiche Verhalten. Solver setzt die selbe Entität mit redudundanten Werten [link] (http://pastebin.com/wQQvE0qz) (Log-Ergebnis). –

Antwort

1

Ich sage, Sie haben Recht Geoffrey, deaktivieren Sie das Protokoll und lassen Sie das Programm für fast 48h laufen und es kam mit einer Antwort. Die Art und Weise, wie Protokolle gedruckt werden, führt zu einer falschen Analyse. Nur zur Erinnerung, wenn der Logger deaktiviert ist, ist die Leistung erheblich besser.

+0

Gut zu hören :) Weitere Informationen finden Sie in meinem Blog zur Logger-Leistung und in den Dokumenten zur schrecklichen Skalierbarkeit von Branch und Bound. –

+0

Vielen Dank für Ihre Hilfe :) –