排隊論入門學習 (for 數學建模)

排隊論入門學習 (for 數學建模)

文字部分引用了很多浙大數學建模排隊論ppt中的內容,本人做個總結和代碼實現

爲什麼研究排隊論?

研究排隊問題,就是要把排隊的時間控制到一定的程度內,在服務質量的提高和成本的降低之間取得平衡,找到最適當的解。

image

排隊系統的組成:

1.輸入過程: 輸入過程是說明顧客按照怎樣的規律到達系統,分爲三個方面:

  • 顧客總數:有限與無限

  • 顧客到達的方式:單個或者成批

  • 顧客相繼到達的時間間隔:確定型或者隨機型

2.排隊規則與服務規則:

  • 排隊規則:損失制、等待制、混合制
  • 服務規則:先到先服務、後到先服務、隨機服務、有優先權的服務

3.服務機構:

  • 服務檯數量及結構形式:數量上服務檯有單臺和多臺之分,結構形式上服務檯有單隊-單服務檯式、多隊-多服務並列式、單隊-多服務檯並列式、單隊-多服務檯串列式、多服務混合式
  • 服務方式:單個服務和成批服務
  • 服務時間:確定型和隨機型

排隊模型的分類

記X:顧客到達的時間間隔分佈;Y:服務時間的分佈;Z:服務檯數。
則排隊模型爲:X/Y/Z。

常用的記號:M—負指數分佈;D—確定型;Ek—k階Erlang分佈;GI—一般相互獨立的隨機分佈;G—一般隨機分佈。這裏主要討論M/M/1,/M/M/C。

泊松流與指數分佈

設x(t)爲時間[0,t]內流事件發生的次數。例如[0,t]時間內到來的顧客數,[0,t]時間內服務檯收到呼叫的此時。那麼我們一般假定x(t)滿足泊松過程,也稱爲poisson流或最簡單流,表示[0,t]時間內事件發生次數爲k次的概率服從泊松分佈:

\(P( x(t)=k ) = \frac{(\lambda k)^k}{k!}e^{-\lambda t} \)

其中參數\(\lambda\)表示單位時間內事件發生次數的平均數。

當流過程爲泊松過程時,設流發生的時刻依次爲t1,t2,…tn,發生時間的間隔記爲dn=tn - tn-1 (n=1,2,…),其中t0=0。

定理: 事件流x(t)爲泊松流的充要條件是x(t)流發生的時間間隔dn相互獨立,且服從相同的負指數分佈,即

image

(負)指數分佈滿足以下性質:

\(P(T<=t0+x | T>=t0)=P(T<=x) \)

如果把T解釋爲壽命,上式表名:如果已知年齡大於t0歲,則再活x年的概率與以前的t0無關。所以有時又風趣地稱指數分佈是“永遠年輕”。

請看下面例題(來自另一份ppt):

image

image

排隊系統的運行指標:

  1. 絕對通過能力A:單位時間內被服務被服務顧客的數學期望

  2. 相對通過能力Q:被服務顧客的顧客數與請求服務顧客的顧客數的比值

  3. 系統損失概率\(P_損\):服務系統滿員的概率

  4. 隊長\(L_系\):系統內顧客數量的數學期望值

  5. 排隊長\(L_隊\):系統內排隊顧客數的數學期望值

  6. 逗留時間\(W_系\):顧客在系統內逗留時間的數學期望值

  7. 排隊時間\(W_隊\):系統內顧客排隊等待服務時間的數學期望

損失制排隊模型

  • 多通道損失制系統
  • 單通道損失制系統

下面以多通道損失制系統爲例

設系統內有n個服務員,顧客來到服務系統時如果服務員正在忙,顧客不能立即得到服務,則顧客離去。

案例1:

某電話總機有3條中繼線,平均每分鐘有0.8次呼喚。如果每次通話時間平均爲1.5分鐘,試求:系統狀態的極限概率;絕對通過能力和相對通過能力;損失概率和佔用通道的平均數。

原理分析:

image
解釋一下,這裏\(\mu\)是1.5的倒數。

#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1007;
double jc(int k) { //階乘
    double ans = 1;
    for (int i = 2; i <= k; i++) {
        ans *= i;
    }
    return ans;
}
int main() {
    double n = 3, lamda = 0.8, u = 0.667;
    double miu = lamda / u;
    double p0 = 1, cur = 0;
    for (int i = 0; i <= n; i++) {
        cur += pow(miu, i) / jc(i);
    }
    p0 /= cur;
    double p_sun = pow(miu, n) * p0 / jc(n);
    double Q = 1 - p_sun;
    double A = lamda * Q;
    double K = miu * (1 - p_sun);
    double zyl = K / n;
    cout<<"-----輸入各項參數:-----\n";
    cout<<"服務員個數:"<<n<<endl;
    cout<<"顧客流強度:"<<lamda<<endl;
    cout<<"服務檯能力:"<<u<<endl;
    cout<<"-----系統效率指標:-----\n";
    cout<<"損失概率= "<<p_sun<<endl;
    cout<<"系統的相對通過能力= "<<Q<<endl;
    cout<<"系統的絕對通過能力= "<<A<<endl;
    cout<<"佔用服務員的平均數= "<<K<<endl;
    cout<<"通道佔用率= "<<zyl<<endl;
    return 0;
}

運行結果

-----輸入各項參數:-----
服務員個數:3
顧客流強度:0.8
服務檯能力:0.667
-----系統效率指標:-----
損失概率= 0.08969
系統的相對通過能力= 0.91031
系統的絕對通過能力= 0.728248
佔用服務員的平均數= 1.09183
通道佔用率= 0.363942

對於單通道損失制系統,只需將上面程序的n改成1即可。

等待制排隊模型

  • 多通道等待制模型
  • 單通道等待制模型

下面以多通道等待制模型爲例

設本系統顧客到達流爲泊松流,其強度爲\(\lambda\)。系統內有n個服務員,服務員具有相同服務時間且服從指數分佈,其強度爲\(\mu\)。當顧客到達時,如果服務員忙着,顧客排隊等待服務,一直等到有服務員爲他服務爲止。

對於多通道等待制系統有:

\(p_0=1-\lambda\) (此處ppt上沒說清楚,這個p0是猜測,待驗證)
image

對於單通道等待制系統有:

image

案例2:

某臨時假設的公路簡便橋,橋上不容許同時又兩輛汽車通過。若汽車到達流爲泊松流,其強度爲\(\lambda\)=2.1輛/分鐘。通過時間爲指數分佈,平均每輛的通過時間爲0.4分鐘,試求系統的效率指標。

#include <cmath>
#include <iostream>
using namespace std;
const int maxn = 1007;
double jc(int k) { //階乘
    double ans = 1;
    for (int i = 2; i <= k; i++) {
        ans *= i;
    }
    return ans;
}
int main() {
    double n = 1, lamda = 2.1, u = 2.5;
    double miu = lamda / u;
    double p0 = 1-miu;
    double p_sun = 0;
    double Q = 1 - p_sun;
    double A = lamda * Q;
    double L_dui = pow(miu, n + 1) *p0 / (n * jc(n)) ;
    L_dui /= (1 - miu / n) * (1 - miu / n);
    double W_dui = L_dui / lamda;
    double K = miu * (1 - p_sun);
    double L_xi = L_dui + miu;
    double W_xi = L_xi/lamda;
    cout << "-----輸入各項參數:-----\n";
    cout << "服務員個數:" << n << endl;
    cout << "顧客流強度:" << lamda << endl;
    cout << "服務檯能力:" << u << endl;
    cout << "-----系統效率指標:-----\n";
    cout << "損失概率= " << p_sun << endl;
    cout << "系統的相對通過能力= " << Q << endl;
    cout << "系統的絕對通過能力= " << A << endl;
    cout << "系統內排隊顧客的平均數= " << L_dui << endl;
    cout << "顧客的平均排隊時間= " << W_dui << endl;
    cout << "佔用服務員的平均數= " << K << endl;
    cout << "系統內顧客的平均數= " << L_xi << endl;
    cout << "顧客在系統中平均逗留時間= " << W_xi << endl;
    return 0;
}

運行結果如下:

-----輸入各項參數:-----
服務員個數:1
顧客流強度:2.1
服務檯能力:2.5
-----系統效率指標:-----
損失概率= 0
系統的相對通過能力= 1
系統的絕對通過能力= 2.1
系統內排隊顧客的平均數= 4.41
顧客的平均排隊時間= 2.1
佔用服務員的平均數= 0.84
系統內顧客的平均數= 5.25
顧客在系統中平均逗留時間= 2.5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章