У меня есть задача назначения задачи для оптимизации.Я решил использовать шаблон « Цепочка сквозного времени » с допустимыми промежутками из-за окон и перерывов в встречах.Я использую классы LocalDateTime и Duration для значений, связанных с датой / временем.
Я предоставил приложению максимум 2000 мегабайт и оптимизирую 4000 задач в 500 смен (50 рабочих x 10 дней)... что означает 4000 объектов планирования и 500 якорей.Приложение настроено на работу в течение максимум 8 часов.
Фаза CH быстро и легко увеличивается, затем начинается фаза LS, и она также проходит гладко.Однако со временем использование памяти становится все выше и выше до тех пор, пока OOME не будет выброшено.
Похоже, что если я отключу все свои правила слюни (с помощью префикса их условий when
с false &&
, получая таким образом правиланикогда не будет оцениваться), что заставляет программу работать быстрее, использование памяти также будет расти намного быстрее.OOME генерируется в течение 3 минут вместо часов.
Моя конфигурация выглядит следующим образом (опущено условие раннего завершения):
<solver>
<environmentMode>NON_REPRODUCIBLE</environmentMode>
<moveThreadCount>AUTO</moveThreadCount>
<solutionClass>...</solutionClass>
<entityClass>...</entityClass>
...
<scoreDirectorFactory>
<scoreDrl>...</scoreDrl>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
</scoreDirectorFactory>
<constructionHeuristic>
<constructionHeuristicType>ALLOCATE_ENTITY_FROM_QUEUE</constructionHeuristicType>
<entitySorterManner>DECREASING_DIFFICULTY</entitySorterManner>
<valueSorterManner>DECREASING_STRENGTH</valueSorterManner>
<changeMoveSelector/>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector/>
<swapMoveSelector/>
<tailChainSwapMoveSelector/>
<subChainChangeMoveSelector/>
<subChainSwapMoveSelector/>
</unionMoveSelector>
<acceptor>
<lateAcceptanceSize>200</lateAcceptanceSize>
</acceptor>
<forager>
<acceptedCountLimit>1</acceptedCountLimit>
</forager>
</localSearch>
</solver>
Вот пример прогона оптимизации, который получает OOME в течение4 часа:
пробег @ 3 часа (почти OOME)
пробег @ 4 часа (OOME)