大家好,我是查理
最近回家坐电梯,突然又想起电梯的最佳停靠位置。
最早发现这个问题的时候是两年前在杭州。当时住在一个蛮高端的叫翡翠城的小区,楼里有两部电梯。
观察一段时间你会发现,两部电梯在很长时间没人乘坐后,它不会全部停在1层,而是一部在一层,另一部在楼的中间位置。比如那栋楼有16层高,经常在早上起来发现,电梯一部在1层,另一部在8层。
当时就在想,这么做的目的是什么?是为了让相对住在高层的业主能更快的坐到电梯?如果是这样,那这种一部停在中间,一部停在1层是不是最科学的方式?
先从只有一部电梯的情况开始分析。
我们假设楼有n层,到每一层去的人的概率是一样的, 同时从第x层下到1层的概率也是一样的。假设电梯的停靠位置是p,那么可以推出当p等于1的时候,总的代价最低(全部人上楼,下楼电梯运行的总楼层数)。
当有两部电梯的时候,情况要复杂很多,很难通过不等式来推理。
使用程序模拟,代码如下:
import sys
from math import *
#top floor
N = 10
#elevator number
M = 3
def distance(src, dest, elevator):
return min(map(lambda x : abs(x-src), elevator)) + abs(src-dest)#sum ditance
def up_down(elevator):
sum = 0
for i in range(1, N+1):
sum += distance(1, i, elevator)
sum += distance(i, 1, elevator)
return sum
#elevator pos
def yield_elevator(m) :
if (m == 1):
for i in range(1, N+1):
yield [i]
else:
for ele in yield_elevator(m-1):
for i in range(ele[-1], N+1):
yield ele + [i]
min_dis = sys.maxint
for ele in yield_elevator(M):
dis = up_down(ele)
if (dis < min_dis):
min_dis = dis
res = [ele, dis]
print res
结果很有意思,并不是当时小区的设计方案。
而是应该:一部在1层,另一部在2/3楼层处位置。假设楼有24层,那么一部电梯应该停在1层,另一部停在16层。
【用代码解出,电梯停靠的最佳位置】当一栋楼有三部电梯时:第一部应该停在1层,第二部停在2/5位置处,第三部停在4/5位置处。假设楼有100层,那么第一部在1层,第二部在40层,第三部在80层。
推荐阅读
- [抬抬小手学Python]-Python基础
- 实战|Python轻松实现地图可视化(附详细源码)
- 手写一个 Python "病毒"
- 保姆级教学,手把手教你用Python爬虫(附详细源码)
- 用Python制作一个B站视频下载小工具
- 用Python分析广州房地产市场
- 【抬抬小手学Python】yolov3代码和模型结构图详细注解【图文】
- 【小手一抬学Python】Socket套接字编程Python
- #抬抬小手学Python# Python Poetry 进行依赖管理【图文】
- #小手一抬学Python# Python字典已经掌握了【附源码】