Для моей проблемы оптимизации я позволил OptaPlanner построить начальное решение (FIRST_FIT), а затем выполнить локальный поиск.
<unionMoveSelector>
<changeMoveSelector/>
<swapMoveSelector/>
<pillarChangeMoveSelector>
<subPillarType>ALL</subPillarType>
</pillarChangeMoveSelector>
<pillarSwapMoveSelector>
<subPillarType>ALL</subPillarType>
</pillarSwapMoveSelector>
</unionMoveSelector>
<acceptor>
<entityTabuSize>7</entityTabuSize>
<lateAcceptanceSize>400</lateAcceptanceSize>
</acceptor>
<forager>
<acceptedCountLimit>1000</acceptedCountLimit>
</forager>
Моя проблема имеет трехуровневую оценку (жесткий / средний / мягкий), где «жесткий» моделирует жесткие ограничения и должен стать 0 в допустимом решении, «средний» - моя основная цель оптимизации, а «мягкий» - это суб- гол / тай-брейк.
Теперь я проверяю решение и вижу, что могу улучшить его всего за 2 хода изменений, то есть назначить двум объектам планирования другое значение. Но первый ход делает задачу невыполнимой (т.е. снижает жесткий балл на <0). Второй шаг увеличивает сложную оценку до 0 и дает более высокую среднюю оценку. Однако, что бы я ни пробовал (более длительное время расчета, acceptCountLimit = 100000 и т. Д.) OptaPlanner не находит этого решения.
Теперь мне интересно, решит ли OptaPlanner во время локального поиска подняться на вершину, даже если я настроил локальный поиск, как указано выше. Полагаю, что нет, но есть ли у кого-нибудь мысли о том, что можно улучшить?