ComparatorSelectionSorter 处的 OptaPlanner ClassCastException
OptaPlanner ClassCastException at ComparatorSelectionSorter
我正在尝试在示例中实现类似 NurseRostering 的功能,所以除了 'solver/drools&moves' 中的 类 之外,我做了所有相同的事情(也有人可以解释他们到底做了什么吗?)。
所以,我的问题是,我实现了比较器:EmployeeStrengthComparator 和 JobDifficultyComparator,它们就像 NurseRostering 示例中的 EmployeeStrengthComparator 和 ShiftAssignmentDifficultyComparator。
所以我设置了我的规则,我的解决方案,并开始解决,但是我得到了这个错误:
Exception in thread "main" java.lang.ClassCastException: org.demo.DemoApp.domain.JobAssignment cannot be cast to org.demo.DemoApp.domain.Employee
at org.demo.DemoApp.domain.solver.EmployeeStrengthComparator.compare(EmployeeStrengthComparator.java:12)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.util.TimSort.sort(TimSort.java:220)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
at org.optaplanner.core.impl.heuristic.selector.common.decorator.ComparatorSelectionSorter.sort(ComparatorSelectionSorter.java:45)
at org.optaplanner.core.impl.heuristic.selector.value.decorator.SortingValueSelector.constructCache(SortingValueSelector.java:43)
at org.optaplanner.core.impl.heuristic.selector.common.SelectionCacheLifecycleBridge.phaseStarted(SelectionCacheLifecycleBridge.java:49)
at org.optaplanner.core.impl.phase.event.PhaseLifecycleSupport.firePhaseStarted(PhaseLifecycleSupport.java:39)
我希望有人知道我哪里出错的原因,当然可以提供更多 information\sources,但我想原因很明显,因为我对这个框架很陌生,可能会漏掉一些东西在配置中可能是。
更新:
所以就像:
@PlanningEntityCollectionProperty
@ValueRangeProvider(id = "employeeRange")
public List<JobAssignment> getJobAssignments() {
return jobAssignments;
}
哦好吧...我不小心把属性ValueRangeProvider
添加到规划实体JobAssignment中,当它应该放在Employee上时,现在可以了
更新:
应该是这样的:
@ValueRangeProvider(id = "employeeRange")
public List<Employee> getEmployees() {
return employees;
}
@PlanningEntityCollectionProperty
public List<VisitAssignment> getVisitAssignments() {
return visitAssignments;
}
我正在尝试在示例中实现类似 NurseRostering 的功能,所以除了 'solver/drools&moves' 中的 类 之外,我做了所有相同的事情(也有人可以解释他们到底做了什么吗?)。
所以,我的问题是,我实现了比较器:EmployeeStrengthComparator 和 JobDifficultyComparator,它们就像 NurseRostering 示例中的 EmployeeStrengthComparator 和 ShiftAssignmentDifficultyComparator。
所以我设置了我的规则,我的解决方案,并开始解决,但是我得到了这个错误:
Exception in thread "main" java.lang.ClassCastException: org.demo.DemoApp.domain.JobAssignment cannot be cast to org.demo.DemoApp.domain.Employee
at org.demo.DemoApp.domain.solver.EmployeeStrengthComparator.compare(EmployeeStrengthComparator.java:12)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.util.TimSort.sort(TimSort.java:220)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
at org.optaplanner.core.impl.heuristic.selector.common.decorator.ComparatorSelectionSorter.sort(ComparatorSelectionSorter.java:45)
at org.optaplanner.core.impl.heuristic.selector.value.decorator.SortingValueSelector.constructCache(SortingValueSelector.java:43)
at org.optaplanner.core.impl.heuristic.selector.common.SelectionCacheLifecycleBridge.phaseStarted(SelectionCacheLifecycleBridge.java:49)
at org.optaplanner.core.impl.phase.event.PhaseLifecycleSupport.firePhaseStarted(PhaseLifecycleSupport.java:39)
我希望有人知道我哪里出错的原因,当然可以提供更多 information\sources,但我想原因很明显,因为我对这个框架很陌生,可能会漏掉一些东西在配置中可能是。
更新: 所以就像:
@PlanningEntityCollectionProperty
@ValueRangeProvider(id = "employeeRange")
public List<JobAssignment> getJobAssignments() {
return jobAssignments;
}
哦好吧...我不小心把属性ValueRangeProvider
添加到规划实体JobAssignment中,当它应该放在Employee上时,现在可以了
更新:
应该是这样的:
@ValueRangeProvider(id = "employeeRange")
public List<Employee> getEmployees() {
return employees;
}
@PlanningEntityCollectionProperty
public List<VisitAssignment> getVisitAssignments() {
return visitAssignments;
}