这篇文章主要介绍了计算机编程语言模拟简单电梯调度算法,涉及计算机编程语言线程、队列、时间延迟等相关操作技巧,需要的朋友可以参考下
本文实例讲述了计算机编程语言模拟简单电梯调度算法。分享给大家供大家参考,具体如下:
经常在公司坐电梯,由于楼层较高,是双联装的电梯,但是经常等电梯很久,经常有人骂写电梯调度算法的。回来闲来无事,自己尝试写了一个简单的。
场景很简单,每一层电梯口只有一个按钮,不区分上下,当有人按下这个键后,电梯会过来停在此层,这个人可以进去,并选择自己想去的层。电梯的调度策略也很简单,在一次向上的过程中,如果有人在下面按了键,电梯并不直接向下,而是运行到此次向上的最顶层,然后再下次向下运行的过程中去服务这个请求。
电梯。巴拉圭
导入时间
从麦卡进口麦卡
电梯等级:
def __init__(自身,层):
自建_层=层
self.direction='up '
self.cur_layer=1
self.up_queue=myque()
self.down_queue=myque(True)
self.switcher='open '
定义停止(自我):
self.switcher='停止'
定义按钮按钮(自身,层,方向=无):
if self.cur_layerlayer:
self.down_queue.insert(层)
elif self.cur_layerlayer:
self.up_queue.insert(层)
否则:
if self.direction=='up ':
self.down_queue.insert(层)
否则:
self.up_queue.insert(层)
定义句柄_队列(自身,方向):
自我方向=方向
如果方向=='向上:
inc=1
否则:
inc=-1
que=getattr(self,direction '_queue ')
while que.length():
while self.cur_layer!=que.front():
print '/nelevator in ',self.cur_layer
时间。睡眠(1)
self.cur_layer=inc
打印'/电梯到达,自弯曲层
que.pop_front()
定义运行(自身):
while self.switcher=='open ':
if self.up_queue.empty()和self.down_queue.empty():
'''电梯正在等待,停在一层' ' '
时间。睡眠(1)
继续
'''上去' ' '
self.handle_queue('up ')
'''下去' ' '
self.handle_queue("关闭")
myque.py
导入线程
麦卡类:
def __init__(self,reverse=False):
自我模式=反向
self.buf=[]
自锁=线程。锁定()
定义插入(自身,对象):
self.lock.acquire()
self.buf.append(object)
self.buf.sort(反向=self.mode)
self.lock.release()
定义前端(自身):
返回self.buf[0]
def pop_front(自身):
self.lock.acquire()
self.buf.pop(0)
self.lock.release()
定义长度(自身):
self.lock.acquire()
size=len(self.buf)
self.lock.release()
退货尺寸
定义空(自身):
self.lock.acquire()
size=len(self.buf)
self.lock.release()
返回大小==0
部署。巴拉圭
导入线程
从电梯进口电梯
定义初始化电梯(建筑层数):
e=电梯(建筑层数)
t=螺纹。线程(目标=e.run)
t.setDaemon(True)
启动()
返回(英,t)
def main():
myelevator,ctl_thread=init_elevator(17)
虽然正确:
str=raw_input('输入有效层:')
尝试:
layer=int(str)
例外情况除外:
if str=='quit ':
myelevator.stop()
ctl_thread.join()
破裂
否则:
打印"无效输入",字符串
继续
如果图层不在范围内(1、myelevator.building_layers 1):
继续
myelevator.push_button(层)
if __name__=='__main__ ':
主()
运行结果如下:
如果扩展的话,很容易将各层的按钮扩展为带上下指示的。如果有机会可以扩展为多联装电梯,并将调度算法做的更加智能,可以根据历史数据和时间进行动态调整。
更多关于计算机编程语言相关内容感兴趣的读者可查看本站专题: 《Python数据结构与算法教程》 、 《Python编码操作技巧总结》 、 《Python函数使用技巧总结》 、 《Python字符串操作技巧汇总》 及《Python入门与进阶经典教程》
希望本文对Python编程有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。