最終更新日:2026年8月2日
fe fe-technology queueing-theory system-performance
まず結論
M/M/1待ち行列モデルとは、要求がランダムに到着し、処理時間もランダムで、サービス窓口が1つの待ち行列モデルです。
M/M/1の3文字は、次の意味を持ちます。
最初のM
→ 到着がマルコフ的
→ 一般にはポアソン到着として扱う
2番目のM
→ サービス時間がマルコフ的
→ 一般には指数分布として扱う
1
→ サービス窓口が1つ
基本情報技術者試験では、まず次の点を確認します。
到着が現在の混雑状況に左右されないか
窓口が1つか
処理順が原則として先着順か
到着率がサービス率を下回っているか
覚える一文はこれです。
M/M/1は、ランダム到着・ランダム処理時間・窓口1つ。
直感的な説明
コンビニのレジが1台だけある状況を考えます。
客が店に来る
→ 要求の到着
店員が会計する
→ サービス
レジが1台
→ 窓口数1
客は一定間隔ではなく、ばらばらに来店します。
また、会計時間も購入点数によって変わります。
到着時刻
→ ばらばら
会計時間
→ 客ごとに異なる
レジ
→ 1台
このような状況を単純化して分析するのがM/M/1です。
ただし、客が行列の長さを見て入店をやめる場合は、到着が混雑状況に依存します。
空いているときだけ来る
混んでいると来ない
この場合、単純なM/M/1の前提から外れます。
定義・仕組み
待ち行列モデルとは
待ち行列モデルは、サービスを待つ要求がどの程度たまるか、どのくらい待つかを確率的に分析するモデルです。
要求が到着する
↓
窓口が空いていれば処理
↓
窓口が使用中なら待ち行列へ並ぶ
↓
順番が来たら処理
対象は人に限りません。
- プリンターへの印刷要求
- Webサーバへのアクセス
- CPUへの処理要求
- コールセンターへの電話
- レジに並ぶ客
- 製造設備への加工要求
なども待ち行列として考えられます。
最初のM:到着過程
最初のMは、要求がランダムに到着することを表します。
MはMarkovianの頭文字です。
FE試験では、次のように理解すると十分です。
要求の到着
→ 一定間隔ではない
→ 過去や現在の混雑状況に強く依存しない
→ ランダムに発生する
一般には、単位時間当たりの到着件数をポアソン分布、到着間隔を指数分布として扱います。
2番目のM:サービス時間
2番目のMは、1件の要求を処理する時間もランダムであることを表します。
要求ごとに処理量が異なる
↓
処理時間も異なる
例えばプリンターなら、
準備に必要な時間
+
印刷枚数に応じた時間
によって、要求ごとの処理時間が変わります。
M/M/1では、サービス時間を指数分布に従うものとして扱います。
1:サービス窓口数
最後の1は、サービスを提供する窓口が1つであることを表します。
プリンター1台
レジ1台
サーバ1台
担当者1人
窓口が2つならM/M/2、3つならM/M/3と表します。
先着順
基本的なM/M/1では、到着した順番に処理することを前提にする場合が多いです。
先に到着した要求
→ 先に処理する
この処理順をFCFSといいます。
FCFS
=
First Come, First Served
FIFOと似ていますが、待ち行列理論ではFCFSという表現もよく使います。
待ち行列の容量
標準的なM/M/1モデルでは、待ち行列の容量を十分大きい、または無限と仮定します。
そのため、
バッファが満杯
→ 新しい要求を拒否する
という条件を明示的に扱う場合は、有限容量モデルを考えます。
代表例はM/M/1/Kです。
K
→ システム内に存在できる要求数の上限
M/M/1とM/M/1/Kは、区別して覚える必要があります。
このテーマは、基本情報技術者試験のシステム性能評価に関係します。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
到着率λとサービス率μ
M/M/1では、次の2つの量が重要です。
λ(ラムダ)
→ 単位時間当たりの平均到着数
μ(ミュー)
→ 単位時間当たりの平均サービス数
例えば、
1分間に平均4件到着
→ λ = 4
1分間に平均5件処理
→ μ = 5
です。
安定条件
待ち行列が際限なく増えないためには、サービス能力が到着量を上回る必要があります。
λ < μ
到着率がサービス率以上になると、平均的には処理が追いつきません。
λ = 6
μ = 5
到着
→ 1分に6件
処理
→ 1分に5件
この場合、毎分平均1件ずつ待ち行列が増えることになります。
利用率ρ
利用率は、窓口がどの程度忙しいかを表します。
ρ = λ ÷ μ
例えば、
λ = 4
μ = 5
ρ = 4 ÷ 5
= 0.8
なので、利用率は80%です。
ρが小さい
→ 窓口に余裕がある
ρが1に近い
→ 窓口が混雑しやすい
M/M/1では、ρが1に近づくほど待ち時間が急激に増えます。
科目Aでどう出る?
科目Aでは、M/M/1の前提条件を問う問題や、到着率・サービス率から待ち時間を求める問題が出題されます。
前提条件を問う問題
次のような記述があれば注意します。
混雑を見て要求を出す
→ 到着が状態に依存する
→ 単純なM/M/1から外れる
優先度によって順番を変える
→ 先着順ではない
窓口が複数ある
→ M/M/1ではない
バッファ満杯で受付を止める
→ 有限容量モデルを検討
選択肢の切り方
| 記述 | 判断 |
|---|---|
| 要求はランダムに到着する | M/M/1に合う |
| 1台のプリンターで処理する | M/M/1に合う |
| 到着順に処理する | 基本モデルに合う |
| 混雑を見て要求時刻を変える | 到着の独立性に反する |
| バッファに上限がある | M/M/1/Kに近い |
| 緊急度で処理順を変更する | FCFSではない |
問題文の対応付け
プリンターの問題なら、次のように読み替えます。
印刷要求
→ 客の到着
プリンター
→ サービス窓口
印刷処理
→ サービス
印刷待ちデータ
→ 待ち行列
この対応付けができると、問題文を整理しやすくなります。
待ち時間の基本式
M/M/1では、平均待ち時間や平均滞在時間を求める式があります。
平均系内時間
要求が到着してから、処理を終えるまでの平均時間です。
W = 1 ÷ (μ - λ)
平均待ち時間
待ち行列に並んでいる時間だけを表します。
Wq = λ ÷ {μ(μ - λ)}
平均系内要求数
処理中と待機中を合わせた平均要求数です。
L = λ ÷ (μ - λ)
平均待ち要求数
待ち行列に並んでいる平均要求数です。
Lq = λ² ÷ {μ(μ - λ)}
FE試験では、式そのものだけでなく、何を求めているかを区別することが大切です。
到着から処理完了まで
→ 系内時間
処理開始まで
→ 待ち時間
処理中を含む要求数
→ 系内要求数
待っている要求だけ
→ 待ち要求数
リトルの法則
待ち行列では、リトルの法則も重要です。
L = λW
意味は次のとおりです。
平均系内要求数
=
平均到着率
×
平均系内時間
同様に、待ち行列だけを考えると、
Lq = λWq
です。
式を暗記するより、
数 = 1時間当たりの到着数 × 1件が滞在する時間
と考えると理解しやすくなります。
M/M/1と有限容量モデルの違い
標準的なM/M/1では、待ち行列の容量に上限がないと考えます。
一方、プリンターのバッファや通信機器のキューには、実際には上限があります。
標準M/M/1
→ 待ち行列容量は無限と仮定
M/M/1/K
→ システム内の要求数に上限Kがある
上限に達した場合、
新しい要求を拒否する
要求を破棄する
再送させる
などの処理が必要になります。
試験では、「受付を中断する」「到着した要求を失う」という表現があれば、有限容量モデルを疑います。
データ構造のキューとの違い
同じ「キュー」という言葉が使われますが、目的が異なります。
データ構造のキュー
→ データをFIFOで管理する仕組み
待ち行列理論
→ 待ち時間や混雑を確率的に評価するモデル
共通点は、先に到着したものから処理する点です。
| テーマ | 主な目的 |
|---|---|
| キュー | データの格納・取り出し |
| 待ち行列理論 | 性能・待ち時間・混雑の予測 |
データ構造のキューでは、到着率やサービス率は通常扱いません。
どんな場面で使う?
プリンター共有
複数のPCが1台のプリンターへ印刷要求を送る場合、印刷待ち時間を見積もるために使えます。
Webサーバ
アクセス要求がランダムに到着し、1台のサーバが順番に処理する状況をモデル化できます。
コールセンター
電話の到着数と、オペレータの処理能力から、待ち時間や必要人数を検討します。
ただし、オペレータが複数人ならM/M/cモデルになります。
製造設備
加工要求が1台の設備へ集まる場合、設備の利用率や滞留時間を見積もることができます。
よくある誤解・混同
Mは単に「ランダム」という意味
FE試験ではランダムと考えてよいことが多いですが、厳密にはMarkovianを表します。
到着
→ ポアソン過程
到着間隔
→ 指数分布
サービス時間
→ 指数分布
と整理すると正確です。
先着順なら必ずM/M/1
先着順だけでは足りません。
到着がランダム
サービス時間がランダム
窓口が1つ
も必要です。
混雑を見て要求を控えても問題ない
混雑を見て到着時刻を変えると、到着が現在の状態に依存します。
これは単純なM/M/1の仮定から外れます。
バッファ上限があっても標準M/M/1
厳密には違います。
上限がある場合は、M/M/1/Kのような有限容量モデルを考えます。
λがμ以下なら安全
λ = μ では余裕がなく、平均待ち時間は発散します。
安定条件は、
λ < μ
です。
利用率が高いほど効率がよい
利用率が高すぎると、少しの変動で待ち時間が大きくなります。
利用率が100%に近い
→ 設備はよく使われる
→ ただし待ち時間が急増する
効率と待ち時間のバランスが必要です。
印刷量に比例する処理時間はM/M/1に反する
要求ごとに処理時間が異なること自体は、M/M/1の考え方に反しません。
ただし、実際の処理時間分布が指数分布と大きく異なる場合、別のモデルの方が適切なことがあります。
科目Bでどう使う?
科目Bでは、到着率・サービス率・利用率を変数として扱う処理につながります。
Pythonで利用率と平均系内時間を求めると、次のようになります。
arrival_rate = 4.0 # λ:1分当たり4件
service_rate = 5.0 # μ:1分当たり5件
if arrival_rate >= service_rate:
raise ValueError("到着率はサービス率より小さくする必要があります。")
utilization = arrival_rate / service_rate
system_time = 1 / (service_rate - arrival_rate)
print(f"利用率: {utilization:.1%}")
print(f"平均系内時間: {system_time:.2f}分")
出力例は次のとおりです。
利用率: 80.0%
平均系内時間: 1.00分
科目Bでは、まず入力値が安定条件を満たしているか確認するのが大切です。
λ < μ
→ 計算できる
λ >= μ
→ 待ち行列が安定しない
まとめ(試験直前用)
- M/M/1は、ランダム到着・ランダム処理時間・窓口1つ
- 最初のMは到着過程を表す
- 2番目のMはサービス時間を表す
- 1は窓口数を表す
- 基本モデルでは先着順を仮定することが多い
- 混雑状況を見て到着を変えると、単純なM/M/1から外れる
- 標準M/M/1は待ち行列容量を無限と仮定する
- 有限容量はM/M/1/Kで表す
- 到着率はλ、サービス率はμ
- 安定条件は
λ < μ - 利用率は
ρ = λ ÷ μ - ρが1に近いほど待ち時間が急増する
- データ構造のキューとは目的が異なる
M/M/1を見たら、到着・処理時間・窓口数の3点を確認する。