電梯排程演算法( )

2022-07-28 01:15:13 字數 2789 閱讀 5998

今天我們做的是乙個結對程式設計作業,其實對結對程式設計,我也有兩種看法,第一:提高自己,第二:埋沒自己。關鍵看是如何去利用結對程式設計,才能達到事半功倍的效果。這次我們做的是乙個關於電梯控制排程的程式,這個程式的演算法思想做了一天,初步有了電梯排程演算法的框架。由於電腦換了,拿到聯想服務站維修,只在3月9日,初步了解了一下電梯系統執行的構架。具體安排,暫時還未公布。

(結對人員蘇林東&吳威)

題目:試想一下,我們正在構建乙個高大的辦公樓,它有大約電梯配置如下:大廈有

21層, 

4部電梯,很多乘客使用這些電梯的日常(旅客重量:平均

70公斤最大

120公斤,最小

45公斤)。

其他常量資料:電梯速度,開

/關門時間,乘客的時間要在

/走出電梯。

電梯名稱

停靠層數

乘客限制

重量限制

1

所有樓層

10

800 kg

2

所有樓層

10

800 kg

3

所有樓層

20

1600 kg

4

所有樓層

20

2000 kg

想先來談一下大概的思路:

電梯外部是乙個總控制台,但它只有上和下的按鈕(最底層只有上,最高層只有下)它負責尋找合適的電梯進行排程,找到合適的電梯之後,可以控制這個電梯,並把電梯資訊傳給內部控制器進行控制。當電梯外部按下樓層上或下鍵時,相當於同時按下四部(這裡有四部電梯)電梯,這個時候從四部電梯中排程一部進行響應,具體演算法是,選擇當前沒有在執行,或者執行方向與按鈕方向相同的並且要經過此樓層的電梯,如有一部,便調這個電梯,若有多部,那麼就選擇在滿足上面條件下與所處樓層最接近的一部電梯。如果沒有,則選擇等待。當電梯內部按下乙個樓層按鈕的時候,當電梯停止或者同向可以到達的時候,系統把這個樓層設定為要停靠樓層,當電梯不符合條件是,則等待,到達目標後才執行這個任務。(舉例:如果乘客在5層,而現行目標是10層,可乘客又按下了3層,那麼這個電梯先上10層,再下第三層)。

(1)需求分析

①、模擬21層樓的電梯系統。該樓有乙個自動電梯,能在每層停留。樓層由下至上依次稱為地下層、第一層至第二十層,其中第一層是大樓的進出層,即是電梯的「本壘層」,電梯「空閒」時,將來該層候命。樓層從下到上的編號為:0-20。除了地下層外,每一層都有乙個要求向下的按鈕除了第二十層外,每一層都有乙個要求向上的按鈕。對應的變數為:callup[0..19]和calldown[1..20]。電梯內的21個目標層按鈕對應的變數為:callcar[0..20]。

②、電梯一共有七個狀態,即正在開門(opening)、已開門(opened)、正在關門(closing)、已關門(closed)、等待(waiting)、移動(moving).

③、 乘客可隨機地進出於任何層。對每個人來說,他有乙個能容忍的最長等待時間,一旦等候電梯時間過長,他將放棄。對於在樓層內等待電梯的乘客,將插入在等候佇列裡,每一層有兩個等候佇列,一隊要求向上,一隊要求向下,用鏈佇列來實現。對於在電梯內的乘客,用四個乘客棧來實現,該乘客要去哪一層,就把他放在相應編號的棧中,對應變數為elestack[0…3]。

④、模擬時鐘從0開始,時間單位為0.1秒。人和電梯的各種動作均要耗費一定的時間單位(簡記為t):

有人進出時,電梯每隔40t測試一次,若無人進出,則關門

關門和開門各需要20t

每個人進出電梯均需要25t

電梯加速需要15t

上公升時,每一層需要51t,減速需要14t

下降時,每一層需要61t,減速需要23t

如果電梯在某層靜止時間超過300t,則駛回1層候命。

⑤、按時序顯示系統狀態的變化過程:發生的全部人和電梯的動作序列。

(2)演算法分析   

我們將電梯分為三種狀態,第一種狀態,正在向下行使中,第二種狀態,正在向上行駛中,第三種狀態,處於停止中。由於第一種狀態與第二種狀態類似,因此,我們下面只討論第一種和第三種狀態是對電梯的排程。

①、對於第一種狀態(正在向下),分為有人與沒人兩種情況。

當第一種狀態的電梯裡(即正處於向下行使)有人時,那麼電梯向著最近的目標駛去,如果此時中途有人(即當前層和目標層之間)有向下的請求且電梯可以到達,那麼改變電梯的目標層,使電梯在有人請求層處停止。

當第一種狀態的電梯裡(即正處於向下行使)沒人時,假設此時的電梯所在的層數為i,那麼搜尋 i-1到0層間是否有向下的請求,如果有那麼將最近的乙個請求所在樓層設為目標層,如果沒有,那麼在搜尋0到i-1層間是否向上的請求,如果有將最遠的乙個請求所在的樓層設為目標。

第二種情況與第一種類似,所以不再敘述。

對於第三種情況的電梯即處於開門狀態或者處於關門但是沒有明確目標的電梯。同樣分為有人與沒人兩種狀態,若有人,那麼找到這些人想去的最近的目標,若沒人將目標設為整個樓層中請求最早的地方。

這就是演算法的大體思路。

(3)結構模組化設計

暫時還沒完成。

電梯排程演算法

在高峰時間,實習生小飛常常會被電梯每層樓都停弄得很不耐煩,於是他想出了這樣乙個辦法 由於樓層並不高,那麼在繁忙的時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層樓後,電梯聽下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓時,每個乘客選擇自己的目的層,電...

電梯排程演算法 C

1.演算法解析 掃瞄演算法 scan 又稱電梯排程演算法,scan演算法是磁頭前進方向上的最短查詢時間優先演算法,它排除了磁頭在盤面區域性位置上的往復移動,scan演算法在很大程度上消除了sstf演算法的不公平性,但仍有利於對中間磁軌的請求。電梯排程演算法是從移動臂當前位置開始沿著臂的移動方向去選擇...

簡化電梯排程演算法

github 編寫程式的 行數 除錯的bug數 完成該次作業總耗時 245 265行 10 20個 12 15h elevator scheduling a策略 選取當前 向上 向下 停靠 三類行動中讓另外兩類行動的乘客等待時間最小的乙個 a.cpp b策略 估計三種行動的耗時,採用預估耗時最少的 ...