2014-02-14 31 views
2

我试图使用优化(最小化运输成本),以解决典型的运输问题,在GLPK或R.线性具procedence限制编程运输优化

一个简单的情况下:4个生产者位于2个省(甲乙)正在向位于其他地方的两个出口商交付产品。我有一个每个路线生产者 - 出口商的成本矩阵(见下文)。解决方案将是微不足道的,这是一个典型的交通问题。

实施例:

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吨Tn,并从省B购买600吨。出口商(6)没有限制,他可以从任何省份采购货物。我找不到表达这些限制的方法。

你能帮我吗?

回答

2

你可以从边缘考虑你的问题。如果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格式中。

+0

如果限制数量太大而无法手动写入,该怎么办?我只举了一个例子,但真正的案例包括数千个生产者,数百个出口商和数百个限制。我可以使用限制矩阵以简单的方式调用所有这些限制吗? – user12975

+0

当然! lpsolve的限制是计算时间和计算机的内存。请参阅lpsolveAPI程序包以编程方式设置画面。 –