具有附加约束的线性分配

Posted

技术标签:

【中文标题】具有附加约束的线性分配【英文标题】:Linear assignment with additional constraints 【发布时间】:2017-10-23 14:52:23 【问题描述】:

在标准的线性分配问题中,我可以使用匈牙利算法来实现 O(n^3)。如果添加额外的约束怎么办?示例:

具有 4 个代理的“常规”LAP 具有约束矩阵

结果向量 b = [1 1 1 1]。

匈牙利算法将按预期解决此类问题。但是如果再增加一个约束,使得约束矩阵是

结果向量 b = [1 1 1 1 0] ??

也就是说,除了在标准线性和约束下最小化成本函数外,我还必须考虑一个约束,例如

这个和产生上面附加矩阵中的最后一行。

显然,生成的约束矩阵不再是完全单模的。当然,标准的 MILP 会解决这个问题,但它是 NP 难的。我的问题是:是否有类似匈牙利语的算法可以在多项式时间内解决此 LAP?

【问题讨论】:

这个约束矩阵从何而来?对我来说,它看起来不像是 4x4 分配问题的 LP。 我已经编辑了我的问题,希望现在更清楚。 不,不是。对于大小为 n 的分配问题,标准形式的 LP 具有 n*2 约束和 n^2 个变量。你的没有(如果我们将此约束矩阵解释为 LP 公式)。所以很难使用你的公式。我的直觉是:不……没有多元解决方案。 【参考方案1】:

一般来说,带有边约束的网络流问题是 NP-Hard。例如,具有非负边成本的最短路径问题是多项式可解的。例如,您可以使用 Dijkstra 的最短路径算法。 (分配问题是网络流问题的一个特例。)

但是,如果您添加单个约束,规定使用的边数应小于某个常数,则随后的约束最短路径问题是 NP-Hard。

因此,您的问题不太可能是多项式算法。

【讨论】:

谢谢,不幸的消息,但非常有帮助!

以上是关于具有附加约束的线性分配的主要内容,如果未能解决你的问题,请参考以下文章

基于附加列强制执行外键约束

枚举映射附加约束的条件类型

Python最小化函数:将附加参数传递给约束字典

Hibernate left join fetch 对子集执行附加查询

TypeScript 分布式条件类型 - 附加类型参数约束

SQL中Unique约束有啥用啊?