psim言語講座(第1回)離散イベントシミュレーション(M/M/1モデル)を書いてみる

  • HOME
  • psim言語講座(第1回)離散イベントシミュレーション(M/M/1モデル)を書いてみる

本記事は当社が発行しているシミュレーションメールマガジンVol.1の記事です。
シミュレーションメールマガジンの詳細・購読申込は こちら

はじめに

この講座では、S4 のシミュレーションエンジンの基盤となっている psim言語を使ったシミュレーション方法について、紹介していきます。S4 では基本的には GUI でシミュレーションを組む事ができますが、psim言語を知っていると、より細かなカスタマイズが可能ですし、スクリプト化すれば様々な分析も可能になります。

  • S4 の psim言語の概要が知りたい
  • psim言語を使いこなせるようになりたい
  • シミュレーションをスクリプト化して自分で分析してみたい

とお考えの方は、是非お読み下さい。

psim言語

psim言語とは S4 Simulation System に搭載される、離散イベントシミュレーションを記述するための言語です。Python言語上のライブラリとして提供されます。離散イベントシミュレーションとは、イベントを起因として状態が変化するようなシステムのシミュレーションの事です。なお、シミュレーションには、短い時間ステップごとに全ての対象物の状態を観測して、状態を変化させる連続型のシミュレーションもあります。psim言語は双方をサポートしていますが、ここでは、離散イベントシミュレーションに着目します。

M/M/1 モデル

離散イベントシミュレーションの代表例としては、銀行の窓口を想像してみて下さい。銀行の窓口には、ランダムにお客様が到着します。窓口は同時に一人しかサービスを行えないので、窓口には行列が発生します。窓口でのサービス時間はお客様ごとに異なる時間を要します。この時、行列はどのぐらいの長さになり、お客様は概ねどのぐらい待つのかを見積る事はサービス提供者にとって、非常に重要です。離散イベントシミュレーションは、このようなシステムのシミュレーションを行います。

このような待ち行列モデルは、理論的にも分析されていて、前述のモデルは M/M/1 モデルと呼ばれています。

理論的な説明はここでは省きますが、到着率(単位時間あたりに到着する人数)をλ(ラムダ)とし、サービス率(単位時間あたりにサービスを行える人数)をμ(ミュー)とすると、

  • ρ = λ / μ ...(平均利用率)
  • Q = ρ / (1 - ρ) ...(平均待ち行列)
  • W = Q / μ ...(平均待ち時間)

になります。

例えば、お客様は平均60秒ぐらいで到着するなら、到着率(λ)は1/60になります。サービス時間は平均で50秒ぐらいなら、サービス率(μ)は1/50になります。この値を代入すると、平均待ち時間(W)は250秒になると予想できます。では、実際にこのような結果になるかを psim を用いて検証してみようと思います。

スクリプト例

M/M/1 を psim言語を使って書いた例が、こちらからダウンロードできます。

S4 Simulation System がインストールされている PC 上の適当なフォルダに上記 zipファイルを展開下さい。 zip内には、

  • mm1.py
  • mm1.bat

があります。mm1.py が M/M/1モデルを psim を使って実装したコード例です。mm1.bat をそれを実行するための batファイルです。mm1.bat をダブルクリックして実行すると、平均到着時間60秒、平均サービス時間50秒で、10万秒(>27時間)のシミュレーションを行います。実行すると、例えば、以下のような結果が表示されます。

  • 平均待ち時間: 253.955(理論値: 250.000)
  • 平均システム内客数: 4.970(理論値: 5.000)

理論値と書かれているものは、M/M/1モデルでの予想値です。

何度か実行してみると、10万秒のシミュレーションを行っても、個々のシミュレーション結果は、理論値とはかなり食い違う事がお分かりになるかと思います。理論値はあくまでも期待値です。実際にシミュレーションを行うとこのようなブレを実感する事ができます。

次回、このコードを読んでいきたいと思います。

監修:株式会社NTTデータ数理システムNTTデータ数理システムは「数理科学とコンピュータサイエンスにより現実世界の問題を解決する」をミッションとして設立され、35年以上にわたり皆様の課題解決を支援してきました。機械学習、統計解析、数理計画、シミュレーションなどの数理科学を背景とした技術を活用し、業種・テーマを問わず幅広く仕事をしています。

株式会社NTTデータ数理システム
〒160-0016 東京都新宿区信濃町35番地 信濃町煉瓦館1階
http://www.msi.co.jp
「数理科学の基礎知識」e-book無料ダウンロードはこちら

関連記事