使用Python构建一种预约式电梯调控系统

发表于:2022-1-07 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Python进阶者    来源:Python爬虫与数据挖掘

#
Python
分享:
  今天给大家介绍使用Python构建一种预约式电梯调控系统.
  最近在通勤过程中发现电梯系统也是一个有趣的项目,独控电梯也许没有那么大的吸引力,但在群控电梯中的系统设计似乎有趣了起来,如何有效的利用电梯系统内所有电梯将楼宇候梯层的所有乘客准确、省时、舒适的接送至目标层成为了一个可供思考的方向。
  设计平台
  ·windows 10
  · python 3.8
  独立控制电梯系统设计
  群控电梯各电梯间的运行本质来讲就是单个电梯独立运行,从而先设计出独立电梯运行系统,简单来画下流程图:
  通过程序扫描楼宇的所有楼层的上下楼请求,并驱动电梯抵达,完成乘客从请求层到目标层的需求。主要代码贴图:
  def take_elevator(self, elevator_data): 
      """进电梯""" 
      if not elevator_data: 
          return elevator_data 
      elevator_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() 
      while data['weight'].sum() > self.weight and not data.empty:  # 超重 
          weight_max = data[data['weight'] == data['weight'].max()].index 
          data2 = data2.append(data.loc[weight_max, :]) 
          data.drop(weight_max, inplace=True) 
      while len(data) > self.persons and not data.empty:  # 超载 
          weight_min = data[data['weight'] == data['weight'].min()].index 
          data2 = 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') 
      return data2.to_dict(orient='records') 
  为了更好的模拟现实电梯的请求受理状态,构造楼宇类、人物模型类、电梯类、随机生成人物类。
  当电梯内的乘客数大于指定数或者载重大于限定数时,电梯不乘载当前层的乘客。
  人物模型类
  传入所在楼层,去往楼层范围,返回乘坐电梯的人物属性。
  class PeopleRandom: 
      """ 
      构造随机人物模型 
      返回各人物属性值,包含:所在楼层,体重,是否上楼,去往楼层 
      """ 
   
      def __init__(self, floor: int, floors: tuple = (1, 30), people: int = 1): 
          self.floor = floor 
          self.floor_min, self.floor_max = floors 
          self.people = people 
          self.weight = self.set_weight() 
          self.up = random.randint(0, 1) 
          self.floor_go = self.go() 
  随机楼层生成类
  传入楼层范围及该层最大生成人数,返回楼宇所有楼层乘客情况。
  class FloorsRandom: 
      """ 
      随机楼层生成,楼层随机人数生成。 
      """ 
   
      def __init__(self, floor_min: int, floor_max: int, people: int = 6): 
          """ 
          输入的楼层是不存在0层,故而在floor_min进行加1后进行随机取数,如果小于等于0则减去1还原最低楼层。 
          :param floor_min: 最低楼层 
          :param floor_max: 最高楼层 
          """ 
  电梯类
  电梯往返楼层的范围、限重限载、运行方向、电梯内乘客状况。
  class Elevator: 
      """ 
      电梯模型: 
      能够运行到的最低楼层,最高楼层及当前楼层 
      """ 
   
      def __init__(self, floor_min, floor_max, floor: int = 1): 
          self.floor = floor 
          self.go_max = self.floor 
          self.floor_min = floor_min 
          self.floor_max = floor_max 
          self.up = 1  # 1: 电梯上行,0:电梯下行 
          self.weight = 1000  # 电梯限重 
          self.persons = 12  # 电梯限制人员数量 
          self.person_data = pd.DataFrame(columns=['floor', 'weight', 'up', 'floor_go']) 
  楼宇类
  楼宇间电梯运行的楼层范围及候梯乘客情况。
  class BuildingList: 
      """ 
      楼宇模型: 
      最低楼层,最高楼层 
      """ 
   
      def __init__(self, floor_min: int = -1, floor_max: int = 30): 
          self.floor_min = floor_min 
          self.floor_max = floor_max 
          self.data = pd.DataFrame(columns=['floor', 'weight', 'up', 'floor_go']) 
          self.set_data_all('simple') 
  为了简化运算,简化了部分模型的设计,通过随机生成人物模型,电梯在楼宇最高层至最低层往返能够将所有候梯乘客运送至各个指定层。
  设计模型代码已开源:
  https://github.com/lk20200413/FunnyCodeRepository/tree/main/预约式电梯任务系统
  群控电梯系统设计
  群控电梯系统的设计可以有效的缓解各层楼乘客的等待时间及提高电梯内乘客的舒适度。
  就以我自己为例,小区的电梯是独立控制电梯,为了自身能够更早的乘坐电梯,会按下每个电梯的请求按键,就造成了电梯内不同程度的拥挤或延长了其他乘客的等候时间。
  在此次设计前没有查阅相关资料,在整体设计上肯定不如现有的成熟的算法设计,我把这个系统称之为任务系统,应该是有与之对应的更专业的算法。简单来讲,把楼层间请求当做任务,系统整理任务并分发给各个电梯,每过一段时间,系统再次扫描楼宇中的请求,直至没有请求,将每个电梯转换为独立电梯模式,完成电梯内乘客的目的层请求。
  任务系统设计流程图:
  各个电梯执行流程图:

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号