话不多说,设图G=(V,E),我们要求的是从顶点
r
r
r到
s
s
s的最短路径。
直接上模型:
其中:
c
e
c_e
ce是
e
e
e这条边的权值。
x
e
x_e
xe是代表这条边走不走。然后
x
w
v
x_{wv}
xwv就是指
e
=
(
w
,
v
)
e=(w,v)
e=(w,v)这条边走不走。
对于
b
v
b_v
bv,举个例子如下:
以那个
b
v
=
−
1
,
v
=
r
b_v=-1,v=r
bv=−1,v=r为例,代入上面的约束条件,令
v
=
r
v=r
v=r,即源点,顶点1。则那个约束条件变为:
0 − x 12 − x 13 = − 1 0-x_{12}-x_{13}=-1 0−x12−x13=−1
为什么前面那个求和是0?因为没有到源点的边,即没有入边。出边有两条,相减为-1,我想你已经想到了,这代表既然是求从源点1到4的最短路劲,那么这条路径要么经过2,要么经过3,即其中肯定要走而且只能是其中1个。
其他一次类推,比如终点表示必然要有而且仅有一条入边。中间节点表示从一条入边进,必然从一条出边出,且不能多,相抵了为0。
有人会问,这他喵不应该是整数规划嘛?怎么那个限制条件是
x
v
w
≥
0
x_{vw}\ge 0
xvw≥0。的确整数规划0-1规划可以,但是在本文情况中,不必是,也可以得到最终的结果是取0或1,比较神奇。比如下面这样不会是最优解。
虽然这个解
x
v
w
x_{vw}
xvw满足约束条件,但肯定不是最优解。别忘了我们还有一个最小化目标函数呢,你把所有边都走了遍,其中某些乘以了一个很大的权值,肯定不如最短路那个更小的权值。