一、问题描述

为有效减少学生在旅途中接触人流造成新馆传播的风险,同时提高学生对学校的归属感,学校每年都会安排大巴车送学生前往高铁站以及飞机场。然而,学生们车票的发车时间比较分散,而学校能够安排的车辆有限。如何安排每趟车的发车时间,使得能够运送尽可能多的学生前往相应车站,并减少学生到站后的等待时间,是一项复杂的优化问题。为了更好的安排车辆,拟对该问题进行建模分析,以更科学合理的规划班车的发车时间。在这个问题中,我们假设学校共有20辆大巴车,共计2000名学生需要前往各自的目的地。

二、模型建立

(一)整数规划数学模型

为了更好的表述模型,定义符号如下:

决策变量为:

那么,问题的优化目标可以表示为,运送最多的学生前往其相应的目的地:

约束条件可以表示为:

(1)对于每个学生来说,只能有一个时刻出发,或者不出发。

(2)对于t出发前往高铁站和机场的车辆来说,每趟车最多乘坐45人,最少乘坐25人。值得注意的是,为了模型的简便, D e s t i n a t i o n i Destinatio{{n}_{i}} Destinationi​=0表示目的地为高铁站, D e s t i n a t i o n i Destinatio{{n}_{i}} Destinationi​=1表示目的地为机场。

(3)车辆只在7点钟以后才发车

(4)对于所有的学生,其等待时间应该在30分钟到2小时之间。必须提前30分钟到达,做好准备。

(5)车辆数量约束。对于前往高铁站的车辆来说,由于单趟只需要30分钟,因此外出车辆数量等于前一时刻派出的车辆。对于前往机场的车辆来说,单趟需要1小时,往返需要2小时,因此外出车辆等于前面三个时刻排除车辆的总和。对于任意时刻,所有的车辆数相加必须小于学校拥有的总车辆数。

(二)约束规划数学模型

在这一节中,我们尝试构建上述问题的约束规划模型。在整数规划模型的基础上,引入区间决策变量 s t u d e n t s students students,其定义如下:

dvar interval students[i in Student] optional size
(destination[i]*timeToairport+(1-destination[i])*timeTotrain);

该变量表示每个学生前往相应目的地的区间。因此,等待时间可以表示为

相应的,目标函数需要更改为:

在整数规划模型中,我们引入了决策变量 x i t {{x}_{it}} xit​来表示学生i乘坐t时刻发车的车前往目的地,在约束规划模型中,引入的区间决策变量可以大大简化其他约束条件的表述,但是我们还需要增加如下约束,其他约束与整数规划模型保持一致。

三、数据获取

在问题中,我们已经假定了学校共有20辆车和2000名学生,需要获取的数据有所有学生的目的地以及其购买的车票的发车时间,一般来说,学校会在放假之前,统计学生的预计出发时间,并以此来安排车辆的发车班次等。对于本次实验,我们拟通过随机生成的方式来产生这些数据。

对于发车时间,我们可以假定在下午12点以及晚上18点发车的学生人数最多(想吃过午饭或者吃过晚饭再出行),那么我们可以构建一个具有双峰的正态分布函数。即出发时间服从以下分布:

d e p a r t T i m e ∼ N ( 24 , σ 2 ) + N ( 36 , σ 2 ) 2 departTime\sim \frac{N(24,{\sigma }^{2})+N(36,{{\sigma }{2}})}{2} departTime∼2N(24,σ2)+N(36,σ2)​

对于学生的目的地来说,我们可以假定前往高铁站与前往机场的人数比为6:4(选择高铁出行的人数更多)。使用如下Matlab代码随机生成本问题的数据:


r=0.5;mu1=24;sigma1=3;mu2=36;sigma2=3;n_stu=2000;x=zeros(1,n_stu);y=zeros(1,n_stu);for i=1:n_stur1=rand;x(i)=round((mu2+sigma2*randn)*heaviside(r1-r)+(mu1+sigma1*randn)*heaviside(r-r1));if rand\>0.4y(i)=0;elsey(i)=1;endend

因此,我们可以获得以下的出行数据分布图。

图1 学生车票发车时间及乘车地点分布情况

四、实验分析

(一)实验结果分析

在本次实验中,我们假设了学校共有20辆大巴车参与运送任务,共有2000名学生需要前往相应的目的地。首先,我们使用了整数规划方法对上述模型进行求解,主程序如附录所示。

表1 实验结果

车辆数量 高峰发车数量 能运送的总人数 最小载客率 最大载客率 平均载客率
20 7 1985 44.4% 94.8% 61.4%

表2 未乘车人员情况分析

编号 126 617 974 1147 1344 1345 1387 1554 1900 1941
目的地 1 0 0 0 1 1 0 1 1 0
预计发车时间 17 46 16 14 17 17 15 17 16 46

结果如表1和表2所示。在高峰出行段,发往高铁站方向共有5趟车,高峰出行发生在11:30。这与我们预想的较晚。此外,这种情况下我们发现,客车的载客率其实是不高的,平均只有61.4%,座位相对宽松,客车资源利用率较低。此外,我们对未能乘车的人员进行了分析,发现其预计的车票发车时间全部小于17(8:30)或者大于46(23:00)。由于客车最早发车时间为7:30,在这种约束条件下,如果这些学生登上早班车,其到达目的地后准备时间不足,不能满足约束。因此,只能通过自己乘坐其他交通方式前往。

图2 学生出发时间及到达时间分布


图3 班车发车时间及发车数量分布

图2和图3分别展示了学生出发时间分布以及预计的班车发车时间和发车数量分布图。从图2可以看出,学生的到达时间分布与图1中所示学生车票的发车时间分布较为接近,这也印证了我们所提模型的正确性。另外,我们可以发现,前往机场的班车在19:00为末班车,这是因为,未能登车的其他学生,预计的发车时间为46(23:00),如果登上末班车,那么其等待时间为3小时。而我们设置了所有学生的等待时间小于2小时的约束。可以预测的是,如果将最大等待时间约束改为3小时,那么能运送的学生数量将提高。

值得注意的是,我们还提出了约束规划模型,并且根据相关模型编写了约束规划的CPLEX程序,如附录所示。通过实验,其结果与整数规划一致,在此不再赘述。

总体来说,实验结果符合我们的预期,在满足所有约束条件的情况下,优化结果可以在一定程度上真实反映学校的情况。

(二)车辆数量对运输学生的影响

为了研究学校车辆数量对本次运送任务的影响,我们保持其他变量不变,调整车辆数量变量,进行多次实验。其结果如表3所示。

表3 不同车辆数量下最优结果展示

车辆数量 高峰发车数量 能运送的总人数 最小载客率 最大载客率 平均载客率
20 7 1985 44.4% 94.8% 61.4%
19 7 1985 44.4% 85% 58.6%
18 6 1985 44.4% 77.3% 60.4%
17 6 1985 44.4% 98.5% 63%
16 4 1985 44.4% 100% 75.1%
15 5 1985 44.4% 94.4% 60.4%
14 7 1985 44.4% 87.8% 63.4%
13 7 1985 44.4% 86.4% 61.6%
12 4 1985 44.4% 94.8% 70.7%
11 4 1985 44.4% 96.7% 72.3%
10 5 1985 44.4% 100% 72%
9 4 1985 44.4% 100% 75.6%
8 3 1985 44.4% 100% 84.3%
7 3 1985 50% 100% 93.1%
6 3 1819 45.7% 100% 94.5%
5 3 1618 51.1% 100% 96.3%
4 3 1402 44.4% 100% 93.4%
3 2 1123 57.8% 100% 94.7%
2 1 774 55.6% 100% 95.6%

从表3中可以看出,当车辆数量在8-20之间时,问题的结果随着车辆数量的变化没有发生明显的改变。这是因为,车辆数量在8辆以上时,能够完整的运送全部满足约束的学生前往相应的目的地。在车辆数量减少的过程中,平均载客率明显提升。

当车辆数为6时,载客人数出现了明显的降低,从1985人减到了1819人。可以看出,车辆数为6已经无法运送全部学生前往相应的目的地。在此之后,随着车辆数的降低,能运送的学生总人数、平均载客率均会出现明显变化。图4现实了当学校车辆数为6时,相关的结果数据分布图。通过与图2和图3比较不难发现,为了在有限的条件下让更多学生到达目的地,学生们的出发时间变得较为集中,同时客车的载客率也达到了94%以上,较为拥挤。综合学生的体验和学校的资源分配,我们通过本次实验建议学校分配9辆大巴车进行运送任务(能全部完成运送任务,载客率75.6%)。


图4 车辆数为6时结果数据展示

五、总结

本次实验探究了我校学生放假前往高铁站、飞机场的运输方法。首先我们构建了该问题的整数规划模型,并结合所学知识,在整数规划模型的基础上,构建了约束规划模型。接着,通过随机模拟的方法生成了一系列数据,包括学生购买车票的发车时间以及学生前往的地点等。最后,通过实验分析,发现车辆数在9时,既不会浪费宝贵的客车资源,又能够全部运送学生前往目的地且学生们的体验较佳。整体来说,实验结果符合预期,贴近实际,模型的正确性以及程序的正确性得到了验证。

六、附录(如需其他代码,可评论私信回复邮箱)

(一)整数规划主程序

int  n_stu   = ...;
int n_bus   = 6;
int n_t = 48;range Student = 1..n_stu;
range   T   = 1..n_t;int   timeTotrain     = 1;
int timeToairport       = 2;
int destination[Student]    = ...;
float   departTime[Student] = ...;dvar int+   NdepartToTrain[T];
dvar int+  NdepartToAirport[T];
dvar int+  NbackFromTrain[T];
dvar int+  NBackFromAirport[T];
dvar int+  NoutTotrain[T];
dvar int+  NoutToairport[T];
dvar boolean    x[Student][T];
dvar int+  waitTime[Student];dexpr int total_stu   = sum( i in Student, t in T ) x[i][t];
dexpr int   total_wait_time = sum( i in Student ) waitTime[i];maximize total_stu;//-total_wait_time; subject to {constraint1:forall( i in Student ) sum( t in T ) x[i][t] <= 1;forall( t in T ){sum( i in Student ) ( x[i][t] * (1 - destination[i]) ) >= 20 * NdepartToTrain[t];sum( i in Student ) ( x[i][t] * (1 - destination[i]) ) <= 45 * NdepartToTrain[t];sum( i in Student ) ( x[i][t] * (destination[i]) ) >= 20 * NdepartToAirport[t];sum( i in Student ) ( x[i][t] * (destination[i]) ) <= 45 * NdepartToAirport[t];}constraint2:forall( t in 1..14 ) /* 早上7点以后才发车 */{NdepartToTrain[t] == 0;NdepartToAirport[t] == 0;}constraint3:forall( i in Student, t in T ){(x[i][t] == 1) => (t + destination[i] * timeToairport + (1 - destination[i]) * timeTotrain + 1 <= departTime[i]);       /* 达到时间约束 */(x[i][t] == 1) => (t + destination[i] * timeToairport + (1 - destination[i]) * timeTotrain + 4 >= departTime[i]);       /* 达到时间约束 */(x[i][t] == 1) => (waitTime[i] == departTime[i] - (t + destination[i] * timeToairport + (1 - destination[i]) * timeTotrain) );}forall( i in Student ) ( (sum( t in T ) x[i][t]) == 0 ) => (waitTime[i] == 0);constraint4:  /* 车辆总数 */forall( t in 3..n_t ){NbackFromTrain[t] == NdepartToTrain[t - 2];NoutTotrain[t] == NdepartToTrain[t - 1];}forall( t in 5..n_t ){NBackFromAirport[t] == NdepartToAirport[t - 4];NoutToairport[t] == NdepartToAirport[t - 3] + NdepartToAirport[t - 2] + NdepartToAirport[t - 1];}forall( t in 5..n_t ){NBackFromAirport[t] + NbackFromTrain[t] + NoutTotrain[t] + NoutToairport[t] + NdepartToAirport[t] + NdepartToTrain[t] <= n_bus;}
};execute {var OutputFile = new IloOplOutputFile( "x.txt", false );for ( var i = 1; i <= n_stu; i++ ){for ( var j = 1; j <= n_t; j++ ){OutputFile.write( x[i][j], ' ' );}OutputFile.writeln();}var OutputFile = new IloOplOutputFile( "NdepartToTrain.txt", false );for ( var j = 1; j <= n_t; j++ ){OutputFile.write( NdepartToTrain[j], ' ' );}var OutputFile = new IloOplOutputFile( "NdepartToAirport.txt", false );for ( var j = 1; j <= n_t; j++ ){OutputFile.write( NdepartToAirport[j], ' ' );}var OutputFile = new IloOplOutputFile( "waitTime.txt", false );for ( var j = 1; j <= n_stu; j++ ){OutputFile.write( waitTime[j], ' ' );}
}

《优化技术实验报告》(附全部可运行代码)校车排版问题建模与分析-CPLEX与MATLAB混合编程相关推荐

  1. 网络对抗技术-实验报告一

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 蒋建辉 年级 2015 ...

  2. 超声波测距仪编程_北邮小学期pic单片机-超声波测距仪实验报告(附代码).docx

    北邮小学期pic单片机-超声波测距仪实验报告(附代码) 2014年小学期单片机设计实验报告 题目:超声波测距仪 目录 TOC \o "1-3" \h \z \u HYPERLINK ...

  3. 网络对抗技术—实验报告一

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 李家伟 年级 2014 ...

  4. 中国人民公安大学 网络对抗技术实验报告一

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 王明帅 年级 2015 ...

  5. 现代密码学上机程序c语言,现代密码学与加解密技术实验报告

    现代密码学与加解密技术实验报告 现代密码学与加解密技术实验 一. 实验教学目标与基本要求 现代密码学与加解密技术实验是本课程重要的实践教学环节.实验的目的 不仅仅是验证理论知识,更重要的是通过实验加强 ...

  6. android实验报告指导书,虚拟现实技术实验报告指导书.doc

    虚拟现实技术实验报告指导书.doc 虚拟现实技术实验指导书前言 虚拟现实技术实验简介虚拟现实Virtual Reality,简称VR,又译作灵境.幻真是近年来出现的高新技术,也称灵境技术或人工环境.虚 ...

  7. 网络对抗技术实验报告一

    学   号:201421410021 中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描   ...

  8. 网络对抗技术 实验报告 三

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验三 密码破解技术     学生姓名 吴宜杰 年级 2014 区队 ...

  9. c语言recover函数的功能是,c语言实验报告(附答案版).doc

    c语言实验报告(附答案版) 实验 一.实验学时二.实验目的1. (2)掌握不同的类型数据之间赋值的规律: (3)掌握数据在内存中的存储方式: (4)学会输入.输出函数的基本格式和使用方法: (5)学会 ...

最新文章

  1. Smart-linkmonitor-link配置注意事项
  2. 新入行程序员考虑自己是否明白以下这8件事情
  3. Silverlight和WCF交互式的实战项目(更新完毕)
  4. iframe中的历史记录问题汇总及解决方案[转]
  5. html5 视口,html5 – 在媒体查询中更改视口
  6. Python:使用threading模块实现多线程编程三[threading.Thread类的重要函数]
  7. 数据:以太坊2.0合约余额新增1.16万ETH
  8. 计算机网络 第一章 计算机网络体系结构
  9. python 遍历内嵌tuple_python内置数据结构list、set、dict、tuple(一)
  10. mycat-sublun数据库分片
  11. 第一模块:开发基础 第1章 练习及作业
  12. HDU 5820 Lights(扫描线+zkw线段树)
  13. linux 笔记本 显卡驱动下载地址,AMD Radeon HD系列Linux显卡驱动13.9版下载
  14. 不能说のsecret 5
  15. 在ThinkPHP5.0打造一个专属短信接口
  16. 360网址导航的搜索引擎默认怎么改为百度
  17. cannot enlist more than one non-XA resource
  18. 仿真软件 JaamSim介绍
  19. TypeScript免费视频图文教程(2W字)
  20. 关闭电脑时提示有人远程使用计算机,关机时提示有人正在远程使用

热门文章

  1. 九龙证券|本周5只新股申购,特斯拉、蔚来、理想的供应商来A股了!
  2. 微软中国裁员曝光:在CD结束后!薪酬不变!
  3. Promise—关于catch(你真的了解catch的执行顺序吗)
  4. Minio Browser
  5. 检测网站打开速度的5个方法
  6. 怎样用谷歌浏览器测试软件性能,chrome插件:网站性能检测工具lighthouse
  7. SVN各种异常解决整理
  8. 11 年北漂老码农被卷跑了!他道出了离开的真相!
  9. docker访问宿主机端口
  10. 215页10万字基于大数据的智慧城市解决方案