Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

什么是最有效的飞机座位策略?

今天,我很高兴地欢迎我的同事Ramamurthy Mani使用SimEvents进行另一个非常有趣的研究。

简介

最近,我读了一本文章在《连线》(Wired)杂志上,他提出了一个我相信很多人都遇到过的问题——什么是最有效的让乘客上飞机的方法。虽然这篇文章强调了一种理论(和确定性)的方法来做到这一点,但我试图对这种情况进行建模,并尝试这种策略的一些变化,以及在登机过程中捕获至少更多一些随机元素的其他策略。

生成一个乘客队列

我使用MATLAB生成了一个使用许多不同登机策略的乘客队列。这些策略如图所示。航空公司最常用的标签是“backToFrontZone”。当一个乘客更有可能提前进入乘客队列时,每个图中的一个彩色圆圈比另一个更亮。我使用MATLAB中的“datasample”函数来生成一个带有这些加权概率的样本乘客队列。绿色阴影每减少一次,表示队列中更深阴影的点(即乘客)跳到更亮阴影点前面的概率减少10倍。

关闭所有;清晰的所有登机类型指定您要如何安排乘客登机。boardingTypes = {“frontToBackZone”“backToFrontZone”“随机”...“alternateRowZone”“windowToAisleZone”“windowToAisleAlternateZone”};%boardingTypes = {'windowToAisleAlternateZone'};numRows = 20;%平面中的行数numSeatsPerRow = 6;%每排座位数crossZoneFactor = 10;%这个因素控制着人们来自不同地方的可能性% zone混合。数字越高,混合的可能性就越小expRndMeanStowTime = 1/4;装袋的平均时间(分钟)expRndMeanGetUpSitTime = 1/6;起床和坐下的平均时间(分钟)当乘客需要让别人上车时%他们的行seatOrders = [];idealOrders = [];k = 1:length(boardingTypes) fprintf(“生成% s \ n”, boardingTypes {k});使用MATLAB生成乘客订单[seatOrder, idealOrder] = airseatSetupSim(boardingTypes{k},“重复”...numRows numSeatsPerRow,...crossZoneFactor expRndMeanStowTime,...expRndMeanGetUpSitTime);seatOrders = [seatOrders, seatOrder];% #好吧idealOrders = [idealOrders, idealOrder];% #好吧结束airseatDrawBoardingSchemes (boardingTypes seatOrders);

这六种策略包括:

    1. frontToBackZone:从飞机前到后分为4个区登机。
    2. backToFrontZone:从飞机后部到前部的登机分为4个区域。
    3. 随机:登机是随机发生的
    4. alternateRowZone:登机(从后往前)分为四个区域,每个区域只包括交替的排。
    5. windowToAisleZone:登机分为3个区域:“窗口”、“中间”和“过道”
    6. windowToAisleAlternateZone:4和5的混合,6个区域,其中窗口、中间和通道的交替排被视为单独的区域。

运行模拟

为了建立机舱模型,我使用了一个在SimEvents中构建的模型。SimEvents是用于Simulink平台的离散事件仿真库。金宝app首先,我们生成乘客实体,并为他们分配诸如排和座位号等属性,以及打包行李和坐下所需的随机时间。

乘客实体生成

然后使用一个库,我可以建模一排座位,然后重复这一行,因为我想形成机舱。在每一行中,我使用Attribute Function块,在那里我可以编写MATLAB代码访问和修改乘客实体的属性:

行

我将其中的20个串联起来,得到了有趣的结果,我将在下面描述。

为了使模拟在视觉上更吸引人,我创建了一个自定义可视化,使用R2015a中的新功能。在MATLAB中,我创建了一个simevents。CustomObserverInterfaceobject, which I connected to my model using simevents.connectObserver. In the object, I can specify which blocks to observe using getBlocksToObserve, and then I can code any type of visualization in the entityAdvance to be updated when an entity advances.

下面是自定义观察者对象的样子。注意,我删除了实际的绘图代码,以帮助保持对SimEvent特性的关注。

classdefairseatViz < simevents。CustomObserverInterface绘制飞机座位模型结果的辅助类。属性(访问=私人)mFig;mPatches = cell(1,20);mNumRows;mNumSeats;结束% ---------------------------------------------------------------------方法(访问=公共)函数this = airseatViz(numRows, numSeats) this。mNumRows = numRows;这一点。mNumSeats = numSeats;结束函数fig = getFigure(this) fig = this. mfig;结束函数blks = getBlocksToObserve(这个)% #好<马努>Blks1 = find_system(“airseat”“FollowLinks”“上”...“BlockType”“SingleServer”);Blks2 = find_system(“airseat”“FollowLinks”“上”...“BlockType”“EntitySink”);BLKS = union(blks1,blks2);结束函数p = getPace(这个)% #好<马努>P = 5;结束函数初始化(这~)%一些初始化可视化的代码结束函数entityAdvance(this, entity, ~, to) enStruct = sedb.eninfo(实体);currenrow = enStruct.Attributes.CurrentSeatLoc;destRow = enStruct.Attributes.Row;当实体前进时更新可视化的一些代码结束函数entityDestroy(this, entity, ~)%当实体被销毁时更新可视化的代码结束结束结束% classdef

下面是在飞机后部开始登机的情况下的动画:

寄宿动画

结果

我绘制了每个方案的结果,以及理想情况。我把理想定义为一群行为完美的人,他们完全按照计划规定的顺序上船,没有随机性。

结果确实证明,如果航空公司决定从前到后登机,目前使用的流程只会变得更糟!有些方案比真正的随机方案效果更好,这让我感到很惊讶——但从我开始写的那篇文章来看,也许我应该预料到这一点。看起来,即使将随机性扔到上面提出的确定性模型中——由标记为“windowToAisleAlternateZone”的方案表示,它也表现得最好。也许下次我在机场的时候,情况会有所好转?

下面是上面描述的六种方案的结果,由后向前方案规范化,这是大多数公司使用的标准。

寄宿动画

现在轮到你了

下载Mani的项目在这里试着想出一个更好的寄宿方案。

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。