小組成員:付亞飛 段興林
這次的結對專案是關於電梯排程演算法的實現,要實現電梯排程的最佳演算法,平均總旅行時間越低越好。
電梯一般分為三種情況,電梯正在向下運動,正在向上運動或者處於停止中。由於第一種狀態與第二種狀態類似,我們組只討論了第一種和第三種狀態。
對於第一種狀態即電梯正在向下運動,大概思路如下:除底層和頂層只有乙個按鈕外,每個樓層有兩個按鈕,分別指示上樓和下樓請求,當按下後,按鈕燈亮,實時監控程式負責判斷乘客的上下樓請求是否與電梯的當前運動方向一致,若不一致,則暫不受理此請求;若一致,讓電梯平穩地停在此層樓的電梯入口處,讓相應的乘客入電梯,而後繼續朝原方向運動。若同時有兩層或兩層以上的樓發出請求,產生了衝突,則監控器呼叫衝突處理器進行抉擇,受理其中的乙個請求。這種情況還可以細分為有人與沒人兩種情況。
當第一種狀態的電梯裡有人時,那麼電梯向著最近的目標樓層駛去,如果此時中途有人有向下的請求且電梯可以到達,那麼改變電梯的目標樓層,使電梯在有人處停止。
當第一種狀態的電梯裡(即正處於向下運動)沒人時,假設此時的電梯所在的層數為i,那麼搜尋 i-1到0層間是否有向下的請求,如果有那麼將最近的乙個請求所在樓層設為目標,如果沒有,那麼在搜尋0到i-1層間是否向上的請求,如果有將最遠的乙個請求所在的樓層設為目標。
第二種情況與第一種類似,再此不做多述。
對於第三種情況的電梯即處於開門狀態或者處於關門但是沒有明確目標的電梯。同樣分為有人與沒人兩種狀態,若有人,那麼找到這些人想去的最近的目標樓層,若沒人將目標樓層設為整個樓層中請求最早的地方。
我們的演算法功能不是很強大,當處理多台電梯怎麼分配任務時我們是這麼處理的,比如,1,3號電梯都正向上走它們處於7層以下,若此時7,9層有向上的請求,那麼我們將第7層的請求分給離7層最近的電梯,比如為1,那麼就會將9層的響應分給3。在分配時我們採取最近的判斷標準,誰離得近就將任務分配給誰。
還有乙個最重要的地方,就是超重的問題,比如如果電梯載重達到極限,那麼電梯就不再響應乘客的請求了,除非有人走下電梯。
經過乙個星期的奮鬥,我們終於把介面大致做出來了,雖然不太好看,但基本滿足課題的要求,截圖如下:
程式設計流程:
最高層數
新增電梯停時響應事件
x樓上行請求
剩餘負載
取消電梯停時響應事件
x樓下行請求
執行方向(上、下、靜止)
e電梯內有乘客請求去y樓
能否到達x樓
開往x樓
開往(靜止時:上、下)
設定開往方向(上、下)
在功能實現上,主要是靠下面的**實現的:
public這是我們組完成專案的時間安排:class elevatorthread extends
thread
public
void setthreadid( int
i )
public
synchronized
void adddest( int
dest )
public
synchronized
void adddestnotify( int
dest )
public
void
run()
status = true
;
system.out.println("thread " + threadid + " begin to run");
while( !destset.isempty() )
else
system.out.println("thread " + threadid + " now at " +curpos );
sleep(500);
integer =(integer)destset.first();
dest =(integer).intvalue();
}//電梯開門, 乙個目標樓層已到達
system.out.println("thread " + threadid + " arrive at " + curpos + " floor");
destset.remove(integer);
tubepanel.opendoor();
sleep(2000);
}tubepanel.allunload();
//如果所有的目的樓層都經過了, 則電梯的狀態為全部解除安裝
status = false
; }
catch
( interruptedexception e)}}
}
小飛的電梯排程演算法
程式設計之美 第1.8節 小飛的電梯排程演算法 假設樓層共有n層,電梯停在第x層,要去第i層的乘客數目總數為total i 所爬樓梯的總數就是sum,求使得這個和最小的x的值,即電梯停的樓層數。stop1函式是o n 2 的演算法,就是假設在每層樓停下,計算此時需要爬的樓梯數,如果比最小的少,則賦值...
小飛的電梯排程演算法
1 問題描述 某大廈一共有6部電梯,在高峰時間,每層都有人上下,電梯在每層都停,實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層不太高,每次電梯往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的...
1 8 小飛的電梯排程演算法
題目 有一棟樓,現在設計一種電梯排程演算法 電梯在一樓讓大家上電梯,然後根據大家選擇要到的樓層算出某一樓層i,電梯在i層停下讓所有人下電梯,然後大家爬樓梯達到自己的樓層。請問電梯停在哪一層,可以使得這一次的所有乘客爬樓層之和最短?一 最直接最簡單的方法就是直接列舉從第一層到最後一層,然後算出電梯停在...