,,Python模拟简单电梯调度算法示例

,,Python模拟简单电梯调度算法示例

这篇文章主要介绍了计算机编程语言模拟简单电梯调度算法,涉及计算机编程语言线程、队列、时间延迟等相关操作技巧,需要的朋友可以参考下

本文实例讲述了计算机编程语言模拟简单电梯调度算法。分享给大家供大家参考,具体如下:

经常在公司坐电梯,由于楼层较高,是双联装的电梯,但是经常等电梯很久,经常有人骂写电梯调度算法的。回来闲来无事,自己尝试写了一个简单的。

场景很简单,每一层电梯口只有一个按钮,不区分上下,当有人按下这个键后,电梯会过来停在此层,这个人可以进去,并选择自己想去的层。电梯的调度策略也很简单,在一次向上的过程中,如果有人在下面按了键,电梯并不直接向下,而是运行到此次向上的最顶层,然后再下次向下运行的过程中去服务这个请求。

电梯。巴拉圭

导入时间

从麦卡进口麦卡

电梯等级:

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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: