我正在实施Kernelization Algorithms for the Vertex Cover Problem: Theory and Experiments (PDF)的优化算法。
我有点陷入第2.3章:线性编程的内核化。
这种技术(在ILP公式中)的想法是为输入图X_u \in \left\{ 0,1 \right\}
的每个顶点u
(也表示为v
)分配权重G=\left\( V,E \right\)
满足以下约束:
\Sigma_uX_u
X_u + X_v \geq 1
通过图表中的边缘连接,就会满足\left\{ u,v \right \}
。因此,作为输出,我得到一组X_v
为1的顶点,其余为X_v
为0。
该文件称,放宽的基础是将X_u \in \left \{ 0,1 \right \}
替换为X_u \geq 0
。 (S. Khuller (PDF)指出在这种情况下X_u \in \left \{ 0,0.5,1 \right \}
)。这种放松会导致有3组顶点,权重为1,0.5和0。
我的问题是我不太确定如何进行重量分配。
从我能够理解的情况来看,为了最小化权重之和(最好是每个边缘),首先关注具有最高度数的顶点,并且当它们的权重已经大于零时,添加值到分析边缘的第二端的顶点。
这导致我(正确?)到基本公式中每个顶点实际X_v \in \left \{ 0,1 \right \}
的情况。当我想放松整数约束时,它只会改为X_v \in \left \{ 0,0.5 \right \}
。
我的逻辑中有什么缺陷?
我需要如何处理松弛以获得具有权重1和0以及0.5?
的顶点答案 0 :(得分:1)
正如您所注意到的,约束X_v in {0, 1/2, 1}
不适合作为(分数)线性程序。这里发生的是,如果您设置较弱的约束X_v >= 0
,那么存在一些最优解,其中X_v in {0, 1/2, 1}
适用于所有v
,但通常不是每个最优解决方案有这个属性。您链接的论文的第6部分提出了一种算法,该算法可以找到顶点覆盖LP的最佳解决方案。