(1)简单运输模型包括始发站(supply points),目的站(demand points)以及运输的产品。
(2)已知条件:
- 供给量
- 需求量
栗子:假如现在有3个始发站,4个目的站,如下图:
单位运输成本
始发站/目的站 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | 150 | 250 | 300 | 275 |
2 | 200 | 175 | 350 | 150 |
3 | 250 | 300 | 400 | 260 |
注释:始发站1——>目的站1的运输成本是150,到目的站2是250,其他依次。
(3)目标函数
在建模之前我们要清楚目标函数以及限制条件,为了满足客户需求,如何分配运输数量?使得总运输成本最小化。每一个目的站运输到目的站的数量是一个变量设为X。
(4)限时条件
- 每一个需求站点,收到的货物要满足其需求量,也就是说每个目的站收到的货物必须大于等于原来需求量(比如始发站1运输到目的站1需要大雨等于150,因为目的站1需求是150)
- 每一个供给站点,发出的货物不能超过供给量(发出来的货物不能大于原来要求的量,比如始发站1发出来的货物必须小于等于350)
(5)mode模型:
set origin;#始发站a-c
set des;#目的站defg
param supply{origin};#不同站点不同供给量
param demend(des);#不同目的站不同需求量
param cost{origin,des};#不同始发站发往不同目的站单位成本不一样的
#声明变量(两点间运输量是未知)
var trans{origin,des}>=0;#任意始发站与任意目的站间的运量
#trans[i,j]*cost[i,j];(任意两点间运输量X任意两点间成本)是任意两点间成本
#求所有的运输成本在前面sum{i in origin,j in des}
minimize total_cost:
trans[i,j]*cost[i,j];
#限制条件
#sum{i in origin}trans[i,j]求和表示从不同始发站发出来的量必须大于等于目的站的需求量
subject to demend_limit{j in demand}:
sum{i in origin}trans[i,j]>=demand[j];#要大于ydemand[j]每各点需求量
subject to supply_limit{i in supply}:
sum{j in des}trans[i,j]<=supply[i];#发出的货物不能超过供给量
(6)data模型:
#参数后面可以直接写【集合】:赋以参数(ABC后面写上对应的参数)
param:origin:supply :=
A 350
B 300
C 300;
param:des:demand :=
D 150
E 230
F 160
G 220;
param cost: D E F G :=
A 150 250 300 275
B 200 175 350 150
C 250 300 400 260;
Go 语言学习路线,已被GitHub收录:https://github.com/metashops/GoFamily