픽업 및 배달 문제 (PDPTW)에 대해 OptaPlanner을 구성했습니다. 내 구성에서는 VRPTW 예제와 매우 유사한 체인 계획 변수를 사용합니다. FIRST_FIT_DECREASING
구조 휴리스틱뿐만 아니라 대부분의 지역 검색 알고리즘이 작동합니다. 스레드 "주요"java.lang.IllegalArgumentException가에서PDPTW를위한 OptaPlanner에서 가장 저렴한 삽입?
예외 : 나는
CHEAPEST_INSERTION
건설 휴리스틱을 시도 할 때, 나는 다음과 같은 예외가 resolvedCacheType (PHASE)와 resolvedSelectionOrder 가진 valueSelectorConfig (ValueSelectorConfig (previousVisit)() SORTED)는 EntityIndependentValueSelector (Initialized (FromSolutionPropertyValueSelector (previousVisit)))를 기반으로해야합니다. @ValueRangeProvider 주석을 확인하십시오.
문제는 내가 실제로 오류 메시지를 이해하지 못한다는 것입니다. 내 @ValueRangeProvider
주석을 확인했는데 모든 것이 정확하다고 보입니다. This question 비슷한 문제가 제기되는 것처럼 보입니다. 여기서는 각 엔티티의 값 범위 목록을 수동으로 정렬하는 방법을 제안합니다. 내게이 해결 방법이 내 사례에 적용되는지 또는 적용 방법이 적용되는지는 분명하지 않다.
나는 OptaPlanner 6.3.0.Final을 사용하고 있습니다.
나는 다음과 같은 구성을 사용하고 있습니다 플래너를 인스턴스화 :
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<environmentMode>REPRODUCIBLE</environmentMode>
<randomType>MERSENNE_TWISTER</randomType>
<solutionClass>com.github.rinde.logistics.pdptw.solver.optaplanner.PDPSolution</solutionClass>
<entityClass>com.github.rinde.logistics.pdptw.solver.optaplanner.ParcelVisit</entityClass>
<entityClass>com.github.rinde.logistics.pdptw.solver.optaplanner.Visit</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT_LONG</scoreDefinitionType>
<incrementalScoreCalculatorClass>com.github.rinde.logistics.pdptw.solver.optaplanner.ScoreCalculator</incrementalScoreCalculatorClass>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
</scoreDirectorFactory>
<termination>
<unimprovedMillisecondsSpentLimit>180000</unimprovedMillisecondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>CHEAPEST_INSERTION</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<moveIteratorFactory>
<moveIteratorFactoryClass>com.github.rinde.logistics.pdptw.solver.optaplanner.MoveItFactory</moveIteratorFactoryClass>
</moveIteratorFactory>
<changeMoveSelector>
<filterClass>com.github.rinde.logistics.pdptw.solver.optaplanner.ChangeFilter</filterClass>
</changeMoveSelector>
<changeMoveSelector>
<entitySelector>
<filterClass>com.github.rinde.logistics.pdptw.solver.optaplanner.EntityFilter</filterClass>
</entitySelector>
</changeMoveSelector>
</unionMoveSelector>
</localSearch>
</solver>
클래스는 여기에 정의됩니다 https://github.com/rinde/RinLog/tree/develop/src/main/java/com/github/rinde/logistics/pdptw/solver/optaplanner
내가 CHEAPEST_INSERTION
시도에 관심이 있어요 그 이유는 내가 발견 한 것입니다 내 가장 저렴한 삽입 구현은 FIRST_FIT_DECREASING
과 함께 Simulated Annealing
과 매우 유사합니다. OptaPlanner의 내 사용법이 올바른지 확인하기 위해 OptaPlanner의 가장 저렴한 삽입 물과 비교하고 싶습니다.
업데이트 : 난 그냥, 문제는 (I 인해 API 변화에 코드의 일부를 변경했고, 자바를 사용하는 내 프로젝트를 변경했다 고정 것 같다 OptaPlanner 7.0.0-SNAPSHOT으로 그것을 시도 8).
버그처럼 보입니다. 나는 [jira를 만들었다] (https://issues.jboss.org/browse/PLANNER-597). –
가장 저렴한 삽입은 First Fit 변형보다 훨씬 나쁘기 때문에 많이 사용되지 않습니다. –
** 가장 저렴한 삽입 **을 사용하는 optaplanner-example VRPTW로는 재현 할 수 없습니다. 6.4.0. 최종 결과를 재현 할 수 있는지 확인하고 솔버 설정을 질문에 추가하십시오. 유효한 구성 인 경우 PLANNER-597을 다시 엽니 다. –