一、题目描述
实验二 运输问题求解
实验属性: 设计型
实验目的
1.理解运输问题的基本概念;
2.掌握运筹学软件的使用方法;
3. 掌握运输问题的求解原理和方法。
实验内容
书本P136,例4-6使用LINGO软件计算6个产地8个销地的最小费用运输问题,产销单位如表所示
产地 | 销地 | 产量 | |||||||
B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | ||
A1 | 6 | 2 | 6 | 7 | 4 | 2 | 5 | 9 | 60 |
A2 | 4 | 9 | 5 | 3 | 8 | 5 | 8 | 2 | 55 |
A3 | 5 | 2 | 1 | 9 | 7 | 4 | 3 | 3 | 51 |
A4 | 7 | 6 | 7 | 3 | 9 | 2 | 7 | 1 | 43 |
A5 | 2 | 3 | 9 | 5 | 7 | 2 | 6 | 5 | 41 |
A6 | 5 | 5 | 2 | 2 | 8 | 1 | 4 | 3 | 52 |
销量 | 35 | 37 | 22 | 32 | 41 | 32 | 43 | 38 |
1.记录实验步骤与结果
2.对结果作适当分析;
3.完成实验报告。
二、实验内容
操作过程截图与代码逐行分析其含义
MODEL:
! 6个仓库8个客户点的运输问题;
SETS:
warehouses /wh1..wh6/: capacity;
vendors /v1..v8/: demand;
links(warehouses,vendors): cost, volume;
ENDSETS
(1)首先针对该运输问题进行分析,将应用问题转换为数学问题:6个仓库(产地)和8个客户点(销地)的产大于销的运输问题,并通过lingo代码实现问题的描述
! 目标函数;
MIN = @SUM(links: cost*volume);
(2)其次进行目标函数的确定,声明目标函数是所有运费之和,并寻求最小值。
! 需求约束;
@FOR(vendors(J):
@SUM(warehouses(I): volume(I,J)) = demand(J);
);
(3)然后进行需求约束的说明,声明总销量等于需求量。产量大于销量。
! 供应约束;
@FOR(warehouses(I):
@SUM(vendors(J): volume(I,J)) <= capacity(I);
);
(4)然后进行需求约束的说明,声明供应量大于销售量。
! Data部分(注意不是'date',是'data');
DATA:
capacity = 60 55 51 43 41 52;
demand = 35 37 22 32 41 32 43 38;
cost =
6 2 6 7 4 2 9 5
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
ENDDATA
END
(5)最后进行数据说明,阐述每个产地到每个销地的单位运价。单击solve按钮即可使lingo软件进行迭代,从而求出最优解。
附有完整lingo代码:
MODEL:
! 6个仓库8个客户点的运输问题;
SETS:
warehouses /wh1..wh6/: capacity;
vendors /v1..v8/: demand;
links(warehouses,vendors): cost, volume;
ENDSETS
! 目标函数;
MIN = @SUM(links: cost*volume);
! 需求约束;
@FOR(vendors(J):
@SUM(warehouses(I): volume(I,J)) = demand(J);
);
! 供应约束;
@FOR(warehouses(I):
@SUM(vendors(J): volume(I,J)) <= capacity(I);
);
! Data部分(数据说明);
DATA:
capacity = 60 55 51 43 41 52;
demand = 35 37 22 32 41 32 43 38;
cost =
6 2 6 7 4 2 9 5
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
ENDDATA
END