一、问题描述

为有效减少学生在旅途中接触人流造成新馆传播的风险,同时提高学生对学校的归属感,学校每年都会安排大巴车送学生前往高铁站以及飞机场。然而,学生们车票的发车时间比较分散,而学校能够安排的车辆有限。如何安排每趟车的发车时间,使得能够运送尽可能多的学生前往相应车站,并减少学生到站后的等待时间,是一项复杂的优化问题。为了更好的安排车辆,拟对该问题进行建模分析,以更科学合理的规划班车的发车时间。在这个问题中,我们假设学校共有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. GNU AWK中BEGIN/END使用举例
  2. 【深度探讨】阿里巴巴万级规模 K8s 集群全局高可用体系之美
  3. 俺的新书《Sencha Touch实战》终于出版了
  4. IE6 IE8下背景图片不显示问题
  5. readdir函数_PHP readdir()函数与示例
  6. Windows系统下搭建Git本地代码库
  7. 面趣 | 据说这道烧脑的微软面试题很奇葩,你来试试?
  8. linux java文件 core_linux下部署.net core/java
  9. delta3d中,读取自己的xml配置文件。
  10. Xcode给应用开启沙箱sandbox
  11. 各品牌路由器默认账号密码
  12. Windows下Redis-Cluster伪集群搭建
  13. xlsread的返回值
  14. 路边停车系统充电方案
  15. 卡尔曼滤波器原理简介
  16. 广西南宁机器人比赛_缤纷校园|2018年广西中小学电脑机器人竞赛开赛 南宁学子大显身手...
  17. Windows安装Redis并设置为开机启动
  18. 华为p4支持鸿蒙功能吗_华为鸿蒙2.0系统支持的手机型号 华为鸿蒙2.0系统详解[多图]...
  19. Block.one的EOS区块链入门开发教程Elemental Battles
  20. puzzle(0112)不规则数独、变种数独

热门文章

  1. PC键盘在Mac下Command/Option键切换
  2. html中的垂直居中实现
  3. C++ 在 windows 下获取 tuntap 虚拟网卡的 ComponentId
  4. java基本编程结构
  5. 第四次作业--4则运算
  6. MyBatis-Plus 看这一篇就够了!
  7. 古龙群侠传主线剧情攻略
  8. CSS基础之textstyle
  9. HTML5文本框怎么透明,css怎么设计文本框透明度
  10. 文本框透明CSS样式