例7.5露天矿生产的车辆安排(CMCM2003B)钢铁工业是国家工业的基础之一,铁矿是钢铁工业的主要原料基地。许多现代化铁矿是露天开采的,它的生产主要是由电动铲车(以下简称电铲)装车、电动轮自卸卡车(以下简称卡车)运输来完成。提高这些大型设备的利用率是增加露天矿经济效益的首要任务。露天矿里有若干个爆破生成的石料堆,每堆称为一个铲位,每个铲位已预先根据铁含量将石料分成矿石和岩石。一般来说,平均铁含量不低于25%的为矿石,否则为岩石。每个铲位的矿石、岩石数量,以及矿石的平均铁含量(称为品位)都是已知的。每个铲位至多能安置一台电铲,电铲的平均装车时间为5分钟。卸货地点(以下简称卸点)有卸矿石的矿石漏、2个铁路倒装场(以下简称倒装场)和卸岩石的岩石漏、岩场等,每个卸点都有各自的产量要求。从保护国家资源的角度及矿山的经济效益考虑,应该尽量把矿石按矿石卸点需要的铁含量(假设要求都为29.5%1%,称为品位限制)搭配起来送到卸点,搭配的量在一个班次(8小时)内满足品位限制即可。从长远看,卸点可以移动,但一个班次内不变。卡车的平均卸车时间为3分钟。所用卡车载重量为154吨,平均时速28hkm。卡车的耗油量很大,每个班次每台车消耗近1吨柴油。发动机点火时需要消耗相当多的电瓶能量,故一个班次中只在开始工作时点火一次。卡车在等待时所耗费的能量也是相当可观的,原则上在安排时不应发生卡车等待的情况。电铲和卸点都不能同时为两辆及两辆以上卡车服务。卡车每次都是满载运输。每个铲位到每个卸点的道路都是专用的宽60m的双向车道,不会出现堵车现象,每段道路的里程都是已知的。一个班次的生产计划应该包含以下内容:出动几台电铲,分别在哪些铲位上;出动几辆卡车,分别在哪些路线上各运输多少次(因为随机因素影响,装卸时间与运输时间都不精确,所以排时计划无效,只求出各条路线上的卡车数及安排即可)。一个合格的计划要在卡车不等待条件下满足产量和质量(品位)要求,而一个好的计划还应该考虑下面两条原则之一:1.总运量(吨公里)最小,同时出动最少的卡车,从而运输成本最小;2.利用现有车辆运输,获得最大的产量(岩石产量优先;在产量相同的情况下,取总运量最小的解)。请你就两条原则分别建立数学模型,并给出一个班次生产计划的快速算法。针对下面的实例,给出具体的生产计划、相应的总运量及岩石和矿石产量。某露天矿有铲位10个,卸点5个,现有铲车7台,卡车20辆。各卸点一个班次的产量要求:矿石漏1.2万吨、倒装场Ⅰ1.3万吨、倒装场Ⅱ1.3万吨、岩石漏1.9万吨、岩场1.3万吨。铲位和卸点位置二维示意图如下,各铲位和各卸点之间的距离(公里)如下表:铲位1铲位2铲位3铲位4铲位5铲位6铲位7铲位8铲位9铲位10矿石漏5.265.194.214.002.952.742.461.900.641.27倒装场Ⅰ1.900.991.901.131.272.251.482.043.093.51岩场5.895.615.614.563.513.652.462.461.060.57岩石漏0.641.761.271.832.742.604.213.725.056.10倒装场Ⅱ4.423.863.723.162.252.810.781.621.270.50各铲位矿石、岩石数量(万吨)和矿石的平均铁含量如下表:铲位1铲位2铲位3铲位4铲位5铲位6铲位7铲位8铲位9铲位10矿石量0.951.051.001.051.101.251.051.301.351.25岩石量1.251.101.351.051.151.351.051.151.351.25铁含量30%28%29%32%31%33%32%31%33%31%model:titleCUMCM-2003B-01;sets:cai/1..10/:crate,cnum,cy,ck,flag;xie/1..5/:xsubject,xnum;link(xie,cai):distance,lsubject,number,che,b;endsetsdata:crate=30282932313332313331;xsubject=1.21.31.31.91.3;distance=5.265.194.214.002.952.742.461.900.641.271.900.991.901.131.272.251.482.043.093.515.895.615.614.563.513.652.462.461.060.570.641.761.271.832.742.604.213.725.056.104.423.863.723.162.252.810.781.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!目标函数;min=@sum(cai(i):@sum(xie(j):number(j,i)*154*distance(j,i)));!max=@sum(link(i,j):number(i,j));!max=xnum(3)+xnum(4)+xnum(1)+xnum(2)+xnum(5);!min=@sum(cai(i):!@sum(xie(j):!number(j,i)*154*distance(j,i)));!xnum(1)+xnum(2)+xnum(5)=340;!xnum(1)+xnum(2)+xnum(5)=341;!xnum(3)=160;!xnum(4)=160;!卡车每一条路线上最多可以运行的次数;@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)));!b(i,j)=@floor(8*60/(distance(i,j)/28*60*2+3+5)));!t(i,j)=@floor((distance(i,j)/28*60*2+3+5)/5);!b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60*2+3+5)/5))*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)=lsubject(i,j));!电铲能力约束;@for(cai(j):cnum(j)=flag(j)*8*60/5);!电铲数量约束----addedbyXieJinxing,2003-09-07;@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)=ck(i)*10000/154);@for(cai(i):number(3,i)+number(4,i)=cy(i)*10000/154);!产量任务约束;@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