最早發現這個問題的時候是兩年前在杭州。當時住在一個蠻高端的叫翡翠城的小區,樓里有兩部電梯。
觀察一段時間你會發現,兩部電梯在很長時間沒人乘坐后,它不會全部停在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層。