美国大学生数学建模之飞机就座问题.docx
《美国大学生数学建模之飞机就座问题.docx》由会员分享,可在线阅读,更多相关《美国大学生数学建模之飞机就座问题.docx(11页珍藏版)》请在冰豆网上搜索。
美国大学生数学建模之飞机就座问题
飞机就座问题的探讨
摘要
旅客登机时间越短,飞机一天的航班次数就会相应增加,这样航空公司才可能获得较好收益,而飞机座位分派方案的合理与否又决定了登机时间的长短。
本文主要针对座位分派问题进行了探讨,通过查阅相关资料文献,从各种座位分派方案中筛选出相对较好的WILMA方法,并在登机模型基础上,利用计算机进行模拟,建立了关于排列逆序数的正态分布模型,计算出登机时间为295.2秒。
最后我们将“对号入座”的WILMA方法改成“先到先坐”的“中心点聚法”,同样用计算机进行模拟,计算得到登机时间为246.5秒,较WILMA方法将登机时间缩短了16.5%。
关键词座位阻碍过道阻碍排列逆序数正态分布模型
1、问题重述
1.1背景知识
由于航空旅行快捷便利的优势,在现代社会中起着重要的作用。
每时每刻,千千万万的人享受着他们的航空旅行。
由于大众乐于看到机票降价,那么航空公司应设法采取其他措施获得较多盈利。
地面上的飞机不能完成这个目标,所以,航空部门能采取的解决办法之一是使飞机的周转时间减至最少以增加更多的航班。
为了减少周转时间,人们研究了登机和下机过程,发现登机是最重要的。
研究结果表明,一个航班的登机时间每减少1分钟,航空公司就可以节约30美元成本。
于是,人们花费很大努力设计和比较不同的方案,大多是针对登机过程—比如按照不同的座位区域和登机时间将乘客分组.讨论最多的方案包括“从后到前”型(将乘客按座位从后到前分成若干组,这也是目前最常用的方法),“从外到里”型(将乘客按座位由靠窗户一侧向走廊一侧分配)等等。
1.2基本信息
航空公司允许引领候机乘客以任何次序就座。
按照惯例,首先是特殊需要的乘客就座,然后就是头等舱的乘客就座(他们坐在飞机的前部),最后是经济舱和商务舱的乘客从飞机后排开始向前按照排结组就坐。
从航空公司的角度来看,飞机只有在飞行的时候才能为航空公司赚钱,而长的登机时间限制了一架飞机一天中可以飞行的次数。
所以只有将登机时间尽量最小化,航空公司才有可能获得最大利益。
例如AirbusA380(空中客车A380,可容纳800名乘客)客机的发展就更要强调缩短登机(以及下机)时间的问题。
1.3需要解决的问题
(1)现有乘客人数不同的飞机:
小型机(85-21),中型机(210-330)和大型机(450-800),设计登机和下机时间的步骤并进行比较。
(2)准备一份不超过两页纸的实施概要,以便向相关人员阐述结论。
2、问题分析
本问题主要研究的是针对不同类型的飞机,如何设计较好的登机和下机方案,将飞机周转时间尽可能缩短,进而使航空公司获益最大的问题。
乘客登机的实际过程由以下几个步骤组成:
登记,确认座位,托运行,在候机楼和过道中等待,进入飞机,寻找座位,将行放到座位上方的行柜中并入座。
在这些步骤中,登记和托运行的时间受到机场限制。
通过查阅有关登机过程的资料文献,我们发现,登机时间是影响周转时间长短的关键因素,而座位分派方案的好坏又直接影响着登机时间。
通过搜集相关资料,我们可以从各种座位安排方案中筛选出具有代表性的一种,结合相应的算法并用计算机进行模拟研究,然后在此基础上改进,将模拟出的登机时间结果与改进的实际数据结果对比,最终确定出相对较优的方案。
3、模型假设与符号说明
3、1模型假设
(1)假设乘客所携带的行大小重量相同;
(2)假设飞机过道上一次只能容一人通过;
(3)假设乘客都是对号入座,不会出现坐错位置的情况;
(4)假设所有位置坐满;
(5)假设不会出现乘客拒绝登机、迟到等突发状况。
3、2符号说明
符号
符号说明
N1
登机总人数
N2
每分钟登机人数
N3
过道阻碍数
N4
行阻碍数
T1
过道阻碍时间
T2
行阻碍时间
T
登机总时间
4、模型建立与求解
4、1准备知识
WILMA方法:
按照先靠窗座,再中间,再通道座位的顺序,各排同时进行。
行阻碍:
座位靠窗户的乘客如果比外面的乘客后到受到的阻碍。
过道阻碍:
后排乘客受到过道上乘客的阻碍。
4、2模型的建立与求解
首先,以小型飞机为例,根据WILMA方法,按下图数字顺序就座。
WILMA方案
0
0
0
0
0
0
0
0
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
1
3
5
6
4
2
然后,计算登机时间。
登机时间分为三部分:
乘客进舱时间,过道阻碍时间,行阻碍时间,所以登机时间公式为:
T=N1/N2+N3*T1+N4*T2
根据资料显示,我们假设N1=120,N2=30,T1=1,T2=2
接下来计算过道阻碍数和行阻碍数。
将N1分为六组,每组20人,每次对乱序的每组进行顺序排列,对号入座,求出交换次数,即过道阻碍数。
然后用计算机进行10000次模拟实验,对数据结果进行正态拟合,求出期望,即平均过道干扰数。
拟合曲线图如下。
行阻碍时间较每组入座时间不明显,所以可以忽略。
由正态分布图像可得过道阻碍次数平均为N3=92次,从而登机总时间为T=60*120/30+92*1*6/10+0=295.2秒
我们打破传统,乘客不再是对号入座,而是先到先坐。
基本思路是在保证上车人流不暂停的前提下尽量减少行的阻碍时间,对于同排座位而言,中间座位与靠窗座位,过道座位与中间座位,乘客的入座时间间隔越长越能消除行的阻碍时间。
如图所示,我们采用“中心点聚法”,首先可以保持队伍流畅,基本不会产生过道阻碍时间,同时行阻碍时间也得到最大限度的缩短。
登机时间公式:
T=N1/N2+N3*T1+N4’*T2’,此时N4’作为离散自变量,定义为离散的行阻碍数,T2’为间隔阻碍时间函数,其他不变。
假设T2’=c/N4,其中c是大于0的常数。
由于行阻碍时间为2秒,所以当N4=1时,T2’=2秒,故可求得c=2.
中间与靠窗座位时间间隔数:
第一组:
2,4,6…,38;
第二组:
4,8,12…,40;
第三组:
40,40,40…40(共20个);
过道与中间的座位间隔数:
第四组:
19,19,19…19(共40个)
将各组数代入,行阻碍总时间为∑T2’=6.5478秒,所以T=246.5秒。
可见,中心点聚法较WILMA方法好,登机时间时间相对缩短了16.5%。
对于中型和大型飞机,我们可以将其分割成若干那个小型飞机模型,采取同样的方法,尽可能缩短阻碍时间,保持队伍流畅,增加航班次数,进而增加航空公司的收益。
附录
//假设小型飞机每列有20个座位,通道干扰最大次数(19+1)*19/2=190次,分成19组
publicstaticint[]ar1_19=newint[19];
staticvoidMain(string[]args)
{
intN=10000;//实验次数,随机重复10000次实验
Randomr=newRandom();
int[]arr;
intm;
for(intk=1;k<=N;k++)
{
#region
//产生随机数组
arr=null;
arr=newint[20]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
m=0;
for(inti=0;i<20;i++)
{
do
{
m=r.Next(1,21);
if(!
arr.Contains(m))
{
arr[i]=m;
}
}while(arr[i]==0);
}
//for(inti=0;i<20;i++)
//{
//Console.Write(arr[i]+"");
//}
//计算交换次数
intlength=arr.Length-1;
intEXCount=0;
for(inti=0;i{
for(intj=length;j>i;j--)
{
if(arr[j]>arr[j-1])
{
inttemp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
EXCount++;
}
}
}
whichCase(EXCount);
#endregion
Console.Write(EXCount+"");
if(k%10==0)
{
Console.WriteLine();
}
}
Console.WriteLine();
for(inti=0;i{
Console.Write(ar1_19[i]+"");
}
Console.ReadKey();
}
publicstaticvoidwhichCase(intx)
{
if(x<=10&&x>0)
{
ar1_19[0]++;
}
elseif(x>10&&x<=20)
{
ar1_19[1]++;
}
elseif(x>20&&x<=30)
{
ar1_19[2]++;
}
elseif(x>30&&x<=40)
{
ar1_19[3]++;
}
elseif(x>40&&x<=50)
{
ar1_19[4]++;
}
elseif(x>50&&x<=60)
{
ar1_19[5]++;
}
elseif(x>60&&x<=70)
{
ar1_19[6]++;
}
elseif(x>70&&x<=80)
{
ar1_19[7]++;
}
elseif(x>80&&x<=90)
{
ar1_19[8]++;
}
elseif(x>90&&x<=100)
{
ar1_19[9]++;
}
elseif(x>100&&x<=110)
{
ar1_19[10]++;
}
elseif(x>110&&x<=120)
{
ar1_19[11]++;
}
elseif(x>120&&x<=130)
{
ar1_19[12]++;
}
elseif(x>130&&x<=140)
{
ar1_19[13]++;
}
elseif(x>140&&x<=150)
{
ar1_19[14]++;
}
elseif(x>150&&x<=160)
{
ar1_19[15]++;
}
elseif(x>160&&x<=17