psim言語講座(第7回)連続型シミュレーションを書いてみる

  • HOME
  • psim言語講座(第7回)連続型シミュレーションを書いてみる

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

連続型シミュレーション

前回まで、psim を使って、離散イベントシミュレーションを行ってきました。

離散イベントシミュレーションとは、イベントを起因として状態が変化するようなシステムのシミュレーションの事でした。

psim は、離散イベントシミュレーションだけでなく、連続型のシミュレーションを記述する事もできます。

連続型シミュレーションとは、状態変数が時間 t に対し連続的に変化するような事象を表現できます。例えば、バケツA の中の水をバケツB に 1 リットル/秒の速度で連続的に移すような事象を表現する事ができます。

SIR モデル

一般的に連続型シミュレーションは、常微分方程式として表現されます。

感染症の数理モデルの最も簡単な数理モデルとして、SIR モデルがあります。

SIR モデルは、以下のような常微分方程式で表現されます。

[[ \frac{dS}{dt} = - \beta S I ]] [[ \frac{dI}{dt} = \beta S I - \gamma I ]] [[ \frac{dR}{dt} = \gamma I ]]

ここで、

  • S は感受性者数
  • I は感染者数
  • R は回復/隔離者数

です。以下は定数です。

  • $\beta$ は単位時間あたりの感染率
  • $\gamma$ は単位時間あたりの回復や隔離による除去率

この式が意味しているのは、

  • 感受性者は、感染者と接触すると、単位時間あたり $\beta$ の確率で感染します。接触した感染者数に比例した確率で感染します。
  • 感染者は、単位時間あたり $\gamma$ の確率で回復します。

です。

psimによる実装

psim でこの問題を表現する場合、まず 3 つの連続変数 S, I, R を以下のように定義します。

S = Value(999, name = "S", monitor = True) # 感受性者数
I = Value(1, name = "I", monitor = True) # 感染者数
R = Value(0, name = "R", monitor = True) # 回復/隔離者数

psim では、この連続変数を使って、以下のように、continuous という待ち受け式を使って常微分方程式を表現する事ができます。

beta = 0.001 # 単位時間あたりの感染率
gamma = 0.2 # 単位時間あたりの回復や隔離による除去率

def proc():
    yield continuous([S, I, R],
                     [],
                     lambda T, S, I, R: (
                         -beta * S * I,
                         beta * S * I - gamma * I,
                         gamma * I))

第1引数は S, I, R の3つの連続変数の関係を定義する事を意味します。

第3引数は S, I, R それぞれを時間の微分係数を返すラムダ式を指定しています。ただし、ラムダ式の第1引数は T になっています。この T は現在時刻を示しています。今回は利用していませんが、時間を利用した式も指定可能です。

これらは、SIR モデルの常微分方程式と一対一対応している事がお分かりかと思います。

実行結果

実行結果は以下になります。

サンプル

SIRモデルは、こちらよりダウンロードできます。

S-Quattro Simulation System がインストールされている PC 上の適当なフォルダに上記 zip を展開下さい。

zip 内には、

  • sir.py
  • sir.bat

があります。sir.py が SIR モデルを実装したコード例です。sir.bat はそれを実行するための bat ファイルです。

次回予告

次回はこのモデルをエージェントシミュレーションで書いてみようと思います。

監修:株式会社NTTデータ数理システム 機械学習、統計解析、数理計画、シミュレーションなどの数理科学を 背景とした技術を活用し、業種・テーマを問わず幅広く仕事をしています。
http://www.msi.co.jp NTTデータ数理システムができること
「数理科学の基礎知識」e-book無料ダウンロードはこちら

関連記事