- HOME
- psim言語講座(第7回)連続型シミュレーションを書いてみる
2022年9月 2日 13:31
本記事は当社が発行しているシミュレーションメールマガジンVol.7の記事です。
シミュレーションメールマガジンの詳細・購読申込は こちら
- psim言語講座(第1回)M/M/1シミュレーションを書いてみる
- psim言語講座(第2回)M/M/1シミュレーションを読んでみる
- psim言語講座(第3回)M/M/1 シミュレーションを拡張してみる
- psim言語講座(第4回)生産ラインシミュレーションを書いてみる
- psim言語講座(第5回)psimとexcelを連携してみる
- psim言語講座(第6回)psimとexcelを連携してみる(グラフ編)
- psim言語講座(第7回)連続型シミュレーションを書いてみる
- psim言語講座(第8回)エージェントシミュレーションを書いてみる
- psim言語講座(第9回)エージェントシミュレーションを拡張してみる
- psim言語講座(第10回)チュートリアル編(1)psim で 「Hello World!」
- psim言語講座(第11回)チュートリアル編(2)psim のプロセスを使いこなす
- psim言語講座(第12回)チュートリアル編(3)psim のファシリティを使いこなす
- psim言語講座(第13回)チュートリアル編(4)psim のストアを使いこなす
- psim言語講座(第14回)チュートリアル編(5)psim のスケジューラを使いこなす
- psim言語講座(第15回)チュートリアル編(6)(続)psim のストアを使いこなす
連続型シミュレーション
前回まで、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 ファイルです。
次回予告
次回はこのモデルをエージェントシミュレーションで書いてみようと思います。
http://www.msi.co.jp NTTデータ数理システムができること