@for(customer(j):
@sum(warehouse(i):
x(i,j))=b(j));
end
5.求下图中v1到v11的最短路
9W丄vlO
vll
Lingo程序:
Model:
sets:
cities/1..11/;
roads(cities,cities):
p,w,x;endsets
data:
!
半连通图和权图
p=01110000000
00101000000
01011110000
00100010000
01100101100
00101010100
00110100110
00001000101
00001111011
00000010101
00000001110;
w=02810000000
20601000000
86075120000
10700090000
01500302900
00103040600
00290400310
00002000709
00009637012
00000010104
00000000924;
enddatan=@size(cities);min=@sum(roads:
w*x);
@for(cities(i)|I#ne#1#and#I#ne#n:
@sum(cities(j):
p(i,j)*x(i,j))
=@sum(cities(j):
p(j,i)*x(j,i)));
@sum(cities(j):
p(1,j)*x(1,j))=1;
end
6.露天矿里有若干个爆破生成的石料堆,每堆称为一个铲位,每个铲位已预先根据铁含量将石料分成矿石和岩石。
一般来说,平均铁含量不低于25%的为矿石,否则为岩石。
每个铲位的矿石、岩石数量,以及矿石的平均铁含量(称为品位)都是已知的。
每个铲位至多能安置一台电铲,电铲的平均装车时间为5分钟。
'卸货地点(以下简称卸点)有卸矿石的矿石漏、2个铁路倒装场(以下简称倒装场)和卸岩石的岩石漏、岩场等,每个卸点都有各自的产量要求。
从保护国家资源的角度及矿山的经济效益考虑,应该尽量把矿石按矿石卸点需要的铁含量(假设要求都为29.5%1%,称为品位限制)搭配起来送到卸点,搭配的量在一个班次(8小时)内满足品位限制即可。
从长远看,卸点可以移动,但一个班次内不变。
卡车的平均卸车时间为3分钟。
'所用卡车载重量为154吨,平均时速28。
卡车的耗油量很大,每个班次每台车消耗近1吨柴油。
发动机点火时需要消耗相当多的电瓶能量,故一个班次中只在开始工作时点火一次。
卡车在等待时所耗费的能量也是相当可观的,原则上在安排时不应发生卡车等待的情况。
电铲和卸点都不能同时为两辆及两辆以上卡车服务。
卡车每次都是满载运输。
'每个铲位到每个卸点的道路都是专用的宽60的双向车道,不会出
现堵车现象,每段道路的里程都是已知的。
'一个班次的生产计划应该包含以下内容:
出动几台电铲,分别在哪些铲位上;出动几辆卡车,分别在哪些路线上各运输多少次(因为随机因素影响,装卸时间与运输时间都不精确,所以排时计划无效,只求出各条路线上的卡车数及安排即可)。
一个合格的计划要在卡车不等待条件下满足产量和质量(品位)要求,而一个好的计划还应该考虑下面两条原则之一:
1总运量(吨公里)最小,同时出动最少的卡车,从而运输成本最小;
2.利用现有车辆运输,获得最大的产量(岩石产量优先;在产量相同的情况下,取总运量最小的解)。
某露天矿有铲位10个,卸点5个,现有铲车7台,卡车20辆。
各卸点一个班次的产量要求:
矿石漏1.2万吨、倒装场I1.3万吨、倒装场H1.3万吨、岩石漏1.9万吨、岩场1.3万吨。
各铲位和各卸点之间的距离(公里)如下表:
谆也1
护厘*
萨空4
萨它厅
铲亡£
第亡9
5.26
5-19
4.21
4.00
2.95
2.74
2,4E
1.90
0.€4
1.27
说基魅|
1.90
1,13
1.27
2.25
3.09
3.51
s_as
S-61
5.61
4.5€
3.51
3.65
2.
2.46
1.0€
0.57
斎石秦
1•釘
2.74
2.60
5.05
6.10
■忠基垛1[
442
3-S6
3.72
3.1€
2.25
Z.8L
0.78
1.S2
1.27
0.50
各铲位矿石、岩石数量和矿石的平均铁含量如下表:
Fftl
M2
ms
护7
WiB
PftlO
0.95
1.05
1.00
1•吒
1・10
1.25
1.05
1.30
1,35
1.25
1.25
1.10
1.35
1・眄
1・15
1.35
L15
1.35
1.25
30%
2册
29%
3脾
31%
33%
㈣
31%
33i
31%
Lingo程序:
Model:
!
集合区;
sets:
!
cai表示米矿点集合,xie表示卸点集合
cai/1..10/:
crate,cnum,cy,ck,flag;
xie/1..5/:
xsubject,xnum;
link(xie,cai):
distance,lsubject,number,che,b;
endsets
!
数据区;
data:
crate=30282932313332313331;
xsubject=1.21.31.31.91.3;
distance=5.265.194.214.002.952.742.461.90
0.641.27
1.900.991.901.131.272.251.48
2.043.093.51
5.895.615.614.563.513.652.46
2.461.060.57
0.641.761.271.832.742.604.21
3.725.056.10
4.423.863.723.162.252.810.78
1.621.270.50;
cy=1.251.101.351.051.151.351.051.151.351.25;
ck=0.951.051.001.051.101.251.051.301.351.25;
enddata
!
目标区;
[OBJ]min=@sum(cai(i):
@sum(xie(j):
number(j,i)*154*distance(j,i)));
!
计算区;
!
卡车每一条路线上最多可以运行的次数;
@for(link(i,j):
b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60
*2+3+5)/5)-1)*5)/(distance(i,j)/28*60*2+3+5)));
!
每条路线上的最大总车次的计算;
@for(link(i,j):
lsubject(i,j)=(@floor((distance(i,j)/28*60*2+3+5
)/5))*b(i,j));
!
计算各个铲位的总产量;
@for(cai(j):
cnum(j)=@sum(xie(i):
number(i,j)));
!
计算各个卸点的总产量;
@for(xie(i):
xnum(i)=@sum(cai(j):
number(i,j)));
!
约束区;
!
道路能力约束;
@for(link(i,j):
number(i,j)!
电铲能力约束;
@for(cai(j):
cnum(j)!
电铲数量约束;
@sum(cai(j):
flag(j))<7;
卸点能力约束
@for(xie(i):
xnum(i)<8*20);
铲位产量约束
@for(cai(i):
number(1,i)+number(2,i)+number(5,i)154);
@for(cai(i):
number(3,i)+number(4,i)@for(xie(i):
xnum(i)>xsubject(i)*10000/154);!
铁含量约束;
@sum(cai(j):
number(1,j)*(crate(j)-30.5))<0;
@sum(cai(j):
number(2,j)*(crate(j)-30.5))<0;
@sum(cai(j):
number(5,j)*(crate(j)-30.5))<0;
@sum(cai(j):
number(1,j)*(crate(j)-28.5))>0;@sum(cai(j):
number(2,j)*(crate(j)-28.5))>0;@sum(cai(j):
number(5,j)*(crate(j)-28.5))>0;!
关于车辆的具体分配;@for(link(i,j):
che(i,j)=number(i,j)/b(i,j));
!
各个路线所需卡车数简单加和hehe=@sum(link(i,j):
che(i,j));!
整数约束;
@for(link(i,j):
@gin(number(i,j)));@for(cai(j):
@bin(flag(j)));!
车辆能力约束;
hehe<20;
ccnum=@sum(cai(j):
cnum(j));
end