当前位置: 首页 > 知识库问答 >
问题:

Optaplanner-多变量nearbySelection

轩辕涵亮
2023-03-14

我从optaplanner示例的CourclemCourse示例中扩展了我的问题库。

由于需要解决现有的问题,我开始使用两个变量,都来自“实体的Value range provider”。

现在我正在努力改进我的解决方案,当我检查解决方案时,我意识到有一些课程可以更好(基于分数),如果他们只是交换,或左移或右移,等等。

我不确定这种方法是否能解决这个问题,但我发现,使用nearbySelection,规划者可以“粗粒度”移动,特别是基于它们的相似性(自定义距离计)

然而,问题从这一点开始,我无法正确配置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,那么它就不能工作,因为configurator不能自动选择它,但是,我不能将variableName放在valueSelector中,它会抱怨“java.lang.IllegalArgumentException:valueSelector(org.optaplanner.core.impl.heuristic.selector.Value.Nearby.NearEntityNearbyValueSelector@2F66E802)有一个变量属性类型(....Perio),它不是OriginEntitySelector的entityClass(....讲座)的超类

谁能给我一个线索,我在这里做错了什么?

共有1个答案

赫连淳
2023-03-14

出现该异常是因为它似乎期望一个连锁设计(它期望规划值类是实体类的超类)。如果我没记错的话,这个限制很可能通过升级到6.3.0.cr1来修复。

但是nearbyDistanceMeterClass不能考虑当前分数。所以看起来您真的只是想实现一个自定义移动选择器。参见文档中的MoveListFactory。当然,让它做抛物线分布是很难的...

 类似资料:
  • 我用增量java解决了optaPlanner的一个问题,其中有一个规划变量和一个规划实体,但是现在在我们的项目中有很多规划变量的需求,比如我们要找到最好的房间(容量,isAC等),汽车(totalSeatsLeft,isAC等),我们不知道有多少资源,因为我们每天都需要根据用户的需求增加更多的资源,比如会议室设施等,所以给我一些想法,这样我们就可以为optaPlanner做一个域。多谢了。

  • 各位opatplanner用户, 我的规划问题是:获取遥感卫星星座的有效时间表。 @PlanningEntity: @PlanningVariable: 我的问题数据主要是这样的: Image_Strip: D1 Sat2 22-12-2015 11:02:24.051 D1 Sat1 22-12-2015 11:04:24.122 A2 Sat3 22-12-2015 11:06:24.172

  • 嗨,我目前正试图暗示一个OptaPlanner解决方案,我有困难与语法的2个规划变量。这些值是某个范围的连续加倍,该范围需要在解求解之前动态设置。 我已经看了以下2个网站,并很难看到他们应该如何实施。 请有人让我知道这应该如何实施。范围的值可以是0到n之间的任何值。 谢了。

  • 我是Optaplanner的新手,我一直在考虑将VRP扩展到一个不同的问题空间。我用的是6.1.0-final。这是一个很难计算的问题,但下面是: 规划实体-装运(扩展Standstill),由运输商(即货船)锚定规划变量-终端(货物目的地),当然隐含运输商(作为VRP示例中的Vehicle这样的影子变量) 在这个路径问题中,货物直接运输到一个终端,然后再运回工厂。即一个运输机服务于一个终点站,然

  • 我使用的OptaPlanner有两个规划变量,其中一个定义为nullable=true。遵循会议示例(为简单起见),假设Room可以为空,但Time不能为空。 我在非空的变量上定义了一个约束,但似乎只有当可空的变量不为空时,惩罚才起作用,否则会失败。 下面是我的代码片段: 在我的约束提供者类中,我定义了以下约束来确保一个人不能参加两个单独的会议: 当创建两个具有非空值的对象时,如果假设同一个人同时

  • 问题内容: 我继承了一些Python代码,这些代码用于创建巨大的表(最多19列,每行5000行)。花了 九秒钟 时间在屏幕上绘制了表格。我注意到每一行都是使用以下代码添加的: 字符串在哪里。 我将其更改为: 我注意到桌子现在出现了 六秒 。 然后我将其更改为: 基于这些Python性能提示(仍为6秒)。 由于调用了大约5000次,因此突出了性能问题。但是为什么会有如此大的差异呢?为什么编译器没有在