電梯控制演算法
電梯在空閒狀態時,停靠的情況有2種:原處停靠、固定樓層停靠。
原處停靠很簡單,停到哪了就是哪,而固定樓層停靠,一般是為了節約乘客平均等待電梯時間。
樓層均值分析:
一般情況下,乘電梯是2種情況,1到k 或者 k到1,起點和終點都不是1樓的情況很少。
更進一步,**均衡,1樓的等待乘客數等於其他樓層等待乘客數(此處數目指的的數學期望,下同)。
假設2到n的等待乘客數分別為1,那麼一樓的等待乘客數為n-1
假設停靠樓層為m,那麼電梯去接第乙個乘客的接客距離為
(n-1) * abs(m-1) + abs(m-2) + abs(m-3) + ...... + abs(m-n) ,忽略常數,下同
abs表示絕對值,很明顯,這個式子在m=1或2時取到最小值,所以電梯停靠在1樓或者2樓是可以達到乘客平均等待電梯時間最短的目的的。
ps: 這裡只考慮當電梯空閒,第一位乘客等待電梯的情況。
固定停靠的樓層,也可以採取複雜的策略而定,而不是一直保持乙個固定的數字。
比如,按照時間,小區早高峰是下樓上班,晚高峰是下班上樓,公司中午12點是下樓吃飯高峰,12點20分是吃完飯上樓高峰,等等。
對於下行高峰,如果按照前面的邏輯,一共n層樓的話,停靠在n/2層樓貌似是最優解。
然而,光考慮第一位乘客等待電梯的情況,或許還不是最優方案。
存在這麼一種情況,加入電梯空閒停靠在5樓,此時7樓使用者按了電梯下行按鈕,電梯就上行去7樓接乘客,然而此時9樓又按了電梯下行按鈕,那麼電梯就會先去9樓,下行時經過7樓才開門接7樓乘客。如果一開始電梯停靠在8樓,那麼電梯就會直接去7樓接乘客下行到1樓,然後才上行到9樓接乘客。
很明顯,2種情況下的電梯利用率是不一樣的,乘客的等待時間也是不一樣的。
所以,對於下行高峰,相比於停靠在n/2層樓,停靠在更低的樓層或許是更好的方案。
假設電梯處於空閒狀態停靠在m層,此時 i 層有乘客按電梯下行,緊接著 j 層立馬也有人按電梯下行,那麼電梯把倆乘客都送到1樓需要多久呢?平均停靠在哪一層可以最快的把2名乘客都送到1樓?
列舉一下n從3到30的結果:
int main()
return 0;
}
3 1
4 15 1
6 27 2
8 29 2
10 2
11 3
12 3
13 3
14 3
15 4
16 4
17 4
18 4
19 4
20 5
21 5
22 5
23 5
24 6
25 6
26 6
27 6
28 7
29 7
30 7
讓我們用程式設計驗證一下e求解的過程對不對。
int gete(int n, int m)
int main()
return 0;
}
3 3
4 45 5
6 67 7
8 89 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
結果不一樣!
我們把e關於m的三次函式畫出來大概是這樣:
前面求出來的那個是極值點,但還不是最小值。
所以對於下行高峰,如果只考慮盡快把乘客都送到1樓,空閒停靠選擇最高層是最優的。
如果要同時考慮電梯外乘客等待時間和乘客到達1樓時間,上面求的極值點附近是比較優的方案。
ps:雖然下行高峰期往往空閒時間較短,電梯可能到不了空閒停靠樓層就要去接客,但是空閒的時候往這個方向前進還是有效果的。
現在我們已經知道了如何設定空閒停靠樓層,那麼基於此,掃瞄排程演算法還需要進一步優化:
#include #include#define level 6
#define park 2 //空閒停靠樓層
int flag[level + 1]; //1到level層的外部輸入,取值為0,1,2,3,其中0表示無乘客,1表示有乘客上行,2表示有乘客下行,3表示既有上行又有下行
int dest[level + 1]; //目的樓層的記錄,取值為0,1,其中0表示不是目的地,1表示是目的地
int levelmax, levelmin; //levelmax是進出電梯最大樓層,levelmin是進出電梯最小樓層
void input()
}void uppull(int loc)//上行接客
void downpull(int loc)//下行接客
void push(int loc)//送客
int getmax()//進出電梯最大樓層
return levelmax;
}int getmin()//進出電梯最小樓層
return levelmin;
}bool ispark()//是否為空閒狀態
int getmax2()//進出電梯最大樓層
int getmin2()//進出電梯最小樓層
電梯控制演算法(8)多電梯場景 雙電梯的空閒停靠
電梯控制演算法 如果,兩個電梯是等價的,那麼,2個電梯的空閒停靠樓層是多少呢?假設2到n的等待乘客數分別為1,那麼一樓的等待乘客數為n 1 假設停靠樓層為x,y,那麼電梯去接第乙個乘客的接客距離為 n 1 f 1 f 2 f 3 f n 其中f t min abs t x abs t y abs表示...
電梯控制專案
每層電梯口有兩個按鈕 上行 和 下行 有兩個led數碼管分別顯示左右兩個電梯所在的樓層,數碼管旁有箭頭led燈指示該電梯的執行狀態 向上,向下,停止 兩個按鈕即為電氣開關,控制電梯的上行和下行。兩個led數碼管要顯示電梯樓層的話,就必須能夠接收到電梯所在樓層的資訊。箭頭led燈需要接收電梯執行狀態的...
電梯排程演算法
在高峰時間,實習生小飛常常會被電梯每層樓都停弄得很不耐煩,於是他想出了這樣乙個辦法 由於樓層並不高,那麼在繁忙的時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層樓後,電梯聽下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓時,每個乘客選擇自己的目的層,電...