Ich verwende Optaplanner 6.3.0, um TSPTW-Probleme in einer anwenderseitigen Anwendung zu lösen. Die Anzahl der Besuche ist variabel (basierend auf Benutzereingaben) aber weniger als 500. Ich möchte eine Antwort innerhalb eines festen Zeitlimits zurückgeben.Sicherstellen, dass der Optaplanner die vollständige Lösung innerhalb des Zeitlimits findet
Ich habe derzeit eine secondsSpentLimit Terminierung, habe aber festgestellt, dass, wenn diese Beendigung in der Bauphase auftritt, die beste Lösung unvollständig ist, da nicht alle Besuche in der Kette sind.
Ich möchte sicherstellen, dass eine komplette Lösung, auch eine schlechte, immer zurückgegeben wird. Ich habe als mögliche Lösung in Betracht gezogen, die Startlösung selbst zu initialisieren und die Bauphase zu verlassen. Würde das funktionieren oder gibt es einen besseren Weg, dies zu erreichen?
Hier ist meine aktuelle Konfiguration.
<solver>
...
<termination>
<secondsSpentLimit>30</secondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<cacheType>PHASE</cacheType>
<selectionOrder>SHUFFLED</selectionOrder>
</changeMoveSelector>
<tailChainSwapMoveSelector />
<subChainChangeMoveSelector>
<subChainSelector>
<maximumSubChainSize>50</maximumSubChainSize>
</subChainSelector>
<selectReversingMoveToo>true</selectReversingMoveToo>
</subChainChangeMoveSelector>
</unionMoveSelector>
<acceptor>
<lateAcceptanceSize>200</lateAcceptanceSize>
</acceptor>
<forager>
<acceptedCountLimit>1</acceptedCountLimit>
</forager>
<termination>
<unimprovedStepCountLimit>100</unimprovedStepCountLimit>
</termination>
</localSearch>
</solver>