大家好,我是[🌑(这是月球的背面)]。今天给大家介绍一下使用Python搭建一个基于预约的电梯控制系统。最近在上下班途中发现电梯系统也是一个有趣的项目。单独控制的电梯可能没有那么吸引人,但群控电梯中的系统设计似乎很有趣,如何有效地利用电梯系统中的所有电梯,准确、省时、舒适地转移所有候梯楼层的乘客大楼向目标楼层的转变成为了一个思考的方向。设计平台windows10python3.8独立控制电梯系统设计群控电梯每个电梯房运行本质上是单台电梯独立运行,所以先设计独立电梯运行系统,简单画出流程图:扫描所有楼宇通过程序请求上下楼层,并驱动电梯到达,完成乘客从请求楼层到目标楼层的需求。主要代码图:deftake_elevator(self,elevator_data):"""进入电梯"""ifnotelevator_data:returnelevator_dataelevator_data=pd.DataFrame(elevator_data,dtype='int')data=elevator_data[elevator_data['up']==self.up].copy()data2=elevator_data[elevator_data['up']!=self.up].copy()whiledata['weight'].sum()>self.weightandnotdata.empty:#overweightweight_max=data[data['weight']==data['weight'].max()].indexdata2=data2.append(data.loc[weight_max,:])data.drop(weight_max,inplace=True)whilelen(数据)>自我。personsandnotdata.empty:#overloadweight_min=data[data['weight']==data['weight'].min()].indexdata2=data2.append(data.loc[weight_min,:])data.drop(weight_min,inplace=True)self.person_data=self.person_data.append(data)self.update_person_data(data,'sub')returndata2.to_dict(orient='records')为了更好的模拟真实电梯的请求接受状态,建造建筑物,角色模型,电梯,随机生成的角色。当电梯载客量大于规定人数或载重大于限制人数时,电梯将不会在当前楼层载客。人物模型类传到所在楼层,去楼层范围,返回电梯的人物属性。classPeopleRandom:"""构造一个随机角色模型,返回每个角色的属性值,包括:楼层,体重,是否上楼,去楼层"""def__init__(self,floor:int,floors:tuple=(1,30),people:int=1):self.floor=floorself.floor_min,self.floor_max=floorself.people=peopleself.weight=self.set_weight()self.up=random.randint(0,1)self.floor_go=自我。go()随机楼层生成类传入楼层范围和该楼层生成的最大人数,返回建筑物所有楼层的乘客状态。classFloorsRandom:"""随机楼层生成,楼层随机数生成。"""def__init__(self,floor_min:int,floor_max:int,people:int=6):"""输入的楼层没有0层,所以infloor_min加1,然后随机取数,小于等于0,减1,还原最低层。classElevator:"""电梯模型:可以到达的最低楼层、最高楼层和当前楼层"""def__init__(self,floor_min,floor_max,floor:int=1):self.floor=floorself.go_max=self.floorself。floor_min=floor_minself.floor_max=floor_maxself.up=1#1:电梯上行,0:电梯下行self.weight=1000#电梯重量限制self.persons=12#电梯限制人数self.person_data=pd.DataFrame(columns=['floor','weight','up','floor_go'])电梯在建筑物之间运行的楼层范围和乘客候梯状态。classBuildingList:"""建筑模型:最低层,最高层"""def__init__(self,floor_min:int=-1,floor_max:int=30):self.floor_min=floor_minself.floor_max=floor_maxself.data=pd.DataFrame(columns=['floor','weight','up','floor_go'])self.set_data_all('simple')为了简化计算,简化了部分模型的设计。通过随机生成角色模型,电梯在建筑物的最高层和最低层之间来回移动,可以将所有等待的乘客运送到各个指定楼层。设计模型代码已经开源:https://github.com/lk20200413/FunnyCodeRepository/tree/main/预约电梯任务系统群控电梯系统设计群控电梯系统设计可以有效缓解乘客在电梯上的等待时间每个楼层并提高电梯乘客的舒适度。以我自己为例。小区电梯独立控制。为了早点乘电梯,我会按每部电梯的请求按钮,造成电梯内不同程度的拥堵或者延长其他乘客的等候时间。时间。这个设计之前没有查阅相关资料,整体设计肯定不如现有的成熟算法设计。我把这个系统叫做任务系统,应该会有比较专业的算法与之对应。简单来说,就是把层间请求当做任务,系统把任务整理出来,分发给各个电梯。一段时间后,系统再次扫描大楼内的请求,直到没有请求为止,将每部电梯转换为独立的电梯模式,完成电梯内部。乘客的目的地请求。任务系统设计流程图:每部电梯执行流程图:流程图比较粗略,大家慢慢看。任务系统采用距离优先的方式进行代码设计。由于文章篇幅,相关代码部分不方便展示。可以移步这里https://github.com/lk20200413/FunnyCodeRepository/tree/main/reservation电梯任务系统或者联系作者索取代码,TaskSystem.py是任务系统设计模块,相关类的调用遵循独立电梯设计。总结大家好,我是[🌑(这是月球的背面)]。通过使用Python设计一个基于任务的预约电梯系统,本文对独立电梯向群控电梯的转换有了更深入的理解。对于多线程运行,本次设计简化了时间因素,用跳楼代替了电梯之间的运行差异。世间任何美好的事物都值得我们留恋,我们不能因为眼前的不堪而放弃追求梦想的权利!
