2011-05-29 40 views
1

我正在使用電梯仿真的設計。我有一個電梯控制器和一系列升降機。升降機在特定狀態(例如STATIONARY,MOVING,DOORS_OPEN等)中移動。 - 在MOVING狀態下,升降機過程將簡單地休眠X毫秒。我目前主要關注電梯控制器過程和電梯過程集合之間的交互。另一個電梯(電梯)仿真建模問題

本質上,電梯控制器需要協調電梯,因此需要發出電梯請求並確定哪個電梯最適合服務該請求,然後通知該電梯。

我最初的想法是讓每個電梯在樓層請求收據上移動通過各種狀態,然後在電梯控制器完成移動到特定樓層後通知電梯控制器。然而,通過這樣的設計,電梯控制器可以查詢電梯以查看其附近的哪個樓層,對該電梯做出決定(即,停在下一層樓),但是當它告訴電梯停止時,電梯可能有移動過去的那一層(由於說網絡點而延遲)。

爲了避免這些類型的問題(電梯控制器根據過時信息做出決定),我想讓電梯控制器負責將每個電梯的狀態移動。通過這個模型,電梯控制器知道電梯處於什麼狀態,告訴它進行轉換,然後知道後面會處於什麼狀態。因此,電梯控制器始終具有電梯正在執行的最新信息,其動作永遠不會與各個電梯狀態不同步。

人們對這種類型的方法有任何的擔憂(線程,可伸縮性)嗎?有沒有更好的建模方法?思想歡迎!

+0

爲什麼你想首先使用多線程?聽起來像是不必要的複雜性,除非你真的需要表現。 – CodesInChaos 2011-05-29 21:20:19

+0

多線程,因爲這是它在實踐中的工作方式 – 2011-05-30 06:36:32

回答

1

基於您決定構建更復雜的電梯控制器的關鍵詞是某些電梯可能已移過控制器預期的狀態。我認爲這些「事件」的頻率很低,對系統有效性的負面影響也是如此。我會保持簡單,並樂觀地採取行動。預計電梯會有很好的響應,但是(如果真的有必要)偶爾會處理電梯沒有按照應該做的事情處理情況,和/或選擇另一個電梯。

1

即使將所有控制權移至提升控制器,同步問題仍會在別處出現。例如,如果控制器在電梯運輸過程中發送信息,則控制器無法100%準確地知道收到信息時電梯將處於什麼樓層。

我認爲你最好的做法是堅持面向對象的設計最佳實踐,並專注於關注的邏輯分離。即。讓升降機擔心與升降機相關的問題,並讓控制器擔心安排。

升降機的命令可以發出,使升降機確認他們是否可以執行請求的動作。在這種情況下,您需要設計調度算法,以便控制器不會知道請求是否會在請求發生後的幾分鐘之內執行 - 如果控制器正在執行路由/調度,這應該沒問題。

當然,這一切都取決於您需要模擬的真實性。

+0

關於第一點,我想讓電梯通知每層樓的電梯控制器已到達,然後才繼續,直到電梯控制器確認爲止。誠然,這是額外的複雜性(增加了一點抖動),但電梯控制器使用靜態信息做出決定..我喜歡你關於良好OO設計的觀點 - 這非常有道理 – 2011-05-30 06:41:08

+0

@DaveSturgeon謝謝。關於有電梯等待控制器確認每個樓層。這是因爲你想要控制器總是「正確」?我同意讓控制器自行糾正會更加複雜,但是這也會導致有趣的解決方案......如果控制器可能是錯誤的,那麼決策就會變成概率性的,並且控制器可能會處理新的信息(即有人稱之爲電梯)更優雅。你可能想看看[在線算法](http://en.wikipedia.org/wiki/Online_algorithms)。 – Colin 2011-05-30 17:15:48

+0

是的,有了最新的信息,電梯控制器應該能夠做出最好的決定。所以本質上,電梯控制器主要是一個根據請求和當前電梯狀態作出決定的循環。在每次迭代中,它將其中一個電梯推進到一個新的狀態,這將使整個系統更接近當前請求隊列的要求。你提到的在線算法看起來很有趣 - 感謝這個指針 – 2011-05-30 19:20:40