トラヒック計算で混雑解消 | 数学アラカルト [実践] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 実戦 | 数学アラカルト | 数学に関する話題をrpnで探求!数字と遊んでみよう。

HOME > 実践 > 数学アラカルト > トラヒック計算で混雑解消 hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

トラヒック計算で混雑解消

 チケット予約で電話するけど話中ばかり…。現金を引き出そうとしてATMに並んでいてもなかなか前に進まない…。会計しようとレジ待ちしているけど自分の前には何人も…。

これってレジの数が少なすぎるんじゃない?ATMの数が足りないんじゃない?チケット会社の電話回線が少ないんじゃない?そう思ったことありませんか。会社はレジやATMの数をケチっているのでしょうか。それともきちんと数を計算しているのでしょうか?

電話を使ったチケット予約を例にすると、仮に1回線しか用意していなければ同時に一人しか通話できません。もし、100人が同時に掛けたとすると99人は話中です。明らかに回線数が不足でしょう。だからといって、100回線用意しておくのは明らかに無駄な感じがします。

それに予約に何十分も掛かることはありません。通話は数分で終わります。例えばチケット予約に平均2分が必要なら、1時間に30人は捌けることになります。1分なら60人です。

何度掛けても話中だった最後の一人は不幸ですが、100人いたとしても数時間もあれば、全員チケット予約ができるわけです。では一体、回線は何本用意すればいいのでしょうか。どうやら予約したい人の数と通話時間、回線数の複雑な関係があるようです。

リクエスト(要求)とリソース(資源)

 チケットを予約する行為がリクエスト(要求)なのに対し、回線の数はリソース(資源)です。全てのリクエストをすぐに満せるだけのリソースが用意できればよいのですが、それは現実にはコスト高で夢物語です。

結局、いかに有限のレジやATM、回線などのリソースで、ある程度満足のいくサービスを提供できるかどうかという問題になります。

  リクエストの数 -------> 十分なリソースの数
                                 |
                                 v
                 <------- サービスの提供 


電話を掛けて10回に9回が話中なら不満でしょうが、10回掛けて9回通話できるならそれほど不満はないでしょう。ましてや100回掛けて99回通話できるなら大満足です。

サービスの満足度を考えながら、必要な有限リソースの数を割り出すことが重要になりそうですね。

トラヒック(トラフィック)理論とは

 トラヒック理論とは、有限のリソースで効率的なサービスを提供するためにどうすればよいかを考えるものです。トラヒックとは交通量のことで、渋滞を起こさずスムーズに流れるようにコントロールするイメージですね。

トラヒック理論(トラフィック理論という人も多い)には呼、呼量、保留時間などの専門用語が出てきますが、慣れてしまえば大したことはありません。

1回分のサービス要求のこと。トランザクションとも言います。電話なら1回の呼び出し。ATMなら一回分の操作に対応します。
保留時間
1回のサービスに要する時間で、スループットとも言います。電話なら通話時間、ATMなら操作時間です。
呼量
呼の延べ保留時間を単位時間で割ったものになります。
これらは電話交換から出てきた言葉なのですが、呼は「こ」、呼量は「こりょう」と言います。英語で呼はcallですね。ちなみに話中は「わちゅう」で英語だとbusyです。

呼と保留時間はすぐに理解できますが、呼量は少し抽象的な感じがします。具体例を示しましょう。例えば、述べ保留時間が100分で単位時間が3600秒(1時間)だとすると以下のrpn式で呼量が計算できます。

  >rpn 100 60 * 3600 /
  1.66667


呼量は1.66667ですね。呼量はデンマーク人の数学者・電話技師のアグナー・アーラン(Agner Krarup Erlang)に因んでアーランとも言われます。今回の場合は1.67アーランです。

つまり、1時間に平均h秒の通話がc回あるとするとアーラン(呼量)は以下の式になります。

       h・c
  a = ------
       3600


電話の場合、平均通話時間は大体3分です。そして呼び出し音が7回聞こえても相手が応答しないときに諦めて切断するそうです。ところで、電話の呼び鈴ですが鳴っている時間が1秒で鳴っていない時間は2秒です。日常の感覚では逆のように感じますね。

すると平均3分の通話が1時間に10回なら、次のrpn式のように0.5アーランになります。

  >rpn 3 60 * 10 * 3600 /
  0.5


では、1回の通話で1時間通話すると何アーランになるのでしょうか。

  >rpn 60 60 * 1 * 3600 /
  1


計算すると1アーランであることが分かります。当然、このトラヒックを満たすには最低でも1回線が必要です。別の解釈をすると1アーランは1つのリソース(回線)を100%使っている状態ともいえます。

別の例を示しましょう。1時間に2回、60分通話したときは2アーランです。

  >rpn 60 60 * 2 * 3600 /
  2


この場合は2つの回線がないとトラヒックを捌けません。2つのリソース(回線)を100%使っている状態ですね。

現実的な例(小さな企業の回線数)

 ある小さな企業に5台の電話があります。経験上、1時間当たり1台で平均10回の電話着信があります。また、1回の通話時間は平均3分であることが分かっているとします。アーラン数はいくらになるでしょう。

  >rpn 180 10 * 5 * 3600 /
  2.5


3分(180秒)が10回で5台の電話機なので、それぞれを掛けて3600秒で割ると、呼量は2.5アーランだと分かります。

ちなみに企業の内線電話は平均で0.2アーラン未満で、トラヒックの1/3は外線発信、1/3は外線着信、1/3は内線相互通話です。大体1時間に12分は受話器を握っている計算になりますね。なお、家庭の電話機は平均で0.06アーラン程度だそうです。

即時式ならアーランB式

 さて、呼量(アーラン)は計算できたとして、必要な外線の回線数はいくつになるのでしょうか。これを計算するには呼損率という考え方が必要です。呼損率は呼を受け付けることができなかった割合です。

サービスを提供できなかった割合。サービスを拒否した割合でもあります。

電話の場合、呼損率が0.5なら2回に1回は話中になります。呼損率の逆はサービスの品質、または満足度ともいえますね。そして、呼量と回線数が分かれば呼損率が計算できます。それが以下のアーラン式です。

              n
             a
            ----
             n!
  b = -----------------
                  i
            n    a
       1 + ∑ { ---- }
           i=1   i! 


aはアーラン(呼量)、nは回線数、bは呼損率になります。先ほどの小さな会社を例に呼量を2.5アーラン、回線数が1回線だとしてみましょう。会社内には5台の電話、引き込んだ回線(外線)が1回線という構成ですね。rpn式は以下のとおりです。

  >rpn 2.5 1 p 1 ! / 1 2.5 1 ! / + /
  0.714286


呼損率は0.7です。つまり、10回掛けて通話できるのは3回程度ですね。回線数が増えて2回線だとすると次のようになります。

  >rpn 2.5 2 p 2 ! / 1 2.5 1 ! / + 2.5 2 p 2 ! / + /
  0.471698


呼損率が0.47に改善しています。10回掛けて5回はすぐに通話できます。

最も電話を使用する時間帯を最繁時といいますが、企業なら9時台と13時台です。最繁時のアーラン数は平均とは大きく異なるため、呼損率を計算する際のアーラン数は最繁時のものを基準に考えるべきです。

では、アーラン数が2.5として呼損率が0.05(すぐに通話できる確率が95%)を満たす回線数はいくらでしょうか。上の式に従って回線数が1本の場合、2本の場合、3本の場合…と呼損率が0.05を下回るまで計算すればいいのですが、数式を入力するのがあまりにも面倒です。

そこで、erlangというrpnプログラムを用意します。erlangプログラムに指定する値ですが、最初のパラメータがアーラン(呼量)で、次が回線数です。このrpn式を計算すると呼損率が出てきます。

  >rpn 2.5 1 -c erlang
  0.714286
  >rpn 2.5 2 -c erlang
  0.471698
  >rpn 2.5 3 -c erlang
  0.282167
  >rpn 2.5 4 -c erlang
  0.149916
  >rpn 2.5 5 -c erlang
  0.0697311
  >rpn 2.5 6 -c erlang
  0.0282343


会社に引く回線を6本を用意すれば呼損率5%を達成できることが分かります。つまり、お客さんがこの会社に電話した場合、100回中3回は話中ということになります(97%の確率ですぐに繋がる)。

現実的な例(テナントビルの回線数)

 今までは呼損率を考慮して、アーラン数から提供可能な回線数を求めてきましたが、今度は逆に回線数から許容できるアーラン数を求めてみましょう。

ここに1本のT1回線があります。23の同時音声通話が可能な大容量の光回線です。この回線で呼損率1%を満たすことのできるアーラン数はいくらになるでしょうか。

  >rpn 1 23 -c erlang
  1.42302e-23
  >rpn 10 23 -c erlang
  0.000175636
  >rpn 20 23 -c erlang
  0.0849296
  >rpn 15 23 -c erlang
  0.0135433
  >rpn 14 23 -c erlang
  0.00745414


14アーランまで許容できますね。テナントの平均アーラン数が0.2で最繁時が3倍だとしても電話機23台までカバー、10倍だとしても電話機7台までカバーできそうです。

現実的な例(衣料販売店のアーラン数)

 今度は少し変わった応用です。以下は子供服販売店の実績値なのですが、この店舗のアーラン数を求めてみましょう。

 ・売上40万円/日 ・来店200組/日 ・滞在時間15分/組 ・来店間隔3分 ・平均5組/店内

3分毎に来客があるとして一日の来店数が200なので、営業時間は10時間。売上が40万円なので客単価は2000円。月商1200万、年商1億4千4百万円ですね。

保留時間が15分で、1時間当たり20トランザクションとして計算すると以下のrpn式になります。

  >rpn 15 60 * 20 * 3600 /
  5


5アーランです。このトラフィックを捌くにはリソースが最低でも5以上必要です。ただし、この場合のリソースは来客に必要な面積(移動に無理がない)です。少なくとも実績では、平均5組が店内にいてもスムーズな動線が確保できているらしいので、上記のアーラン数と合致することになりますね。

次は…

 ところで上のアーラン式ですが、正確にはアーランB式といいます。これはサービスを要求したときにリソースが使えないとサービスを諦める(拒否する)タイプの計算式です。

他にもアーランB式が適用できる条件として、呼はランダムに発生すること、保留時間は指数分布に従うこと、要求数は無限でリソースは有限であることがあります。

電話回線がまさにうってつけの例ですね(サービス拒否が話中)。もともとアーラン氏は電話技師だったので当然といえば当然です。しかし、すぐに要求が通らなくても行列に並んで待つこともあります。ATMやスーパーのレジがそのケースに当たります。

次はATMやレジの場合、どれだけの台数を用意すればよいかを解決するアーラン式の紹介です。

続き(part2)はこちらLinkIcon

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

数学アラカルト

数字と遊んでみよう

※実践コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

part2

数字と遊んでみよう

※実践コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング。

  • 書籍統計の書籍
  • ビジネスで統計が使えるととっても有利。

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要。

警告バックスラッシュはエンマークに読み替えてください( IEのみ)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。