차량 라우팅과 유사한 체인 문제 인 설치 프로그램 예약 할당 문제를 해결하기 위해 Optaplanner를 사용하고 있습니다. 설치자 (차량)에는 여러 예약 (고객)이 할당되어있을 수 있습니다. 특정 주문에 대해 다른 예약과 관련하여 하나의 예약을 평가해야하기 때문에 체인을 구현해야합니다. 그래서 내 솔루션에서 Booking 및 Installer를 @PlanningEntityCollectionProperty로 선언했습니다. Booking와 Installer 모두 Standstill을 구현합니다. 그러나 예약에서 만 getPreviousStandstill() 메서드에 대해 @PlanningVariable을 선언했습니다.Optaplanner는 단일 체인 솔루션 만 생산합니다.
내 설정은 :
<solver>
<!--<environmentMode>FAST_ASSERT</environmentMode>-->
<!-- Domain model configuration -->
<solutionClass>InstallationSolution</solutionClass>
<entityClass>Standstill</entityClass>
<entityClass>Booking</entityClass>
<!-- Score configuration -->
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<!--<easyScoreCalculatorClass>org.optaplanner.examples.cloudbalancing.solver.score.CloudBalancingEasyScoreCalculator</easyScoreCalculatorClass>-->
<!--<easyScoreCalculatorClass>org.optaplanner.examples.cloudbalancing.solver.score.CloudBalancingMapBasedEasyScoreCalculator</easyScoreCalculatorClass>-->
<!--<incrementalScoreCalculatorClass>org.optaplanner.examples.cloudbalancing.solver.score.CloudBalancingIncrementalScoreCalculator</incrementalScoreCalculatorClass>-->
<!--<scoreDrl>com/tmrnd/pejal/opta/solver/fulfillmentScoreRules.drl</scoreDrl>-->
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
<!--<assertionScoreDirectorFactory>-->
<!--<easyScoreCalculatorClass>org.optaplanner.examples.cloudbalancing.solver.score.CloudBalancingMapBasedEasyScoreCalculator</easyScoreCalculatorClass>-->
<!--</assertionScoreDirectorFactory>-->
</scoreDirectorFactory>
<!-- Optimization algorithms configuration -->
<termination>
<!-- <secondsSpentLimit>20</secondsSpentLimit>-->
<unimprovedSecondsSpentLimit>15</unimprovedSecondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector/>
<swapMoveSelector/>
<subChainChangeMoveSelector>
<selectReversingMoveToo>true</selectReversingMoveToo>
</subChainChangeMoveSelector>
<subChainSwapMoveSelector>
<selectReversingMoveToo>true</selectReversingMoveToo>
</subChainSwapMoveSelector>
</unionMoveSelector>
<acceptor>
<entityTabuSize>20</entityTabuSize>
</acceptor>
<forager>
<acceptedCountLimit>1000</acceptedCountLimit>
</forager>
</localSearch>
</solver>
내가) (해결하려고
, 나는 그에게 asssigned 모든 예약 하나 개의 설치를 얻었다. 상황을 개선하기 위해해야 할 일은 무엇입니까?
사실 facts.addAll()을 getProblemFacts()에서 facts.add()로 변경했지만 여전히 동일한 문제가 있습니다. 주석 처리를 해제하거나 내 '@ PlanningVariable'을 CHAINED로 바꾼 후에도 다음과 같은 예외가 발생합니다. 발생 원인 : java.lang.IllegalStateException : 로컬 검색 단계가 초기화되지 않은 솔루션으로 시작되었습니다. 먼저 솔루션을 초기화하십시오. 예를 들어, 먼저 건설 휴리스틱 단계를 실행하십시오. 그러나 예외 전에 프로그램에서 기록한 내용은 다음과 같습니다. 건설 휴리스틱 단계 (0) : 단계 합계 (1456), 소요 시간 (15875), 최고 점수 (-2761hard/-195507soft). –
사실 .addAll()이 올바른 방법입니다. –
나는 무작위로 변경하는 대신 문서를 읽는 것으로 돌아갈 때가되었다고 생각합니다. 특히 체인 된 변수에 대한 계획 구성 장을 읽으십시오. –