繁体   English   中英

整数线性规划的特殊情况

[英]Integer Linear Programming special case

我正在尝试解决整数线性规划问题的一种特殊情况,但是我似乎在该算法上感到困惑。

具体来说,假设您有一些二进制变量x_{1}, ... x_{n}以及以下形式的不等式:

i.e. x_{2} + x_{3} + x_{10} <= 2

请注意,不等式的系数都为1,并且右侧始终是左侧的变量数减去1。

另外,请记住,变量x_{1}, ..., x_{n}可以取0或1的值。

这是一项家庭作业(编写程序),但是我找不到启动算法。

我尝试使用DP和Network Flow,但没有任何反应。

目标函数(在编辑中丢失)是使总和最大化:

x_{1} + ... + x_{n}

该问题等效于“设置封面”: http : //en.wikipedia.org/wiki/Set_cover_problem#Integer_linear_program_formulation 一种容易x_{i}方法是将x_{i}替换为1-y{i} ,这给出了等效的0-1线性规划问题,即

maximize (1-y_{1}) + (1-y_{2}) + ... + (1-y_{n}) = n - (y_{1} + ... + y_{n}),
which is equivalent to minimizing y_{1} + ... + y_{n},

subject to the following family of inequalities indexed by j: 
  (1-y_{i_{1j}}) + (1-y_{i_{2j}}) + ... + (1-y_{i_{kj}) <= k-1,
which are equivalent to:
  y_{i_{1j}} + y_{i_{2j}} + ... + y_{i_kj} >= 1

问题的等效公式是Set Cover的0-1整数线性规划公式。

在这种情况下,贪心算法将提供合理的近似值。 确定哪些x_{i}最经常出现在约束中,并将其设置为0。现在满足所有出现x_{i0}的约束,因此可以将它们从考虑中删除,并将变量x_{i0}可以从目标中除去。 重复变量x_{i1} ,该变量最常出现在其余约束等中。

或者,实际的线性规划也将提供一个近似值。

由于Set Cover是NP硬质的,因此您能够找到的最佳精确解决方案将是指数级的。 一个简单的算法将尝试所有可能性(遍历从x_{n}x_{n-1}...x_{1}x_{0} = 00...00x_{n}x_{n-1}...x_{1}x_{0} = 11...11 = 2^(n+1)-1所有二进制数) x_{n}x_{n-1}...x_{1}x_{0} = 11...11 = 2^(n+1)-1如果您搜索的话,肯定有更快的算法(但仍然是指数时间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM