Java optaplanner:如何强制计划变量值只使用一次

Java optaplanner:如何强制计划变量值只使用一次,java,optaplanner,Java,Optaplanner,我正在努力学习optaplanner。作为一个学习项目,我正在尝试实现一个非常基本和简单的程序,它可以计算“” 基本上,我试图将“编号”分配给行和列中定义的“框” 很抱歉没有直接从源代码中复制/粘贴,我的开发机器无法连接到internet,所以我将尝试手工写下类的重要部分 我的域名结构如下: @规划解决方案 魔方解算 //facts List<Column> columnList List<Row> rowList List<Number> numberLis

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

基本上,我试图将“编号”分配给行和列中定义的“框”

很抱歉没有直接从源代码中复制/粘贴,我的开发机器无法连接到internet,所以我将尝试手工写下类的重要部分

我的域名结构如下:

@规划解决方案 魔方解算

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

//entity
List<Box> boxList


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

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

在我的解算器配置xml中,我使用了FIRST_FIT和FIRST_NON_Deteriting评分

问题是,;在我得到的解决方案中,数字的重用如下

7 5 3
1 5 9
7 5 3
在这里您可以看到,尽管行和列的总和等于15; 数字7、5和3被多次使用。 如何强制执行计划变量的值范围中的所有值至少使用一次且仅使用一次

谢谢


Akif,

添加分数约束:

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