影响m学生到n组,但有限制?

时间:2015-03-17 12:30:48

标签: algorithm optimization graph constraints

我询问了最低费用最高流量several weeks ago。克拉斯克维奇的回答很棒,解决了我的问题。我implemented it它工作正常(仅限法语,对不起)。另外,该算法可以处理 i i > 1)项目对每个学生的分配。

现在我正在尝试更难的事情。我想在选择上添加限制。如果想要影响每个学生的 i i > 1)项目,我希望能够指定哪些项目是兼容的(彼此)

在某些项目不兼容的情况下,我希望算法返回全局最优,即影响 i 项目给每个学生最大化全球幸福感兼容性约束。

i 链接到原始方法(并检查每个步骤的约束)将无济于事,因为它只会返回局部最优值。

有关正确使用图表的想法吗?

2 个答案:

答案 0 :(得分:1)

不幸的是,它在多项式时间内无法解决(除非P = NP或存在其他约束)。

这是从最大独立集问题(已知为NP完全)的多项式时间减少到这个:

给定图表G和数字k,请执行以下操作:

  1. 为图G中的每个顶点创建一个项目,并假设如果G中相应顶点之间存在边缘,则两个项目不兼容。

  2. 创建一个平等地喜欢每个项目的学生(我们可以假设每个项目给他的快乐等于1)。

  3. 使用解决问题中所述问题的算法找到最大幸福感。我们称之为h

  4. 如果项目全部兼容,则可以选择一组项目,这意味着G的拾取顶点形成一个独立的集合(由于我们构建图形的方式)。

  5. 因此,h等于最大独立集的大小。

  6. 返回h >= k

  7. 在实践中意味着什么?这意味着寻找这个问题的多项式时间解决方案是不合理的。有几件事可以做:

    1. 如果输入很小,您可以使用详尽的搜索。

    2. 如果不是,您可以使用启发式和/或近似来找到相对较好的解决方案(不一定是最佳解决方案)。

答案 1 :(得分:1)

如果你可以忍受库依赖,整数编程将比你自己实现的任何东西更快更容易。您所要做的就是将原始问题表示为整数程序,然后在最后添加您的临时约束。