【问题标题】:optaplanner: how to enforce planning variables values to be used only onceoptaplanner:如何强制计划变量值仅使用一次
【发布时间】:2014-03-11 19:50:08
【问题描述】:

我正在尝试学习 optaplanner。作为一个学习项目,我正在尝试实现一个非常基本和简单的程序来计算“magic squares”。

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

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

我的域名结构如下:

@PlanningSolution 魔方解决方案

//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 被多次使用。 如何强制计划变量的值范围内的所有值至少使用一次且仅使用一次。

谢谢。

阿基夫,

【问题讨论】:

    标签: java optaplanner


    【解决方案1】:

    添加分数约束:

    when
         Box($n : number, $id : id)
         Box(number == $n, $id > id)
    then
         // -1 hard
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      相关资源
      最近更新 更多