在 OptaPlanner 中处理层次约束的推荐方法是什么?

What is the recommended way to handle a hierarchical constraint in OptaPlanner?

我正在尝试通过构建播放列表生成器来学习 OptaPlanner。我的约束大致如下:

  1. 总时间必须在 60 分钟左右。
  2. 选择的所有歌曲必须是唯一的。
  3. 每个大约 15 分钟的块可能只包含一位艺术家的歌曲。
  4. 四个 15 分钟的片段必须是不同的艺术家。

因此,按等级划分,我的意思是您可以选择艺术家,然后尝试填充区块。

我当前的实现将这些表示为对歌曲选择的限制。它能够解决问题,但我觉得它花了很多时间试图对齐艺术家约束。

通读文档,似乎有一些功能可能会有所帮助:

处理这种关系的推荐方法是什么?

听起来这些只是具有 4 个不同分数级别 的 4 个约束(请参阅有关分数计算的文档章节)。所以在那种情况下,你需要一个 BendableScore.

但在实践中,如果 3. 和 4. 是分层的,我会感到惊讶:3 可能 得分权重 比 4 重得多。在那种情况下 HardMediumSoftScore 就足够了。