我正在尝试使用GLPK或R中的优化(最小化运输成本)来解决典型的运输问题。
一个简单的案例:位于2个省(A和B)的4个生产商正在向位于其他地方的两个出口商交付产品。我为每个路线生产商-出口商提供了一个成本矩阵(见下文)。解决方案将是微不足道的,这是运输问题的典型例子。
例:
production (id, province, tons)
1 A 300
2 A 800
3 B 800
4 B 1200
export (id, sourcing_province, tons)
5 A 400
5 B 600
6 2000
routes (id_orig, id_dest, cost)
1 5 5.1
1 6 3.2
2 5 6.7
2 6 7.2
3 5 2.8
3 6 4.1
4 5 6.9
4 6 5.3
然而,有额外的限制使问题更加复杂:我知道出口商(5)实际上是从每个省采购一定数量的。特别是在上面的例子中,出口商(5)必须从A省采购400吨,从B省采购600吨,出口商(6)没有限制,他可以从任何省份采购货物。我找不到表达这些限制的方法。
你能帮帮我吗?
你可以从边缘的角度来考虑你的问题。如果 1、2、3、4 是生产者,5,6 是出口商,假设 e15 是从生产者 1 到出口商 5,e25 是从生产者 2 到出口商 5 的流程,依此类推。
使用这种表示法,问题变为:
/* Objective function */
min: 5.1 e15 + 3.2 e16 + 6.7 e25 + 7.2 e26 + 2.8 e35 + 4.1 e36 + 6.9 e45 + 5.3 e46;
/* production limits */
e15 + e16 <= 300;
e25 + e26 <= 800;
e35 + e36 <= 800;
e45 + e46 <= 1200;
/* demand */
e15 + e25 + e35 + e45 >= 1000;
e16 + e26 + e36 + e46 >= 2000;
/* exporter 5 restrictions */
e15 + e25 >= 400;
e35 + e45 >= 600;
最后两个不等式是固定数量约束。
您可以使用 LpSolve 来解决此问题。还有一个 R 包lpsolveAPI
用于此。上述问题表述已经采用 LP 格式。