トラフィック理論:JavaScriptによるErlangB, ErlangC
|
---|
電話回線の必要回線数やコールセンターでの必要席数の算出に利用されるアーラン式。呼損率をベースに算出するアーランBと、待ち時間を考慮した待ち合わせ率を算出するアーランCをJavaScriptでプログラム化しました。
|
アーランの公式です。難しいですね。僕も完全には理解出来ません。
くわしくは統計学の専門家にでも聞いてください。 |
|
・AHT = Average Handling Time (1件あたり処理時間)
・E = アーラン(呼量) = 入電数 * AHT / 収集期間 ・n = エージェント数 ・t = 待ち時間 ・e = 2.71828182845904… (自然対数の底:ネピア数) |
|
ErlangB公式:
(呼損率) |
|
ErlangC公式:
(サービスレベル外率) |
アーランB
応答率 |
アーランB
必要回線数 |
アーランC
サービスレベル |
アーランC
必要回線数 |
||||
|
|
|
|
Javascriptサンプル(アーランC)
|
|
//小数点計算を行うのでとりあえず全部Floatに incalls = parseFloat(incalls); aht = parseFloat(aht); duration = parseFloat(duration); waittime = parseFloat(waittime); serviceLvl = parseFloat(serviceLvl)/100; var erlang = (incalls*aht)/duration;//呼量(アーラン) var factorial = 0;//nの階乗の部分 var factorialOneBefore = 1;//nの階乗一つ前 最初は1 var denominator = 1;//アーランBの分母の部分 最初は1でΣの部分をどんどん足していく var ErlangB = 0; var ErlangC = 0; var n=0; while(ErlangC<=serviceLvl){//1-アーランCがサービスレベル以上になるまでループ n++; factorial = erlang/n; factorial = factorial*factorialOneBefore;//これで分子の部分は算出 factorialOneBefore = factorial;//次のループの為に階乗の値を保存 denominator = denominator+factorial;//これで分母の部分は算出 ErlangB = factorial/denominator;//これでアーランB(呼損率)算出 ErlangC = (n*ErlangB)/(n-erlang*(1-ErlangB));//これでアーランC算出 ErlangC = 1-ErlangC*Math.exp((-(n-erlang)*waittime)/aht); //これでWaittimeを加味したアーランC算出。サービスレベル内の確率が欲しいので1から引く。 } result = n;//nが適切な回線数ということになる |
|
上記のループの部分を「n < lines(回線数)」と修正すればループが終了したときに「ErlangC」がサービスレベルの値として取得できます。アーランBの値もこの中で既に取得できているので、ちょっとループの部分を修正すればアーランBも取得できますね。
|