在 OptaPlanner 中处理层次约束的推荐方法是什么?
What is the recommended way to handle a hierarchical constraint in OptaPlanner?
我正在尝试通过构建播放列表生成器来学习 OptaPlanner。我的约束大致如下:
- 总时间必须在 60 分钟左右。
- 选择的所有歌曲必须是唯一的。
- 每个大约 15 分钟的块可能只包含一位艺术家的歌曲。
- 四个 15 分钟的片段必须是不同的艺术家。
因此,按等级划分,我的意思是您可以选择艺术家,然后尝试填充区块。
我当前的实现将这些表示为对歌曲选择的限制。它能够解决问题,但我觉得它花了很多时间试图对齐艺术家约束。
通读文档,似乎有一些功能可能会有所帮助:
- 分区搜索
- 链式变量
- 自定义移动选择器(例如更改所有歌曲以具有一致的艺术家)
- 约束的不同权重
处理这种关系的推荐方法是什么?
听起来这些只是具有 4 个不同分数级别 的 4 个约束(请参阅有关分数计算的文档章节)。所以在那种情况下,你需要一个 BendableScore
.
但在实践中,如果 3. 和 4. 是分层的,我会感到惊讶:3 可能 得分权重 比 4 重得多。在那种情况下 HardMediumSoftScore
就足够了。
我正在尝试通过构建播放列表生成器来学习 OptaPlanner。我的约束大致如下:
- 总时间必须在 60 分钟左右。
- 选择的所有歌曲必须是唯一的。
- 每个大约 15 分钟的块可能只包含一位艺术家的歌曲。
- 四个 15 分钟的片段必须是不同的艺术家。
因此,按等级划分,我的意思是您可以选择艺术家,然后尝试填充区块。
我当前的实现将这些表示为对歌曲选择的限制。它能够解决问题,但我觉得它花了很多时间试图对齐艺术家约束。
通读文档,似乎有一些功能可能会有所帮助:
- 分区搜索
- 链式变量
- 自定义移动选择器(例如更改所有歌曲以具有一致的艺术家)
- 约束的不同权重
处理这种关系的推荐方法是什么?
听起来这些只是具有 4 个不同分数级别 的 4 个约束(请参阅有关分数计算的文档章节)。所以在那种情况下,你需要一个 BendableScore
.
但在实践中,如果 3. 和 4. 是分层的,我会感到惊讶:3 可能 得分权重 比 4 重得多。在那种情况下 HardMediumSoftScore
就足够了。