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

optaplanner:如何强制规划变量值只能使用一次

岳彬炳
2023-03-14

我正在努力学习Optaplanner。作为一个学习项目,我正在尝试实现一个非常基本和简单的程序,计算“幻方”。

基本上,我试图将“数字”S分配给行和列中定义的“框”ES。

很抱歉没有直接从源代码复制/粘贴,我的开发机器无法连接到互联网,所以我会尝试用手写下类的重要部分。

我的域结构如下:

@PlanningSolution MagicSquareSolution

//facts
List<Column> columnList
List<Row> rowList
List<Number> numberList

//entity
List<Box> boxList


@valueRangeProvider (id="numberRange")
getNumberList()

@PlanningEntityCollectionProperty
getBoxList

@PlanningEntity框

Column column
Row row
Number number // planningVariable

@PlanningVariable(valueRangeProviderRefs="{numberRange}")
getNumber

我正在使用一个简单的Java分数计算器类。

在我的求解器配置xml中,我使用了FIRST_FIT和first_non_deterirating_score。

问题是;在我得到的解决方案中,数字被重用,就像

7 5 3
1 5 9
7 5 3

在这里你可以看到虽然行和列的总和等于15;数字7、5、3被多次使用。如何强制规划变量的值范围中的所有值至少使用一次且仅使用一次。

多谢了。

阿基夫,

共有1个答案

东方琪
2023-03-14

添加分数约束:

when
     Box($n : number, $id : id)
     Box(number == $n, $id > id)
then
     // -1 hard
 类似资料:
  • 各位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

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

  • 我正在研究来自OptaPlanner的示例用例。我也找不到任何类似的例子,可以在一个规划实体中求解多个规划变量。例如,在护士名册中,一个轮班的每个可能需要多个分配的。在这种情况下,如何利用planner和编写规则呢?

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

  • 我正在尝试限制可以与特定实体关联的计划变量。在 OptaPlanner 手册的第 4.3.4.2.2 节中,显示了一个示例,但不清楚应该如何生成变量列表。列表应包含哪些内容?这些计划变量本身吗?它们可以是副本吗?如果允许复制,那么如何比较它们?如果不是,则在定义计划实体时计划变量不在范围内 - 我意识到这是一个 Java 问题,但如何从计划实体定义访问计划变量列表并不明显。 这是早期版本不支持的6

  • 在制定时间表时,你必须遵守法律(硬性要求),该法律规定,作为一名员工,你每七天只能工作一定的时间。它没有说日历周的原因是在创建时间表时为雇主提供一些回旋空间(通常是提前4-16周)。一旦设置了此计划期的开始日期,在您想要进行完整的重新规划之前,该日期无法更改,但您需要通知员工。所以它可以被视为一个变量,直到你接受了时间表,然后它就变成了一个常数。当然,这是每个员工的个人情况。该开始日期将由您的第一