我已经从optaplanner样本的CurriculumCourse示例扩展了我的问题基础。
由于有必要解决现有问题,我开始使用2个变量,来自"来自实体"的值范围提供者。
现在我正在努力改进我的解决方案,并且, 当我检查解决方案时,我意识到有一些讲座可以更好(基于分数),如果它们被简单地交换,或者向左或向右移动等等。
我不确定这种方法是否会解决这个问题,但我抓住了这个问题,通过附近的选择,规划师可以“粗粒度”#34;移动,特别是基于它们的相似性(自定义DistanceMeter)
然而,问题从这一点开始,我无法正确配置nearbySelection,这是我最新的配置xml
<changeMoveSelector>
<entitySelector id="entitySelector1">
<entityClass>....Lecture</entityClass>
</entitySelector>
<valueSelector>
<variableName>period</variableName>
<nearbySelection>
<originEntitySelector mimicSelectorRef="entitySelector1"/>
<nearbyDistanceMeterClass>.....LectureNearbyDistanceMeter</nearbyDistanceMeterClass>
<parabolicDistributionSizeMaximum>40</parabolicDistributionSizeMaximum>
</nearbySelection>
</valueSelector>
</changeMoveSelector>
如果我不提供variableName,那么它不起作用,因为配置程序无法自动选择它,但是,我无法将variableName放在valueSelector中,它抱怨 &#34; java.lang.IllegalArgumentException:valueSelector(org.optaplanner.core.impl.heuristic.selector.value.nearby.NearEntityNearbyValueSelector@2f66e802) 具有可变属性类型(.... Period) 这不是originEntitySelector的entityClass(.... Lecture)的超类。&#34;
有人能给我一些线索,我在这里做错了吗?
答案 0 :(得分:1)
发生这种异常是因为它似乎期望链式设计(它期望规划值类是实体类的超类)。如果我没记错的话,可以通过升级到6.3.0.CR1来解决这个限制。
但是附近的距离计数器不能考虑当前的分数(=它不能基于分数)。所以看起来你真的只想实现自定义移动选择器。请参阅docs中的MoveListFactory。当然,让它做抛物线分布很难......