Drools와 함께 많은 경험 프로그래밍이 없지만 차량 라우팅과 비슷한 프로젝트를 진행하고 있습니다. 무작위 종자에 따라 약간의 움직임을 제외하고 거의 모든 것이 잘 작동합니다.Drools Planner Move
문제는 휴리스틱 단계가 완료되면, 때로는 로컬 검색 단계가 같은 이상한 움직임을 만드는 점이다 다음 하나
휴리스틱 단계 솔루션 :
일 1 : 장소 1 -> 장소 2 -> 장소 3 -> 장소 4 -> 장소 5 -> 장소 6 하루 2 : 장소 7 -> 장소 8 -> 장소 9 -> 장소 10
로컬 검색 이동 : 장소 5가 2 일로 이동 솔루션 :
일 1 : 장소 1 -> 장소 2 -> 장소 3 -> 장소 4 하루 2 : 장소 5 -> 장소 6
나머지 날은 아무 날도 남지 않습니다 (이 예에서는 차량 일 것입니다) 그리고 그들은는 비 고정 체인으로 남아 있습니다 :
곳 (7) -> 장소 8 -> 장소 9 -> 장소 10 -> 장소 7 -> 등
그래서, 프로그램이 어떤 날을 찾습니다 때 그 중 무한 루프가됩니다. 분명히, 그 문제는 그 고리에서 벗어나는 방법이 아닙니다. (나는 그 멍청한 놈이 아닙니다.) 그 움직임을 피하는 방법입니다.
저는 솔버 클래스를 변경하는 것과 같은 솔버 구성을 사용하므로 그 이동을 왜하는지 이해하지 못합니다. 내 자신의 Move 클래스를 코딩해야한다고 생각하지만 코드 작성법이나 MoveFactory 예제를 찾을 수 없습니다. 코드 블록에 solver.xml을 남깁니다.
Move 및 MoveFactory 클래스를 코딩하는 방법을 배우는 데 도움이되는 링크 나 팁이 있으면 도움이 될 것입니다.
어쨌든 시간과 노력에 감사드립니다. 5.5.0.Final에
<?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>
대단히 감사합니다. 5.5.0.Final (현재 5.4.0Final 사용)으로 업데이트하고 changeMoveSelector를 사용하여 작동하는지 알려 드리겠습니다. – unugarte