電梯調度模擬系統

電梯調度模擬系統

Elevator Attemper Simulation System(EASS)

設計開發者:夏斯華

1.調度描述:

實現電梯調度算法如下:

1.  初始狀態在一樓。內外部沒有請求,則保持原先狀態。

2.  外部請求發出,放在請求列表中。定時分配:

 a>.讀取當前各電梯狀態(運動狀態、所在樓層)

 b>.同方向、路徑最短.(除去 同方向需要折回情況)

 c>.同方向不符和,則取停止電梯中路徑最短的那個。修改該電梯目標列表.

 d>.此時沒有符合要求的。則進入下一個循環。

3.  內部請求。下一個請求需要在電梯路徑上,不允許折回。否則不響應.

4.  開門一直按着電梯會停着不動。電梯移動需要關上門。

2.開發環境:

1.       Eclipse 3.0 M8(打上VE插件)(Sun JDK1.4.0_4).

2.       Windows Xp profession Sp1.

3.設計方案:

基於上面算法調度,基本實現現實中的電梯運作樣子。有各個電梯運行狀態的顯示。外部、內部乘客的請求以及對其合理的分配。

利用了java語言裏的多線程機制,模擬了現實中電梯運行和處理請求的並行性。

 

其實實際運行時,系統有很多的線程運作。對於我實現的程序就有如上的線程。這些線程協同工作完成整個系統的需求。利用了java 面向對象性高一點再加上實現起來比較容易(相對於VC++,當然也可以採用VC SDK+DirectX9.0b有更美觀效果或者 MFC6.0)。於是採用之。

考慮了老師的要求,警鈴本來想做的,可以消除外部對該電梯的請求,讓需求列表重新分配。還有考慮了讓電梯更加智能,如採用將一天時間分段,各段處理請求不一樣。如人少,就儘量電梯少從停-à動。人多的時候儘量將所有電梯都用上。當然,我跟同學還考慮了現實中是否有無聊之人暫着電梯門口不走動如何處理等等。不過,精力有限,況且主要是想體驗一下多線程的妙處,所有在算法上沒有太多的深入。

4.程序設計:

其實與其說是在解決什麼調度不如說又一次鍛鍊了編程能力。花了好幾天,五一節一直關注着她。

不過終於將自己預想的給實現了,不是最好,但在編程的過程中,體會良多。由於我是一個歷史的人,喜歡將一些記錄下來,老師歲沒講要寫這部分。自我覺得有必要。

1.  第一次使用了 觀察者設計模式。之前對設計模式瞭解一些,什麼最簡單的工廠模式,單例模式。以前也用過,沒什麼。這次我要實現主控制與子線程(電梯線程)之間的通線。當然可以那樣,主線程在之線程內部創建,作爲其成員變量。大多人應該是這樣做的。或許還有人那樣做,將狀態量和一些請求列表放在 靜態類裏面(有點象 全局變量)。我採用了上面講的模式,雖然有點麻煩。但是體驗了一翻覺得還可以。(參見類ElevatorArithMainControler)。

2.  第一次用VE(可視化編輯器)設計界面(Swing/JFC.(參見OuterElevatorPaneOuterElevatorDialogInnerElevatorPaneInnerElevatorDialogMainFrameExpDialogElevatorPane)

3.  自己設計了好多的小類:StaticRequestList(靜態請求列表)、ElevatorState、(電梯狀態)、Mycomp(用於排序用的繼承於Comparator)、DisResponse(分配外部任務響應)CRequestList(請求格式)

4.  ElevatorThread,電梯線程,裏面Run,實現了各個電梯的運行顯示。對每個內部請求的響應。響應外部房在了ElevatorArith中。

5.  電梯運動效果:Thread.sleep(時間).實現延遲。我在主框架裏有一個 Timer(時間,事件監聽器).

6.  對數據類型有了無數次的轉化,判斷條件的繁多。

 

發佈了9 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章