问题

软件 >> Lingo
Questions in category: Lingo (Lingo).

运输模型例子(Wireless widgets example)

Posted by haifeng on 2018-03-27 10:03:14 last update 2018-03-27 12:00:35 | Answers (0) | 收藏


假设 Wireless Widget 公司(简称 WW 公司)有六个仓库给八个供应商供货.

  • 每个仓库有库存量限制, 也就是说存放的 widgets 不能超过一定的量.
  • 每个供应商(vendor)有基本的widgets需求量, WW公司必须保证提供的.

WW 公司希望能确定每个仓库到每个供应商的供货数量, 以最小化总的运输费用.

 

以下数据是仓库的存储能力以及供应商的最低保证供货量, 以及每个widget的运输费用表:

Widget Capacity Data
Warehouse(仓库) Widgets On Hand
1 60
2 55
3 51
4 43
5 41
6 52


 

Vendor Widget Demand
Vendor Widget Demand
1 35
2 37
3 22
4 32
5 41
6 32
7 43
8 38

 

 

Shipping Cost per Widget ($)
  V1 V2 V3 V4 V5 V6 V7 V8
WH1 6 2 6 7 4 2 5 9
WH2 4 9 5 3 8 5 8 2
WH3 5 2 1 9 7 4 3 3
WH4 7 6 7 3 9 2 7 1
WH5 2 3 9 5 7 2 6 5
WH6 5 5 2 2 8 1 4 3

 

 


[Solution]

由于每个仓库可以将widgets运输给每个供应商, 因此总共有 $6\times 8=48$ 种可能的运输路径. 我们需要 48 个变量来分别表示这些运输路径上运输widgets的量.

 

建立模型的第一步是构建目标函数. 如上面提到的, WW公司希望能最小化运输成本. 我们记 VOLUME_I_J 为从仓库 I 到供应商 J 的运输widgets的数量. 于是, 如果我们要精确写出目标函数的话, 则我们需写成:


MIN =  6 * VOLUME_1_1 + 2 * VOLUME_1_2 +

6 * VOLUME_1_3 + 7 * VOLUME_1_4 +

4 * VOLUME_1_5 +

.

.

.

8 * VOLUME_6_5 + VOLUME_6_6 + 4 * VOLUME_6_7 +

3 * VOLUME_6_8;


 

我们看到, 输入如此长的公式, 显然是繁琐且容易出错的.

如果你熟悉数学符号, 可以将上面的冗长公式表示为紧凑的方式

\[
\mathrm{Minimize}\ \sum_{i,j}\mathrm{COST}_{i,j}\cdot\mathrm{VOLUME}_{i,j}
\]

类似的, LINGO 的模型语言允许你将目标函数表示为如下更为简短, 容易键入, 容易理解的形式:

MIN = @SUM( LINKS(I,J): COST(I,J) * VOLUME(I,J));

换句话说,

 

 


 

References:

LINGO 14 Online Users Manual.  [A Sample Transportation Model]