《物流配送车辆调度模型》由会员分享,可在线阅读,更多相关《物流配送车辆调度模型(41页珍藏版)》请在金锄头文库上搜索。
1、一般配送费用由车辆费用、工资费用、延迟费用和等待费用组成。车辆费用由燃料费、折旧费和维修费等变动费用组成,中心根据经营情况可核算出每车公里应摊的车辆费用。工资费用根据途中工作时间计算,若工作时间超过 8小时,则超时部分应按加班补助计算。客户通常要求货物在一定时间窗范围内送达,否则中心需支付惩罚费用。若提前到达,支付等待费用;若延迟到达,支付延迟费用。设单一配送中心向 l 个客户送货,第 i 个客户货运量 g 为,卸i货时间为 ,时间窗为 , ,每小时延迟费用 ,中心与客户、客户与客iutieti ir户两两间的最短运距、平均车速和车辆费用分别为(i,j=0,1,2,l;0 表示配送中心);可用
2、 m 类卡车送货,第 p 型卡车ijijijrvd和、有 辆,装载容量为 (p=0,1,2,,m);每小时等待费用为 r,行车补助和pnpv加班补助分别为每小时 s 和 es;途中运行到中午 12:00 和下午 6:00 时安排30 分钟吃饭时间,车辆当天返回配送中心,再设 为第 p 类车的第 q 辆配送gn的需一求点数( =0 表示未使用第 p 类车的第 q 辆车),确定车辆调度方案。pgn4.2.2物流配送车辆调度模型根据上述对问题的描述,可以构造数学模型,定义变量: ),(01jipqq经 过 弧 段表 示 车 辆 经 过 弧 段表 示 车 辆送 货不 给 顾 客表 示 车 辆 送 货给
3、 顾 客表 示 车 辆 iyipq得到配送调度模型如下:目标函数: li liiliiljmpmpnq pqpqnqijqij trtr eststxrdMinZpp1 10i11)()0,a( )((4.3)约束条件: liitf1%80)((4.4)pliipqvyg1(4.5)liympnqip, .211(4.6)pqljyqlijpq ;, .10(4.7)pqliyxpqljij ;, .101(4.8)式中:(4.3)为目标函数,即使车辆在完成配送任务时的最小配送费用;(4.4)为顾客满意度约束,即:每一顾客满意度的平均值必须到 80%以上;(4.5)为车辆的能力约束,即:某一车
4、辆所访问的全部客户的需求量不能超过车辆本身的载重量;(4.6)确保顾客 i 仅由第 p 类车的第 q 辆车完成配送任务;(4.7) (4.8) 为到达某一顾客的车辆唯一性约束,即每一顾客仅由一辆车服务;其中, 表示当顾客 i 的开始时间为 时,车辆在顾客 i 处的等待时间:)(itit,j 为 i 的前一个站点,当 include class bookInt smh,smo,lmh,lmo,heavy,s,e,income;Public:Book()smh=0;smo=0;lmh=0;lmo=0;heavy=0;s=0;e=0;income=0;Void setsmh(int sh)smh=s
5、h;Void setsmo(int sh)smo=sh;Void setlmh(int sh)lmh=sh;Void setlmo(int sh)lmo=sh;Void setheavy(int sh)heavy=sh;Void sets(int sh)s=sh;Void sete(int sh)e=sh;Void setincome(int sh)income=sh;Int getsmh()return smh;Int getsmo()return smo;Int getlmh()return lmh;Int getlmo()return lmo;Int getheavy()return h
6、eavy;Int gets()return s;Int gete()return e;Int getincome()return income;/smh 小型重箱子,smo 小型空箱子,lmh 大型重箱子,lmo 大型空箱子,/heavy 总重,s 起始点,e 目的,income 收入Class shipInt maxboxes,maxhboxes,heavy;Public:Ship(int mb,int mhb,int h)maxboxes=mb;maxhboxes=mhb;heavy=h;Int getmaxboxes()returm maxboxes;Int getmaxhboxes()
7、return maxhboxes;Int getheavy()return heavy;/maxboxes 最大集装箱个数;maxhboxes 最大重箱个数;heavy 最大重量/a 点 -1;b 点-2;c 点-3;d 点-4 ;e 点-5 ;f 点-6 ;/carinti10初始点/车编号规则 A 类 1to3;B 类 4to9;C 类 10;void main()Int i=0,j=0,profit=0;int Da33=5,3,2,2,3,4,1,4,5,shipinit10=6,4,1,6,3,1,2,6,5,3;Int db63=5,3,0,4,2,0,4,3,1,5,2,1,4,
8、3,0.5,3,1;Int flag10=0,0,0,0,0,0,0,0,0,0,;Int Dist66=0,50,100,150,200,50,50,0,50,100,150,100,100,50,0,50,100,150,150,100,50,0,50,200,200,150,100,50,0,250,50,100,150,200,250,0;Int Dno108=50,40,0,0,550,2,6,7000,0,0,0,60,0,5,6,3600,75,0,0,0,750,6,3,7500,0,0,80,0,1050,1,6,9600,40,30,0,0,420,6,4,5500,0,0
9、,90,40,1300,3,6,13200,80,0,0,0,810,3,6,8000,0,0,60,30,660,2,6,9000,0,20,50,20,750,4,6,8200,60,0,0,0,630,6,5,6000;Book no2;Ship a(80,50,1000),b(120,80,1500),c(150,100,1800);For(i=1;ia.getmaxhboxes()|(noi-1.getlmh()+noi-1.getlmo()+0.5*noi-1.getsmh()+0.5*noi-1.getsmo()a.getmaxboxes()|3*(noi-1.getlmh()+
10、noi-1.getlmo()+2.5*noi-1.getsmh()+2.5*noi-1.getsmo()+noi-1.getheavy()a.getheavy();ElseIf(noi-1.gets()!=6&(noi-1.gets()=da00|noi-1.gets()=da01|noi-1.gets()=da02)|(noi-1.gets()=6&(noi-1.gete()=da00|noi-1.gete()=da01|noi-1.gete()=da02)flag0=1;printf(no%d aln,i);Else flag0=-1;If(noi-1.gets()!=6&(noi-1.g
11、ets()=da10|noi-1.gets()=da11|noi-1.gets()=da12)|(noi-1.gets()=6&(noi-1.gete()=da10|noi-1.gete()=da11|noi-1.gete()=da12)flag1=1;printf(no%d a2n,i);Else flag1=-1;If(noi-1.gets()!=6&(noi-1.gets()=da20|noi-1.gets()=da21|noi-1.gets()=da22)|(noi-1.gets()=6&(noi-1.gete()=da20|noi-1.gete()=da21|noi-1.gete()
12、=da22)flag2=1;printf(no%d a3n,i);Else flag2=-1;If(noi-1.getsmh()+noi-1.getlmh()b.getmaxhboxes()|(noi-1.getlmh()+noi-1.getlmo()+noi-1.getsmh()+noi-1.getsmo()b.getmaxboxes()|noi-1.getheavy()b.getheavy();ElseIf(noi-1.gets()!=6&(noi-1.gets()=db00|noi-1.gets()=db01|noi-1.gets()=db02)|(noi-1.gets()=6&(noi
13、-1.gete()=db00|noi-1.gete()=db01|noi-1.gete()=db02)flag3=1;printf(no%d bln,i);Else flag3=-1;If(noi-1.gets()!=6&(noi-1.gets()=db10|noi-1.gets()=db11|noi-1.gets()=db12)|(noi-1.gets()=6&(noi-1.gete()=db10|noi-1.gete()=db11|noi-1.gete()=db12)flag4=1;printf(no%d b2n,i);Else flag4=-1;If(noi-1.gets()!=6&(n
14、oi-1.gets()=db20|noi-1.gets()=db21|noi-1.gets()=db22)|(noi-1.gets()=6&(noi-1.gete()=db20|noi-1.gete()=db21|noi-1.gete()=db22)flag5=1;printf(no%d b3n,i);Else flag5=-1;If(noi-1.gets()!=6&(noi-1.gets()=db30|noi-1.gets()=db31|noi-1.gets()=db32)|(noi-1.gets()=6&(noi-1.gete()=db30|noi-1.gete()=db21|noi-1.gete()=da32)flag6=1;printf(no%d b4n,i);