電梯調度問題模型分析及程序設計(一)


電梯調度問題模型分析及程序設計(一)

一.電梯調度問題分析

  • 問題描述

   現有一新建辦公大廈,共有21層,共有四部電梯,所有電梯基本參數如下表所示:

電梯編號

可服務樓層

最大乘客數量

 

最大載重量

 1

全部樓層

10

800 kg

 2

單層

10

800 kg

 3

雙層

20

1600 kg

 4

全部樓層

20

2000 kg

   其使用規定如下:

  1. 樓層號為0~20,其中0號為地下一層;
  2. 有樓層限制的電梯不在響應樓層停靠,如單雙層;
  3. 所有電梯采用統一按鈕控制。
  • 需求分析
  1. 需要設計四部電梯,而且需要注意四部電梯所需要具備的功能;
  2. 考慮電梯單雙層調度,有樓層限制的電梯不在響應樓層停靠(即單層電梯只能在奇數樓層之間調度,雙層電梯只在偶數樓層之間調度);
  3. 外部電梯按鈕響應事件,所有樓層采用統一按鈕;且0層只設有“Up”按鈕,20層只設有“Down”按鈕;其余樓層設置兩個按鈕;
  4. 每一部電梯具有不同的屬性,比如乘客數量和電梯承重,對於乘客的體重屬性我們才有隨機數產生每一名乘客體重,最后通過人數計算總重量;
  5. 電梯調度應該依照一定的優先級進行操作;比如我們規定奇數層乘客到奇數樓層,這里我們優先考慮單層電梯;
  6. 當電梯中無人乘坐時,我們將電梯停至電梯最后一次運行所到達的樓層。

二.電梯調度功能實現

  • 電梯功能設計
  1. 當電梯外部乘客點擊乘坐電梯按鈕事件時,我們對乘客當前樓層以及點擊操作進行判斷;
  2. 當乘客進入電梯內部之后,乘客選擇自己所要到達的樓層,並且我們需要判斷是否電梯中乘客數量超限以及電梯是否超載?如果電梯超載我們將調用另一部合適的電梯將剩余的乘客送往相應樓層;
  3. 並且我們判斷對於同一方向運行的電梯是否乘客需要到達的樓層之間有交叉重復區域,這樣我們可以將乘客依次送往需要到達樓層;
  4. 對於不同方向的乘客我們優先判斷是否有空電梯,如果沒有空電梯,則等待;
  5. 對於電梯的設置我們采用結構體數組方式來存放四部電梯,在結構體中設置相應電梯屬性。
  • 電梯功能流程模擬
  1. 外部功能實現

  • 電梯外部應該具有按鍵功能,判斷是否有乘客乘坐電梯,並且應有乘客數量屬性;這里我們以流程圖的方式向大家展示外部功能的實現:

 

/*顯示電梯當前狀態函數*/
void printstatus(struct Lift lift[])
{
    for(int i=0;i<4;i++)
    {
        cout<<i+1<<"號電梯當前所在樓層:";
        cout<<lift[i].status<<endl;
    }
    cout<<endl;
}

/*初始化電梯運行方向*/
void StartDir(struct Lift lift[])
{
    for(int i=0;i<4;i++)
    {
        lift[i].dir=1;
    }
}

/*判斷電梯所處樓層,確定按鍵設置*/
void Keyset(int i)
{
    if(i==0)
    {
        cout<<"選擇操作 (1.Up  0.無人):";
    }
    else if(i==20)
    {
        cout<<"選擇操作 (2.Down  0.無人):";
    }
    else if(i>0&&i<20)
    {
        cout<<"選擇操作(1.Up  2.Down  0.無人):";
    }
}

   2.內部功能實現

  • 電梯內部我們采用在結構體數組中定義二維數組lift[i].floor[r][2]用來存放是否某一樓層有乘客乘坐電梯,並且記錄乘客人數。並且判斷乘客呼叫電梯操作的先后順序,對於不同方向的乘客我們采用調用空電梯的策略來實現,如果沒有空電梯則等待。

       通過這樣的實現方式我們模擬出電梯的運行方式,這兩部分是整個電梯調度問題的核心。而這與我們平時乘坐電梯時的調度方式時有很大差距的,據筆者了解到需要實現一部電梯的實際調度,我們需要引入Java中線程的相關概念。但通過上述的這種調方式也能實現四電梯的運轉。

三.電梯調度測試

  • 本次我們采用C/C++語言來實現整個程序的功能,我們對於電梯的調度情況進行一個簡單的測試;首先是乘客選擇電梯以及乘客需要到達的樓層進行性測試,我們假設同一樓層的所有人到達相同的樓層,在這部分測試中我們只輸入一組乘客信息,而且我們將調度電梯的當前層數顯示在屏幕上:
  • 第二部分對電梯的單雙層進行調度,我們假設三種情況:1.單層用戶到達單號樓層,這時候我們需要調用單層電梯(2號電梯);2.雙層用戶到達偶數樓層,這時候我們需要調用雙層電梯(3號電梯);3.單層用戶到達雙層,或者雙層用戶到達單層,這時候我們需要調用通用電梯(1號電梯、4號電梯):
  • 第三部分是電梯混合調度,比如在5樓的乘客去15樓,而與此同時有樓的乘客到達 17樓,我們大概實現這樣的混合調度,個人覺得在整個調度過程中在應該還有考慮不全面的地方,但基本實現功能,在這里需要考慮的情況實際比較復雜,我們將其簡化:

四.總結

    這部分我們主要為大家講述了我們團隊對於電梯調度問題的一個基本思想,並對於問題模型的建立過程以及最終功能的實現向大家做了一個基礎的展示;總的來說,我們團隊完成了這次合作任務,雖然只是兩個人的一個小小的合作,但通過這樣的形式讓我們學習到了對方在解決問題上的不同想法以及對於解決問題時我們提出的不同思路,這有利於我們更好的解決問題。如果我們一個人思考,很有可能自己對於問題的考慮在某一方面存在欠缺,而通過合作的方式,我們可以將問題出錯情況降到最低,這樣對於我們以后思考問題的方式也有很大的借鑒意義。在這部分主要為大家介紹了關於設計方面的思路。我們將在接下來的篇章中為大家介紹在這次開發過程每個人所承擔的責任以及扮演的角色。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM