用lingo10求解03年数模国赛B题

露天矿里有若干个爆破生成的石料堆,每堆称为一个铲位,每个铲位已预先
根据铁含量将石料分成矿石和岩石。一般来说,平均铁含量不低于 25%的为矿石,否则为岩石。每个铲位的矿石、岩石数量,以及矿石的平均铁含量(称为品位)都是已知的。每个铲位至多能安置一台电铲,电铲的平均装车时间为 5 分钟。

卸货地点(以下简称卸点)有卸矿石的矿石漏、2 个铁路倒装场(以下简称
倒装场)和卸岩石的岩石漏、岩场等,每个卸点都有各自的产量要求。从保护国家资源的角度及矿山的经济效益考虑,应该尽量把矿石按矿石卸点需要的铁含量(假设要求都为 29.5% 1%,称为品位限制)搭配起来送到卸点,搭配的量在一个班次(8 小时)内满足品位限制即可。从长远看,卸点可以移动,但一个班次内不变。卡车的平均卸车时间为 3 分钟。

所用卡车载重量为 154 吨,平均时速 28km/h 。卡车的耗油量很大,每个班次每台车消耗近 1 吨柴油。发动机点火时需要消耗相当多的电瓶能量,故一个班次中只在开始工作时点火一次。卡车在等待时所耗费的能量也是相当可观的,原则上在安排时不应发生卡车等待的情况。电铲和卸点都不能同时为两辆及两辆以上卡车服务。卡车每次都是满载运输。
每个铲位到每个卸点的道路都是专用的宽 60 m的双向车道,不会出现堵车现象,每段道路的里程都是已知的。

一个班次的生产计划应该包含以下内容:出动几台电铲,分别在哪些铲位上;出动几辆卡车,分别在哪些路线上各运输多少次。一个合格的计划要在卡车不等待条件下满足产量和质量(品位)要求,而一个好的计划还应该考虑下面两条原则之一:

1.总运量(吨公里)最小,同时出动最少的卡车,从而运输成本最小;
2.利用现有车辆运输,获得最大的产量(岩石产量优先;在产量相同的情况下,取总运量最小的解)。

请你就两条原则分别建立数学模型,并给出一个班次生产计划的快速算法。针对下面的实例,给出具体的生产计划、相应的总运量及岩石和矿石产量。

某露天矿有铲位 10 个,卸点 5 个,现有铲车 7 台,卡车 20 辆。各卸点一个班次的产量要求:矿石漏 1.2 万吨、倒装场Ⅰ1.3 万吨、倒装场Ⅱ1.3 万吨、岩石漏 1.9 万吨、岩场 1.3 万吨。

铲位和卸点位置的二维示意图如下,各铲位和各卸点之间的距离(公里)如下表:
在这里插入图片描述

问题分析
本题看起来象运输问题,但与典型的运输问题明显有以下不同:

  1. 这是运输矿石与岩石两种物资的问题;
  2. 属于产量大于销量的不平衡运输问题;
  3. 为了完成品位约束,矿石要搭配运输;
  4. 产地、销地均有单位时间的流量限制;
  5. 运输车辆只有一种,每次满载运输,154吨/车次;
  6. 铲位数多于铲车数意味着要最优的选择不多于7个产地作为最后
    结果中的产地;
  7. 最后求出各条路线上的派出车辆数及安排。

近似处理:
因而我们可以先求出产位、卸点每条线路上的运输量。然后求出各条路
线上的派出车辆数及安排。

模型假设
1.卡车在一个班次中不应发生等待或熄火后再启动的情况;
2.在铲位或卸点处由两条路线以上造成的冲突问题面前,我们认为只要
平均时间能完成任务,就认为不冲突。我们不排时地进行讨论;
3.空载与重载的速度都是28km/h,耗油相差很大;
4.卡车可提前退出系统;
5.铲车一个班次内不移动铲位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
lingo代码如下:
model:
sets:
s1/1…10/:ck,cy,p,f;
s2/1…5/:q;
s(s1,s2):x,c,A,B,T;
endsets
data:
c=5.26 5.19 4.21 4.00 2.95 2.74 2.46 1.90 0.64 1.27
1.90 0.99 1.90 1.13 1.27 2.25 1.48 2.04 3.09 3.51
5.89 5.61 5.61 4.56 3.51 3.65 2.46 2.46 1.06 0.57
0.64 1.76 1.27 1.83 2.74 2.60 4.21 3.72 5.05 6.10
4.42 3.86 3.72 3.16 2.25 2.81 0.78 1.62 1.27 0.50;
ck=0.95 1.05 1.00 1.05 1.10 1.25 1.05 1.30 1.35 1.25;
cy=1.25 1.10 1.35 1.05 1.15 1.35 1.05 1.15 1.35 1.25;
p=30 28 29 32 31 33 32 31 33 31;
q=12000 13000 13000 19000 13000;
enddata
calc:
@for(s(i,j):T(i,j)=(260c(i,j)/28+3+5));
@for(s(i,j):A(i,j)=@floor(T(i,j)/5));
@for(s(i,j):B(i,j)=@floor((860-(A(i,j)-1)5)/T(i,j)));
endcalc
min=@sum(s(i,j):x(i,j)c(i,j));
@for(s(i,j):x(i,j)<(A(i,j)B(i,j)));
@for(s1(i):@sum(s2(j):x(i,j))<(f(i)812));
@for(s2(j):@sum(s1(i):x(i,j))<160);
@for(s1(i):x(i,1)+x(i,2)+x(i,5)<(ck(i)10000/154));
@for(s1(i):x(i,3)+x(i,4)<(cy(i)10000/154));
@for(s2(j):@sum(s1(i):x(i,j))>(q(j)/154));
@sum(s1(i):x(i,1)
(p(i)-30.5))<0;
@sum(s1(i):x(i,2)
(p(i)-30.5))<0;
@sum(s1(i):x(i,5)
(p(i)-30.5))<0;
@sum(s1(i):x(i,1)
(p(i)-28.5))>0;
@sum(s1(i):x(i,2)
(p(i)-28.5))>0;
@sum(s1(i):x(i,5)
(p(i)-28.5))>0;
@sum(s1(i):f(i))<7;
@for(s(i,j):@gin(x(i,j)));
@for(s1(i):@bin(f(i)));
end
运行结果如图
在这里插入图片描述

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值