標籤:

一部電梯(已知所有命令)的調度演算法?

想了倆小時沒想出來,幾近崩潰,十分煩躁,累覺不愛。。所以來求助

具體問題簡化後是這樣:一共6層,沒有地下,兩種指令,格式分別是(電梯內部按鈕請求標誌"E",目標樓層,當前樓層,當前電梯狀態(分為1上行,0下行,2空載)),(電梯外部按鈕『F』,目標樓層,上or下,當前樓層,當前電梯狀態);現已知用字元串數組依次按照時間順序存所有的指令,怎麼把指令轉換成隊列,來實現調度?

例如:(E,6,1,2)(E,4,3,1)存在隊列中為queue[1]="(E,4,3,1)",queue[2]="(E,6,1,2)"


以前大學時做過電梯,實際的電梯調度貌似很傻,它不管你是電梯內部、還是外部的命令,它只看「當前時刻」要到達的有哪些目標樓層(見下)。為什麼會這麼傻,因為尼瑪用的是梯形圖plc編程,直接控制與plc配套的變頻器和大電機(問:為毛不用單片機或pc,同時自己設計電機控制演算法(題主問的調度有用武之地了)? 答:出事故了誰負責。。。),太複雜的調度也懶得用plc搞,梯形圖拖拖 拖死人。而且貌似也沒有更符合實際的調度方法,題主想通過內外指令隊列調度,就要考慮到電梯的位置、電梯運動需要的時間、人發出指令的隨機性等等各種意想不到並且使問題複雜化的情形。

case 1 電梯剛剛快運動到某層:

電梯運動快到該層時他才根據「當前」的目標樓層思考要不要停,停則進入case 5,否則繼續case 4。

case 2 電梯剛剛停在某層X分鐘後:

原先D方向上「當前」還有目標樓層,那麼繼續按D方向繼續運動case 4,否則進入電梯「閑置」狀態case 3,且把D方向清空。

case 3 電梯「閑置」地 停在某層:

不斷地檢查最先出現新的目標樓層,決定運動方向,標記運動方向D,開始運動case 4 。

case 4 電梯按D方向運動:

不斷地判斷電梯是否快到某層,則進入case 1。

case 5 電梯剛剛停在某層,X分鐘後必然進入case 2。


推薦閱讀:

國內電梯維保行業真的很不盡人意嗎?
修理電梯有前途嗎?
武漢寫字樓電梯從40層狂跌至2層,為什麼一定要提升到46層才救人?
在搭乘人數不同的時候,電梯的運行速度會有變化嗎?
電梯進去了突然失控怎麼回事?

TAG:演算法 | 電梯 |