迪斯尼的FastPass有效和/或有用的排队理论

在迪斯尼世界,他们使用Fastpass系统为受欢迎的游乐设施制作第二条较短的路线。 这个想法是,你可以等待标准线,经常等待一个多小时,或者你可以得到一个FastPass,它允许你在指定的时间段内(通常在几个小时之后)回来,只等10分钟或更less。 您只能使用FastPass一次“等”一次。

我一直在试图弄清楚这个概念背后的排队理论,但是我发现唯一的解释是它的目的是让人们脱离线路,做一些会带来额外收入的东西(购物,吃东西等等)。

这就是为什么FastPass被实现的原因,还是存在真正的游客效率问题? 有没有应用软件类似的逻辑? 有软件应用程序应该应用类似的逻辑吗?

我看到在软件中实现类似的问题的一部分是,它是基于用户select他们的队列。 为了在软件中实现更快的等待周期,我认为这个理论的一个很好的应用将要求应用程序足够聪明,根据自己的需求知道将什么队列放入,而不需要最终用户的select。

快速通行线路显然不会增加给定乘车队列的总吞吐量,但是在资源调度和资源分配方面有帮助。

就像我说的那样,你不会再为这个车程创造更多的总吞吐量,但是其他地方可能会有一些车辆没有得到充分的利用。 如果你现在可以乘坐这些游乐设施以及游乐设施,那么你可以提高公园的整体效率。 我的意思是最大限度地减less乘客容量以下的乘坐量。

如果你的计算机资源闲置,等待执行一个可能需要很长时间的任务,那么把这个资源用于别的东西是有道理的吗? 从这个angular度来看很简单。

这是关于积累,而不是排队效率。

Fastpass的工作原理是让队列中的单个项目在“消费”某物时更有效率。 这不像一个等待处理指令的处理器那样的队列,因为人们排队等待食物。

就迪斯尼乐园的人来说,这可以让他们最大限度地发挥乐趣

想想接受指令的处理器。 每条指令都在队列中等待执行,以执行其任务。 现在改变它 – 想象每条指令都在等待排队而不是执行一个指令,而是从处理器中得到一些东西 – 每次碰到一个处理器,就会得到一颗金色的星星,它的工作就是积累尽可能多的指令尽可能。

Fastpass就像是允许指令去别的地方,去一个不同的处理器,在那里得到一颗金星,然后回到主处理器去获取金星。

在迪斯尼乐园用户的情况下,他们有兴趣获得乐趣 – 积累乘坐体验。 Fastpass通过允许用户以较短的线路find不同的乘坐者来实现最大化,所以他们可以在更短的时间内累积更多。

我已经试过FastPass了,这就是我的看法:

比如说,如果你去等FastPass,你会得到一个预定等待时间,你会得到一个指定的时间段,保证你立即进入。 通常在1小时以后。

我们为受欢迎的游乐设施获得了FastPasses,在此期间,排队在10-15米的队列中,让我们在FastPass虚拟队列中排队并进入3个游乐场。 他们还给了我们一些非常不受欢迎的游乐设施的额外的不计数的FastPasses,如果我们使用那些我们会得到一些更受欢迎的游乐设施,并填补非常不受欢迎的游乐设施。

下面是一个比较我们花费的时间和非快速通道选项的graphics:

快速通过http://img259.imageshack.us/img259/5173/fastpass.png

在我看来,这是一个有效的排队理论,它允许执行较less的预期等待时间的资源,而延迟更高的预期等待时间。

FastPass基本上实现了非阻塞访问者的某种优先级队列。 他们不阻止,他们不睡觉,他们花钱。 它的作品是因为约翰在上午11点使用它,乔在上午11:15(或上午11:01)使用它。 现在,如果每个人都有一个快速通行证,普通线路会更快,而大多数游客花更多的钱在食物和礼物上。 对迪斯尼来说,这是一定程度上的预期效果。

这个传球做了一些假设,并且有一些限制。 它假设fastpass持有者是less数。如果这种变化,他们将不得不在多个游乐设施通行证工作,或fastpass持有人会花钱,而在正常线路很less人…适得其反。 由于只支持一次乘车,所以没有两个快车的乘客会一次要求同一乘坐。

现在,考虑到乔可能在轮到之前离开公园,你将不得不拿出某种“游客”来提高系统的效率。 如果乔离开了,约翰来得早,约翰就可以骑了。 而且,约翰会想知道为什么他的快速通行证没有通知他可以更快地骑上n分钟。 这就是真正获得乐趣的地方,如果乔离开只是为了从车里取出一些防晒霜而返回呢? 毕竟,轮到他两个小时的路程,除非有200多人在他被阻挡的时候离开了公园(同时得到了防晒霜),这是一个不能被打断的任务。 所以在这种情况下,我们把Joe放在某种磁盘睡眠中,或者是不能被中断或者死亡的睡眠。 他没有任何信号,他没有投票,他离开了公园。

这是推动实际无锁编程的理论。 它和餐饮哲学家的问题一样有趣,其实更多。

至于迪斯尼去..这不是一个bug,它的一个特点是,人们更倾向于离开公园,而更倾向于花钱。

我认为你可以用这种方式将其与asynchronous编程模型进行比较。

您要求系统执行一个操作,稍后您会回来查看结果。

最大的不同之处在于,您可以指定在完成时要调用哪个事件/callback,或者在准备等待时需要进入等待。 我还没有看到一个机制,会告诉你以后再回来,并保证较低的等待时间。

在一个普通的队列中,你不能真正估计你有多快的速度。 你很紧张,有时想着放弃这个想法。

有了FastPass,您就可以“知道”这次旅程将在确切的时间段内发生。 你很确定,什么时候发生这种情况,并考虑不太经常戒烟。 你去购物和吃东西,并在需要时返回。 您可能会因为您提前申请乘坐并感受到承诺而返回。 Joel Spolsky 描述了星巴克队列中使用的类似的承诺思想 。

所以FastPass对于公园和游客都是一种方便。 游客更高兴,公园可以在等待的时候卖掉。

只是一个良好的社会工程的例子。

对我来说,这似乎是一个优先队列 。

当第一次使用SpeedPass时,会获得更高的优先权。 然后,当popupgeneral line queueSpeedPass在队列中具有更高的优先级。

如果我们同意这是一个优先级队列,那么最明显的软件实现是操作系统调度

从调度wiki文章修改:

迪士尼乐园调度员主要关注:

  • 乘坐利用 – 保持乘坐尽可能的繁忙。
  • 吞吐量 – 每个时间单位完成乘坐的人数。
  • 周转时间 – 执行某个特定行程的时间。
  • 等待时间 – 一个人在准备好排队等待的时间。
  • 响应时间 – 排队等候到产生第一个响应所花费的时间。
  • 公平 – 每个人平等的乘车时间。

对我来说FastPass的想法看起来像一个系统的解决scheme,我需要执行任务1到N,并根据我对自己的一些知识(在迪斯尼,我可能知道,我的孩子会很高兴骑在Test Track,而等待Soarin的FastPass时间片到达)我可以安排自己进入任务N的“FastPass”队列,也进入任务M的标准队列。这可以在任务的顺序不一定重要,排队时间是已知的,我可以估计需要多长时间来做任务M或N.不知道我有一个很好的现实世界的编程示例,但我们的思想本质上是线性的,所以我们的工作stream程往往是这样的。

FastPass允许您同时在多行中等待。 它可以让你避免等待,但增加平均等待时间,因为线条有效地变长。

但是大多数人并没有花费整个时间去骑自行车。 一些事件,如游行,并不是真的有一个等待时间。 通过使用快速通行证,您可以在不牺牲长途线路的情况下进行更多的非线性或短线性事件。

有两个地方可以想到在我的软件开发中有类似的行为。 然而,既不是一个确切的比喻,因为它们都需要

首先是asynchronous编程。 如前所述 ,就asynchronous模型和fastpass模型而言,在等待方面存在一些差异。 但是,其他一些编程模型(如消息传递接口 )给了你一些其他的select,这可能会更接近FastPass模型。

特别是,我正在考虑MPI中的MPI_Gather方法 – 他们使用的模型可能更接近一些。 每个函数都在集群中传递,然后可以从根目录调用获取当前处理的数据。 目标是一样的(保持每个人都在等待(不阻挡用户),走动,花费[或处理数据])。

另一个地方我可以看到相似之处在于高级线程编程模型,比如TPL中的新调度器。 TPL在C#4中的一个主要优点是调度器将允许工作被窃取,对于我来说似乎是一个明确的实现,试图在dynamic地转移线路的软件中实现 – 这与FastPass有关。 快速通行的好处之一就是你坐得less,坐更多,走得更远。 有了TPL,希望有更less的阻塞和等待,因为已经完成队列的线程可以从其他队列中窃取任务。

FastPass的一个有趣的方面是它为迪斯尼引入了一个反馈渠道。 通过一条几乎总是等待吸引力的线路,除了以某种方式测量线路在一天中的固定时间间隔多久以外,没有什么可以做的。 使用FastPass迪斯尼可以实时收集每个景点的需求和交通数据,并且已经数字化 – 应该立即到他们的数据仓库进行采矿。

我倾向于认同那些将FastPass作为一种资源分配系统的资格排列系统。 另一个比喻是把每个迪斯尼客户视为一个单线程的操作系统进程,直到客户拿起一个FastPass。 这使得客户成为一个双线程的过程,像以前一样在整个公园内循环,并运行另一个等待指定资源(FastPass吸引力)的线程。 允许多个FastPasses给用户(进程)将使这些进程更multithreading。 线程同步发生在客户最终获得FastPass吸引力的时候。

唯一可以看到的软件类比是这种方法避免了队列缓冲区的溢出 – 如果许多客户端都大致同时尝试添加到一个队列中,它可能会很快填满队列。 如果要求客户端等待一定的时间,那么在添加到队列之前,他们必须在本地caching(相对)较less的项目。

然而,在大多数其他情况下,这会导致吞吐量的下降,因为如果等待时间select不当,可能会导致队列被饿死。

尝试编写一个testing应用程序,使用不同指标下的“FastPass”进行排队,并比较结果 – 并让我们知道,如果您发现任何有趣的事情! 🙂

不知道如何在软件中应用。 但是这个系统对游客来说肯定是有好处的:你可以有一次乘坐快速通行证,同时去另一条线路不长(或者说你去购物,吃东西等等)。 当我和我的家人在那里的时候,这真是个救命恩人(尽pipe诚然这是淡季)。

鉴于它被利用 ,你不得不相信队列用户;-)

从我的供应链课程来看,立即给我的排队方面是减less你的等待时间,所以人们根本不介意等待。 我不认为这缩短了主线,但是它确实减轻了人们对排队等待的焦虑,因为他们知道一旦下车,他们可以马上回来(如果他们的快速通行时间到了,反正)。

我知道,我认为我可以乘坐快速通道更多的乘坐方式,但我不知道是否真的是这种情况,或者只是一个聪明的重新构build我的等待时间。

我发现唯一的解释是,它的目的是让人们脱离线路,做一些会带来额外收入的东西(购物,吃东西等等)。

我认为你已经达到了这个要点,但是你听起来应该比它应得的公司更恶劣。 我当然宁愿在购物和吃东西的时候“实际上排队”,而不是排队排队。

理论上,当自然需求较低时,FastPass可以尝试安排更多人; 这就是为了从真正的预定队列中获得更多的吞吐量。 但在实践中,我怀疑这个游乐设施在一天中的大部分时间都在运转,所以从中获得的生产力很低。

这是关于热门游乐设施的资源调度,以及通过销售商品来产生额外收入的方法。 如果你排队等候,这意味着你没有机会花更多的钱。

满足他们的顾客是迪士尼最大的利益。 虽然销售肯定是重要的收入,但获得回头客的价值却要高出许多倍。

如果我花了150美元购买一日游的公园门票,只乘坐10次,因为路线太长,我会质疑这些乘车是否真的值15美元。 但是,如果我有三十次乘坐的方式,那么我会有一个更好的经验,不太可能质疑这个经验的价值,并且更有可能返回给迪士尼乐园另一个价值150美元的食物+商品。

在FastPass之前,我乘坐10次乘坐和30次乘坐的唯一区别是公园的拥挤程度如何。 这是一个常见的问题,其他理想景点试图以其他方式解决。 例如,Tahoe的Northstar滑雪胜地将限制他们在特定的一天(或者至less以前)销售的电梯票数量。 这也解决了这个问题,但是这样会对收入产生更负面的影响。

在软件中,类似的范例将加载一个网页。 在古代,这个过程是单线程的:获取所有的内容,渲染所有的内容并显示页面。 随着交通和数据量的增加(特别是图像合并),这个模型面临着与迪斯尼乐园相同的问题。 如果页面上有很多图片,加载需要很长时间,我不会等待内容,也不会再回到那个网站。

现在几天的网页加载不同。 内容被加载,渲染和显示,而另一个线程加载,渲染和显示图像。 这极大地改善了用户体验,并且如果有可取的内容,我将继续回到站点,并且可以将我的重复页面视图变成$$$。

在某些方面,这类似于实时操作系统。

一些进程有一个快速传递,并被标记为实时。

他们有保证,他们会在一定的时间内获得资源。 他们不能排队,但他们可以推进! 虽然他们没有使用该车,但其他非实时客人可以使用它。

-Alex

这是很棒的东西。 迪斯尼本质上是两个队列,服务率取决于FASTpass的分布数量。

短FASTpass队列可以被build模为一个总是处于均衡状态的队列。 保持队列的短小化了两个队列之间的反馈 – 这对于随机build模来说是很好的。 另一个队列是一个典型的队列,服务速度较慢。

当然,如果FASTpass配额过大,两个队列之间的反馈会随之而来,使得系统混沌,并且最小化排队模型对结果描述的影响。

另一个策略就是尽量减less用户等待时间,严格按照约定安排乘车时间,这种情况下是纯批量排队,而且容易优化。 我不认为这会在美国工作。 🙂

你不会乘坐更多的游乐设施。 不受欢迎的线路现在比较长,因为有更多的人在等待他们的乘坐通行证成熟时在上面消磨时间。 容量是容量。

“Twitter目前真的很忙,请在15:00到15:15之间回来,我们保证在5秒或更短的时间内得到你的推文。”