<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你使用Python構建一種預約式電梯調控系統(tǒng)

          共 7623字,需瀏覽 16分鐘

           ·

          2024-08-05 12:53

          點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關注

          回復“書籍”即可獲贈Python從入門到進階共10本電子書

          乘興南游不戒嚴,九重誰省諫書函。

          大家好,我是【??(這是月亮的背面)】。

          今天給大家介紹使用Python構建一種預約式電梯調控系統(tǒng),目錄如下:

          • 設計平臺

          • 獨立控制電梯系統(tǒng)設計

            • 人物模型類

            • 隨機樓層生成類

            • 電梯類

            • 樓宇類

          • 群控電梯系統(tǒng)設計

          • 總結


          最近在通勤過程中發(fā)現(xiàn)電梯系統(tǒng)也是一個有趣的項目,獨控電梯也許沒有那么大的吸引力,但在群控電梯中的系統(tǒng)設計似乎有趣了起來,如何有效的利用電梯系統(tǒng)內所有電梯將樓宇候梯層的所有乘客準確、省時、舒適的接送至目標層成為了一個可供思考的方向。

          設計平臺

          • windows 10
          • python 3.8

          獨立控制電梯系統(tǒng)設計

          群控電梯各電梯間的運行本質來講就是單個電梯獨立運行,從而先設計出獨立電梯運行系統(tǒng),簡單來畫下流程圖:通過程序掃描樓宇的所有樓層的上下樓請求,并驅動電梯抵達,完成乘客從請求層到目標層的需求。主要代碼貼圖:

          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')

          為了更好的模擬現(xiàn)實電梯的請求受理狀態(tài),構造樓宇類、人物模型類、電梯類、隨機生成人物類。
          當電梯內的乘客數(shù)大于指定數(shù)或者載重大于限定數(shù)時,電梯不乘載當前層的乘客。

          人物模型類

          傳入所在樓層,去往樓層范圍,返回乘坐電梯的人物屬性。

          class PeopleRandom:
              """
              構造隨機人物模型
              返回各人物屬性值,包含:所在樓層,體重,是否上樓,去往樓層
              """


              def __init__(self, floor: int, floors: tuple = (130), 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(01)
                  self.floor_go = self.go()

          隨機樓層生成類

          傳入樓層范圍及該層最大生成人數(shù),返回樓宇所有樓層乘客情況。

          class FloorsRandom:
              """
              隨機樓層生成,樓層隨機人數(shù)生成。
              """


              def __init__(self, floor_min: int, floor_max: int, people: int = 6):
                  """
                  輸入的樓層是不存在0層,故而在floor_min進行加1后進行隨機取數(shù),如果小于等于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  # 電梯限制人員數(shù)量
                  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/預約式電梯任務系統(tǒng)

          群控電梯系統(tǒng)設計

          群控電梯系統(tǒng)的設計可以有效的緩解各層樓乘客的等待時間及提高電梯內乘客的舒適度。

          就以我自己為例,小區(qū)的電梯是獨立控制電梯,為了自身能夠更早的乘坐電梯,會按下每個電梯的請求按鍵,就造成了電梯內不同程度的擁擠或延長了其他乘客的等候時間。

          在此次設計前沒有查閱相關資料,在整體設計上肯定不如現(xiàn)有的成熟的算法設計,我把這個系統(tǒng)稱之為任務系統(tǒng),應該是有與之對應的更專業(yè)的算法。簡單來講,把樓層間請求當做任務,系統(tǒng)整理任務并分發(fā)給各個電梯,每過一段時間,系統(tǒng)再次掃描樓宇中的請求,直至沒有請求,將每個電梯轉換為獨立電梯模式,完成電梯內乘客的目的層請求。

          任務系統(tǒng)設計流程圖:各個電梯執(zhí)行流程圖:
          流程圖畫得比較粗糙,煩請各位將就著看。任務系統(tǒng)采用距離優(yōu)先進行代碼設計,限于文章篇幅設計不方便展示有關代碼部分,可移步至

          https://github.com/lk20200413/FunnyCodeRepository/tree/main/預約式電梯任務系統(tǒng)

          此處或聯(lián)系作者索取代碼,TaskSystem.py為任務系統(tǒng)設計模塊,相關類的調用均沿用獨立電梯設計。

          總結

          大家好,我是【??(這是月亮的背面)】。本文通過用Python設計一種任務型預約電梯系統(tǒng),更深刻地理解了獨立電梯轉換為群控電梯不單單是電梯的簡單組合,整個電梯系統(tǒng)設計因素應該以時間運行為主,將各個電梯拆分為多線程運行,在本設計中簡化了時間因素,用跳過樓層替代各電梯間的運行差異。

          世界上任何美好的事物都值得我們去留戀,不應該因為當下的不堪而放棄了追逐夢想的權利!


          于二零二一年十二月二十九日作

          小伙伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探討學習。

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點贊,留言,轉發(fā),轉載,感謝大家的相伴與支持

          想加入Python學習群請在后臺回復【入群

          萬水千山總是情,點個【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺来也图片区视频区 | 精品国产91乱码一区二区三区 | 日韩插插网 | 操逼热在线观看 | AA黄色毛片|