Optaplanner - 附近有多个变量的选择

时间:2015-08-26 12:41:10

标签: optaplanner

我已经从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;

有人能给我一些线索,我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

发生这种异常是因为它似乎期望链式设计(它期望规划值类是实体类的超类)。如果我没记错的话,可以通过升级到6.3.0.CR1来解决这个限制。

但是附近的距离计数器不能考虑当前的分数(=它不能基于分数)。所以看起来你真的只想实现自定义移动选择器。请参阅docs中的MoveListFactory。当然,让它做抛物线分布很难......