如何使用规划实体的OptaPlanner ValueRange?

How to use OptaPlanner ValueRange from planning entity?

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

这是早期版本不支持的 6.1 功能吗?

使用此功能会限制工作内存大小吗?这就是我的目标。

非常感谢您的帮助!

这是手册中的示例:

@PlanningVariable

@ValueRange(type = ValueRangeType.FROM_PLANNING_ENTITY_PROPERTY, planningEntityProperty = "possibleRoomList")

public Room getRoom() {

    return room;

}


public List<Room> getPossibleRoomList() {

    return getCourse().getTeacher().getPossibleRoomList();

}

让我们先明确术语:计划变量(例如示例中的 getRoom())具有一个值范围(这是一个计划值列表),每个实体实例都不同。

关于这样一个List的规划值:

  • 每个实体都有自己的 List 实例,但如果多个实体具有完全相同的值范围,则它们可以共享同一个 List 实例。
  • 无副本:规划值实例在解决方案中应该只存在一次。因此,具有不同值范围但在其值范围内具有相同计划值的 2 个实体应该使用相同的计划值实例。