当前位置: 首页 > 后端技术 > Python

用代码求解电梯最佳停靠位置

时间:2023-03-26 18:31:26 Python

大家好,我是查理最近回家坐电梯,突然想起电梯最佳停靠位置。这个问题最早是两年前在杭州发现的。那时候我住在一个很高档的小区,叫翡翠城,楼里有两部电梯。观察一段时间后会发现,两部电梯在长时间无人乘坐后,并不会全部停在一楼,而是一部在一楼,一部在中间大楼的。比如那栋楼有16层,我经常早上醒来发现一部电梯在一楼,一部在八楼。当时我就在想,这样做的目的是什么?是为了让住得比较高的业主能更快的上电梯吗?如果是这样,中间停一个,一楼停一个是不是最科学的方法?让我们从只有一部电梯的情况开始。我们假设大楼有n层,人去每一层的概率是一样的,从x楼下到1楼的概率也是一样的。假设电梯的停止位置为p,那么可以推导出,当p等于1时,总成本最低(所有人上下楼时,电梯运行的总楼层数)。当有两部电梯时,情况就复杂得多,很难通过不等式进行推理。使用程序模拟,代码如下:importsysfrommathimport*#topfloorN=10#elevatornumberM=3defdistance(src,dest,elevator):returnmin(map(lambdax:abs(x-src),elevator))+abs(src-dest)#sumditancedefup_down(elevator):sum=0foriinrange(1,N+1):sum+=distance(1,i,elevator)sum+=distance(i,1,电梯)returnsum#elevatorposdefyield_elevator(m):if(m==1):foriinrange(1,N+1):yield[i]else:foreleinyield_elevator(m-1):foriinrange(ele[-1],N+1):yieldele+[i]min_dis=sys.maxintforeleinyield_elevator(M):dis=up_down(ele)if(dis