【发布时间】:2014-02-24 17:31:32
【问题描述】:
什么
我正在尝试为锦标赛生成一组最佳括号(由约束定义的最佳)。
问题
我不知道如何解决这个问题。 This 论文水平相当高,但讨论了使用约束规划解决集合分区问题的可能性。它还指出,大多数集合分区问题都是通过整数规划解决的。我主要是在寻找一个可以效仿的例子。问题类似于SO question。我见过的大多数约束示例都定义了特定的分区总数。是否可以建模一个系统,其中分区将由约束和参与者集动态确定?我会链接示例,但由于我的声誉,我仅限于 2 个。
一个更具体的例子
已知值
- 参加人数为 N。
- 每个参与者都有一个与之相关的体重 W。
约束
- 一个括号(组)由 2、3、4、6、7 或 8 名参与者组成。
- 每个参与者只在一个括号中。
- 括号中权重最低的参与者与权重最高的参与者之间的差值不得超过 15%。
- 与所有其他尺寸的支架相比,更倾向于创建尺寸为 8 和 4 的支架。
例如,假设有 8 个参与者。
{ {1, W=100}, {2, W=103}, {3, W=105}, {4, W=106}, {5, W=110}, {6, W=114 }, {7, W=120}, {8, W=125} }
一种可能的解决方案是: {1, 2, 3}, {4, 5}, {6, 7, 8}
更优化的解决方案是: {1, 2, 3, 4}, {5, 6, 7, 8},因为与之前的解决方案相比,这有利于 4、8 个大小的集合。
是否可以将一个集合划分为动态数量的子集合?
再次感谢您的宝贵时间!
【问题讨论】:
-
它至少可以帮助我举一些你所追求的例子。在那之前,这里有一些 CP 模型的链接(用不同的系统编写)解决了一个简单的集合分区问题:hakank.org/common_cp_models/#setpartition。
-
嗨@hakank,我已经编辑了我的问题,希望为您提供我正在寻找的更好的例子。我查看了您的示例,它们似乎都分为预定义数量的子集。如果我需要详细说明我的示例,请告诉我。
标签: java dynamic-programming constraint-programming integer-programming