2013-03-27 8 views
0

У меня нет большого опыта программирования, не говоря уже о Drools, но я делаю проект, похожий на маршрут маршрутизации. Почти все работает нормально, за исключением некоторых ходов, в зависимости от случайного семени.Drools Planner Move

Проблема заключается в том, что после того, как эвристическая фаза делается, иногда локальная фаза поиска делает какие-то странные движения, как следующий:

Эвристические фазы раствор:

день 1: 1 место -> место 2 -> место 3 -> место 4 -> место 5 -> место 6 день 2: место 7 -> место 8 -> место 9 -> место 10

Местный поиск: место 5 перенесено на второй день Решение:

день 1: место 1 -> место 2 -> место 3 -> место 4 день 2: место 5 -> место 6

Остальные места остались без дня (в примере это будет транспортное средство) , и они остаются как unanchored цепи:

место 7 -> место 8 -> место 9 -> место 10 -> место 7 -> и т.д.

Таким образом, когда программа ищет день любого из них он входит в бесконечный цикл. Очевидно, проблема заключается не в том, как выйти из этого цикла (я не тот noob), это как избежать этих движений.

Я использую ту же конфигурацию решателя, что и пример (изменение класса решателя и т. Д.), Поэтому я не понимаю, почему он делает эти перемещения. Я думаю, что я должен закодировать свой собственный класс Move, но я не могу найти примеры того, как его кодировать, и MoveFactory. Я оставляю файл solver.xml в блоке кода.

Полезные ссылки или советы, которые помогут мне научиться кодировать класс Move и MoveFactory, а также советы по настройке, чтобы избежать этого (если они есть).

В любом случае, спасибо вам всем за ваше время и силы.

<?xml version="1.0" encoding="UTF-8"?> 
<solver> 
    <!--<environmentMode>DEBUG</environmentMode>--> 
    <environmentMode>PRODUCTION</environmentMode> 
    <solutionClass>org.tourgune.planificador.bean.Turista</solutionClass> 
    <planningEntityClass>org.tourgune.planificador.bean.PuntoInteres</planningEntityClass> 

    <scoreDirectorFactory> 
    <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType> 
    <scoreDrl>/org/tourgune/planificador/core/planificadorScoreRules.drl</scoreDrl> 

    </scoreDirectorFactory> 

    <termination> 
    <maximumMinutesSpend>4</maximumMinutesSpend> 
    </termination> 
    <constructionHeuristic> 
    <constructionHeuristicType>FIRST_FIT</constructionHeuristicType> 
    </constructionHeuristic> 
    <localSearch> 
    <selector> 
     <selector> 
      <moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangeMoveFactory</moveFactoryClass> 
     </selector> 
     <selector> 
     <moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangePartMoveFactory</moveFactoryClass> 
     </selector> 
     <!-- TODO needs a GenericChainedSwapMoveFactory and probably even a GenericChainedSwapPartMoveFactory --> 
    </selector> 
    <acceptor> 
     <planningEntityTabuSize>10</planningEntityTabuSize> 
    </acceptor> 
    <forager> 
     <minimalAcceptedSelection>0</minimalAcceptedSelection> 
    </forager> 

    </localSearch> 
    <!--<localSearch>--> 
    <!--<selector>--> 
     <!--<selector>--> 
     <!--<moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangeMoveFactory</moveFactoryClass>--> 
     <!--</selector>--> 
     <!--<selector>--> 
     <!--<moveFactoryClass>org.drools.planner.core.move.generic.GenericChainedChangePartMoveFactory</moveFactoryClass>--> 
     <!--</selector>--> 
    <!--</selector>--> 
    <!--<acceptor>--> 
     <!--<simulatedAnnealingStartingTemperature>10</simulatedAnnealingStartingTemperature>--> 
    <!--</acceptor>--> 
    <!--<forager>--> 
     <!--<minimalAcceptedSelection>4</minimalAcceptedSelection>--> 
    <!--</forager>--> 
    <!--</localSearch>--> 
</solver> 

ответ

0

Обновление до 5.5.0.Final первого, так что вы можете просто использовать <changeMoveSelector/> вместо этих общих заводов. Следуйте рецепту обновления txt.

Если у вас все еще есть проблема, включите DEBUG для обнаружения повреждения счета (обычно это вызвано методом клонирования или правилами хакерских оценок). OptaPlanner (= Drools Planner) 6.0 упростит составление правил оценки и значительно уменьшит вероятность того, что вы столкнетесь с коррупцией.

+0

Большое спасибо, я буду обновлять до 5.5.0.Final (в настоящее время использую 5.4.0Final) и использовать changeMoveSelector и сообщать вам, если это сработало. – unugarte