blog/content/post/2008/04/19/2008-04-19-00000876.md

251 lines
12 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
title: 待ち行列理論について
author: kazu634
date: 2008-04-19
url: /2008/04/19/_941/
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3903;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- つれづれ
---
<div class="section">
<p>
 こいつが全く分からないのでここで一つまとめておきたいと思います。
</p>
<p>
<a name="seemore"></a>
</p>
<h4>
Wikipediaだと
</h4>
<blockquote title="待ち行列理論 - Wikipedia" cite="http://ja.wikipedia.org/wiki/%E5%BE%85%E3%81%A1%E8%A1%8C%E5%88%97%E7%90%86%E8%AB%96">
<p>
待ち行列理論まちぎょうれつりろん 英訳Queueing Theoryは、応用数学のオペレーションズ・リサーチにおける分野の一つで、様々な待ち行列系を数理モデル化して、待ち行列の平均長や、到着してから去るまでの平均の時間などを考察する理論である。
</p>
<p>
コンビニエンスストアや銀行などでは、しばしば窓口で順番待ちをしている人の列が生じる。このような行列を「待ち行列」と言う。この発生には様々な要因があり、客の現れる時間や、窓口での対応時間などをモデルとして記述し、その時間などを考察する。
</p>
<p>
<cite><a href="http://ja.wikipedia.org/wiki/%E5%BE%85%E3%81%A1%E8%A1%8C%E5%88%97%E7%90%86%E8%AB%96" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://ja.wikipedia.org/wiki/%E5%BE%85%E3%81%A1%E8%A1%8C%E5%88%97%E7%90%86%E8%AB%96', '待ち行列理論 &#8211; Wikipedia');" target="_blank">待ち行列理論 &#8211; Wikipedia</a></cite>
</p>
</blockquote>
<p>
いや、これじゃわからん。テキストを見てみよう。
</p>
<h4>
待ち行列とは
</h4>
<blockquote>
<p>
 駅の切符の自動販売機やスーパーのレジなどにおいて、人が滞留する現象がある。これは、混雑がひどく、サービスの時間に対して人が滞留していく割合の方が大きい状態である。このように、サービスを受けようとして待っている人や設備を「待ち行列」という。
</p>
</blockquote>
<p>
これならわかりそう。
</p>
<h4>
待ち行列理論
</h4>
<blockquote>
<p>
 待ち行列理論は、待ち行列ができたときの平均待ち時間や平均応答時間を求める手法である。待ち行列の状態を表すものとしてケンドールの記法がある。例えば
</p>
<p>
<center>
</center>
</p>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~M~/~m" class="tex" alt=" M / M / m" />
</p></p>
<p>
システムの設計でよく用いられるのは、<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~M~/~m" class="tex" alt=" M / M / m" />である。これはサービスの要求の発生頻度分布がランダムで、サービスの処理時間分布が指数分布、サービス窓口の数がm個であることを表す。そのほか、<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~D~/~m" class="tex" alt=" M / D / m" /><img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~G~/~1" class="tex" alt=" M / G / 1" />がよく用いられる。
</p>
<p>
数学的に解きやすく、応用範囲が広いのは<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~M~/~1" class="tex" alt=" M / M / 1" />である。これはサービス要求の発生頻度分布がランダムで、サービス処理時間分布が指数分布、サービス窓口の数が一個であることを表す。統計数学では、ランダムな発生はポアソン分布で近似する。
</p>
</blockquote>
<p>
 指数分布とポアソン分布が分からないorz。指数分布は指数関数的な分布なのかしらそもそも「分布」ってなによ
</p>
<p>
 ポアソン分布は説明がある。
</p>
<blockquote>
<p>
二項分布<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~P&#40;x&#41;~=~~_n~C~_x~P~_x~&#40;1-P&#41;^n^-^x" class="tex" alt=" P&#40;x&#41; = _n C _x P _x &#40;1-P&#41;^n^-^x" />において、Pが非常に小さくかつnが大きいとき、確率Pをもつ事象がn回の観察で起こる確率
</p>
<p>
<center>
</center>
</p>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~P&#40;x&#41;~=~\frac{\mu~e~^-^\mu}{x!}" class="tex" alt=" P&#40;x&#41; = ¥frac{¥mu e ^-^¥mu}{x!}" />
</p></p>
<p>
(平均値、分散共に<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\mu" class="tex" alt=" ¥mu" />)統計数学ではランダムな発生はポアソン分布に従うことが知られている。そこで、<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~M~/~1" class="tex" alt=" M / M / 1" />待ち行列の到着はポアソン到着という。
</p>
</blockquote>
<p>
要するに、「ポアソン分布に従う」は「ランダムだよ」ということらしい。続きを見てみよう。
</p>
<blockquote>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~M~/~1" class="tex" alt=" M / M / 1" />待ち行列はいくつかの公式を覚えておくことで、解析的に解くことができる。<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~M~/~M~/~1" class="tex" alt=" M / M / 1" />待ち行列の公式を整理しておく。
</p>
<ul>
<li>
平均到着率(<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\lambda" class="tex" alt=" ¥lambda" />= 単位時間あたりの平均到着数(件 / 時間)
</li>
<li>
平均処理率(<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\mu" class="tex" alt=" ¥mu" /> = 単位時間あたりの平均処理数(件 / 時間)
</li>
</ul>
<p>
このように定義したときに、利用率(サービス窓口が処理中である確率)を<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\rho" class="tex" alt=" ¥rho" />とすると、次式が成り立つ。
</p>
<p>
<center>
</center>
</p>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\rho~=~\frac{\lambda}{\mu}" class="tex" alt=" ¥rho = ¥frac{¥lambda}{¥mu}" />
</p></p>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\rho" class="tex" alt=" ¥rho" />は、<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~0~&#60;~\rho~&#60;~1~&#40;\lambda~&#60;~\mu&#41;~" class="tex" alt=" 0 &#60; ¥rho &#60; 1 &#40;¥lambda &#60; ¥mu&#41; " />でないと、待ち行列が際限なく大きくなってしまう。
</p>
</blockquote>
<p>
ここらへんは定義だから暗記しなければいけない部分なのだろう。
</p>
<blockquote>
<p>
 また、トランザクション一件あたりの処理時間は平均処理率の逆数で、平均処理時間(平均サービス時間)という。
</p>
<p>
<center>
</center>
</p>
<p>
平均処理時間(<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~t_s" class="tex" alt=" t_s" /> = <img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\frac{1}{\mu}" class="tex" alt=" ¥frac{1}{¥mu}" />(時間 / 件)
</p></p>
<p>
したがって、<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\rho" class="tex" alt=" ¥rho" />は次のように表すこともできる。
</p>
<p>
<center>
</center>
</p>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\rho~=~\lambda~t_s" class="tex" alt=" ¥rho = ¥lambda t_s" />
</p></p>
</blockquote>
<p>
ここいらへんも定義を知っていればなんとかなりそうだ。
</p>
<blockquote>
<p>
以上を基本として以下の公式が導かれる。
</p>
<ul>
<li>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~E_w" class="tex" alt=" E_w" />: システム内に処理中も含めて滞留しているジョブ数の平均値 = <img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~\frac{\rho}{1-\rho}" class="tex" alt=" ¥frac{¥rho}{1-¥rho}" />
</li>
<li>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~T_q" class="tex" alt=" T_q" />: ジョブが到着してから処理が開始されるまでの時間の平均値(平均待ち時間) = <img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~E_w~\times~\frac{1}{\mu}~=~E_w~\times~t_s~=~\frac{\rho}{1-\rho}~=~\frac{\rho}{1-\rho}~\times~t_s" class="tex" alt=" E_w ¥times ¥frac{1}{¥mu} = E_w ¥times t_s = ¥frac{¥rho}{1-¥rho} = ¥frac{¥rho}{1-¥rho} ¥times t_s" />
</li>
</ul>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~T_q" class="tex" alt=" T_q" />はトランザクションが到着したとき、すでに到着しているトランザクションの官僚を待たないと、処理を開始することができないため、待っているジョブと処理中のジョブに平均処理時間をかけることになる。
</p>
<p>
さらに次の公式を導くことができる。
</p>
<ul>
<li>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~T_w" class="tex" alt=" T_w" />: ジョブが到着してから処理が終了するまでの時間の平均値(平均応答時間) = 平均待ち時間 + 平均処理時間 = <img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?~T_q~+~t_s" class="tex" alt=" T_q + t_s" />
</li>
</ul>
<p>
平均待ち時間が分かれば、平均応答時間は平均待ち時間に到着したトランザクションの処理時間を加算すればよい。
</p>
</blockquote>
<p>
ここらへんになると、ちょっときつい。。。ちょっと問題解いて確認するか。
</p>
<div class="hatena-asin-detail">
<a href="http://www.amazon.co.jp/dp/453240469X/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/453240469X/?tag=hatena_st1-22&ascsubtag=d-7ibv', '');"><img src="https://images-na.ssl-images-amazon.com/images/I/51IsgGHgfZL._SL160_.jpg" class="hatena-asin-detail-image" alt="情報処理技術者試験 ソフトウェア開発技術者完全教本〈2008春〉" title="情報処理技術者試験 ソフトウェア開発技術者完全教本〈2008春〉" /></a></p>
<div class="hatena-asin-detail-info">
<p class="hatena-asin-detail-title">
<a href="http://www.amazon.co.jp/dp/453240469X/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/453240469X/?tag=hatena_st1-22&ascsubtag=d-7ibv', '情報処理技術者試験 ソフトウェア開発技術者完全教本〈2008春〉');">情報処理技術者試験 ソフトウェア開発技術者完全教本〈2008春〉</a>
</p>
<ul>
<li>
<span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%C6%FC%B9%E2%C5%AF%CF%BA" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%C6%FC%B9%E2%C5%AF%CF%BA', '日高哲郎');" class="keyword">日高哲郎</a>
</li>
<li>
<span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%B7%D0%BA%D1%BF%B7%CA%B9%BD%D0%C8%C7%BC%D2" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%B7%D0%BA%D1%BF%B7%CA%B9%BD%D0%C8%C7%BC%D2', '日本経済新聞出版社');" class="keyword">日本経済新聞出版社</a>
</li>
<li>
<span class="hatena-asin-detail-label">発売日:</span> 2008/01
</li>
<li>
<span class="hatena-asin-detail-label">メディア:</span> 単行本
</li>
<li>
<a href="http://d.hatena.ne.jp/asin/453240469X" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/453240469X', 'この商品を含むブログ (4件) を見る');" target="_blank">この商品を含むブログ (4件) を見る</a>
</li>
</ul>
</div>
<div class="hatena-asin-detail-foot">
</div>
</div>
</div>