Skip to the content.

最終更新日:2026年8月2日

まず結論

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点を確認する。

© 2024-2026 stemtazoo. All rights reserved.