目录
本文总结至运小筹公众号某学习群,版权归原作者,如有侵权请联系删除!
比如考虑一个有3辆车的VRP问题,3辆车都是同质的,具有相同的容量。
假设一个解是
route1 = [0, 1, 3, 4, 5, 0]
route2 = [0, 2, 6, 7, 0]
route3 = [0, 8, 9, 0]
那么,这个解实际上和
route1 = [0, 2, 6, 7, 0]
route2 = [0, 8, 9, 0]
route3 = [0, 1, 3, 4, 5, 0]
以及
route1 =[0, 8, 9, 0]
route2 = [0, 2, 6, 7, 0]
route3 = [0, 1, 3, 4, 5, 0]
这三个解实质上是一模一样的。但是对于求解器来讲,他并不知道这是一样的,他会认为是3个不同的解。但是这样的解有很多,就会对求解模型带来很多冗余的计算。消除对称性就可以在一定程度上加速求解。
那么如何区分这三辆车呢?在VRP语境下,为了破除对称性,我们可以强制约束,第一辆车的载重 >= 第2辆车的载重 >= 第3辆车的载重。即:加入约束
例子来源:SYMMETRY IN INTEGER PROGRAMMING
数字案例:
案例分析
打眼一看可能发现不了什么猫腻,但是,我们对这个系数矩阵进行简单分块
可以发现:
所以,在这个例子中,