PhysioDesigner
A modeling tool for multilevel physiological systems

シンプルな PHML モデルの作成


 このドキュメントでは、PhysioDesignerの単純なモデルを作成する方法を示す。ここでは Bonhoeffer-van der Pol 方程式(BVP)を例としてモデルを作成しよう。BVPモデルは次の2次元常微分方程式によって記述される。
bvp

ここで、x と y はそれぞれ、膜電位と不応性を表しています。次のパラメータ値を使用します。a= 0.7、b= 0.8、c= 3.0、z= -1。


1. モデルの構造を考える


 まずはじめに、モデルの構造について考慮する必要がある。もちろん、モデリングプロセス中に構造を変更することはできるが、事前に考えておいた方が見通しよくモデル構築作業を進めることができる。
 私たちの例の場合では、2つの力学変数、すなわち x と y がある.これら2変数の両方を単一のモジュールに記述することもできるし、また,別々に2つの異なるモジュール内にそれぞれ一変数ずつ設定することもできる。
Pasted Graphic  or  Pasted Graphic 1

 このモデルはこのように単純なのでほとんど違いがありません。しかし,例えば50個の動変数を含むような、はるかに複雑なモデルの場合には、モデル作成に着手する前に各方程式の生理学的な意味に従って構造を考え導入しておいた方が、遥かにスムースにモデル構築を進めることができる。
 本ドキュメントでは両方の方法を示する。まずは,両式が同一モジュール内に設定されている、単純なケースから始めよう。


2. 1モジュールから成るモデルの作成


2.1 モジュールの作成


モジュールを作成するには,PhysioDesigner キャンバス上でマウスの右クリックをするとコンテキストメニューが表示される."Make a Functional-Unit Module..." を選択する.
Pasted Graphic 2

次に、表示されたダイアログ内でモジュール名を入力する。
Pasted Graphic 3

OKを押すと、BVPという名前のモジュールが表示される。
Pasted Graphic 4


2.2. Physical quantity "x" の定義


モジュール上でマウスの右ボタンをクリックし、 "Edit Physical-Quantity..." を選択メニューから選択する。
Pasted Graphic 5

Physical-Quantity ダイアログが現れる.
Pasted Graphic 7

 まず、動変数 x を定義し、ODEによって記述されるダイナミクスを定義する。タイプに "state" を選択し、基本設定] タブで、[名前] フィールドに "x" を設定する。 "state" を選択することで、システムの状態を定義する変数の1つであることを宣言することを意味する.後でその導関数を定義する。

Pasted Graphic 8

 ユニットは、コンボボックスから選択しなければなりません。そうでない場合は、新しいユーザー定義のユニットを追加するには、編集ボタンを押してください。ユニットはどこかに説明される編集する方法について説明します。
 physical-quantity の型と名前を設定すると,初期値、ドメイン、Implementation など、physical-quantity のタイプに応じて、設定すべき詳細情報に応じたタブがアクティブになる。

Pasted Graphic 9

 常微分方程式の場合には、少なくとも "Initial value" と "Implementation" を定義する必要がある。また,"Description" をまめに記入しておくと、この physical-quantity が何であったかを後に知るのに役立つ。"Domain" と "Problem condition set" は主に偏微分方程式を定義するときに必要になる情報を定義するためのインターフェイスである。このため、ここではその詳細には触れない。


2.3 x の Implementation の定義


 "Implementation" タブでは ODE など physical-quantity に具体的に式を定義できる。今の場合は x にODEを定義する。"Implementation" タブでは、まず定義しようとしている式のタイプを選択する。下の図では、コンボボックスの上から順に ode, pde それと conditional が選択可能になっている。それぞれ、常微分方程式、偏微分方程式、およびプログラム言語のIF構文に似た条件式を意味する.

Pasted Graphic 10

ここではコンボボックスから "ode" を選択しよう。デフォルトの式が自動的に提供されます。

Pasted Graphic 11


さて,これから式を編集するのだが,2つの方法が用意されている。1つ目は,C言語のスタイルで式を書く( "
c*(y+x-x*x*x/3+z)" という感じ)方法である.ウィンドウの下部にあるテキストボックスに "c*(y+x-x*x*x/3+z)" と入力してEnterキーを押すと、レンダリングされた方程式が更新され表示される。

Pasted Graphic

2番目の方法は、数式エディタを用いて編集する方法である.数式を入力するテキストボックスの右横にある Math editor ボタンを押すことで,編集ダイアログが立ち上がる.

Pasted Graphic 1

数式エディタの使用方法の詳細は別の場所にゆずる。ここで式を編集した後、Apply ボタンを押し,Close することでメインウィンドウに編集内容を反映させることができる。


2.3. x の初期値の定義


初期値タブに移動して初期値を設定する.初期値にはデフォルト設定はないので,適切に与える必要がある.これはODEを解くためにそれが必須の項目である。

Pasted Graphic 4

ウィンドウの下部には、"Equation" というラベルが付いたテキストボックスがあり、x = 4 のように式の形で初期値を設定する。リターンキーを押すと、レンダリングされた式が表示される。


2.3. x の説明文の設定


physical-quantity の説明を書いておくことで、後からこの physical-quantity の意味を思い出すこともできるし、特に、モデルをシェアしたときにモデル開発者本にではないユーザーがモデルの意味を理解するの役立つ.

Pasted Graphic 5

x に関しては以上で全てである。次は y の定義について説明する.


2.4 Physical quantity "y" の定義


State type の Pyysical quantity y を定義する。手順は x の場合と同じである。y の型と名前を宣言し、Implementation と Initial value を定義する。新しい物理量を定義するためには、ウィンドウの上部にあるテーブルで最下段の何も書かれていない行をクリックする。

Pasted Graphic 7

すると空っぽの "Basic setting" タブが開く.
"State" type を選択し,Name に y をセットする.

Pasted Graphic 8

Implementation タブでは
diff(y, time) = -(x-a+b*y)/c を定義する.

Pasted Graphic 9

次に初期値を設定する."Initial value" タブで y=1 を定義する.

Pasted Graphic 10

そして Description を記述する.

Pasted Graphic 11

以上で y の定義は完了である.


2.5 パラメターの定義


BVP モデルには 4 つのパラメータが含まれている. a, b, c とモデルへのインプットに対応する z である. これらを "static-parameter" として定義する. a を例としてとりあげて,以下に紹介する.
まず, Type と Name をセットする.

Pasted Graphic

static-parameter の場合、初期値の設定は必要ないため,初期値のタブは編集可能の状態にはならない.その後、"Implementation" タブに移動し "algerabic equation" を意味する定義型の "ae" を選択する。

Pasted Graphic 1

デフォルトで "a=0" が自動的にセットされる. この右辺を Equation テキストボックスで編集する.もちろん,数式エディタを利用してもよい.

Pasted Graphic 3

ここでは a=0.7 としてリターンキーを押す.すると,レンダリングされた数式が更新される.
あと Description を記述すれば a の定義に関してはこれで全てである.同様に b, c, z を定義する. 値は b=0.8, c=3.0, z=-1.

static-parameter をすべて定義し終えたら、ウィンドウの右下部にある [OK] ボタンを押す.これでモデル作成は修了である.



3 シミュレーション



今作成したモデルのシミュレーションを行う.
メニューの Simulation > Flint を選択する.

Pasted Graphic 4

もしセーブをしていなければ,この時点でセーブを促すポップアップが表示されるので,セーブしておく.

Pasted Graphic 5

すると Flint が起動する. もしこれが Flint を起動する初回であれば,Flint のパスを問うダイアログが表示されるかもしれない.その場合は,Flint.app をのパスを指定する,

Pasted Graphic 8

もし Flint.app をインストールしていなければ,PhysioDesigner と同じサイトから Flint のパッケージをダウンロードし,インストールする.

Pasted Graphic 9

Flint は、シミュレーション時間、シミュレーション時間ステップなど、シミュレーションパラメータを設定するためのダイアログを表示する。モデルにこれらの情報が書かれていればそれを読み込み表示する.その場合でも変更することは可能である.これらの値をセットした後シミュレーションを開始するために Run ボタンを押す。

Pasted Graphic 7

シミュレーションが終了した後は,Plot タブへ移動する.physical-quantity 名のタグが最左列に用意されるので,そのタグをY左軸,あるいはY右軸の横のスペースへ drag & drop する.これでその physical-quantity のグラフが表示される.

Pasted Graphic 10

もし別のパラメータ値におけるシミュレーション実行したい場合は,Flint を一旦閉じる必要は無い.PhysioDesinger に戻って,パラメータの値を変更し,Flint の Simulation タブで再び Run を押せば良い.パラメータの変更は自動的に反映されるようになっている.


4. 2モジュールから成るモデルの作成

4.1 モジュール達の作成


2モジュールから成るモデルを作成する.x と y のダイナミクスをそれぞれ別のモジュールとして作成することとする.
Pasted Graphic

x モジュールの上で右クリックをし,Edit Physical-Quantity... を選択する.上で示したように, x を state タイプの physical quantity として定義し,c, z を static-parameters として定義する.
x の ODE の右辺 (
c*(y+x-x*x*x/3+z)) には y の項が含まれる.y の値はもう一方のモジュールに定義することしたので,y の ODE は x モジュールの中には定義しない.その代わりに,y の値を y モジュールから入力として受け取る.このために,y を variable-parameter とっして定義し,in-port と関連づける,という作業を行う.以下に詳しく説明する.


4.2 variable-parameter の定義と in-port への関連づけ


Type で variable-parameter を選択する.

Pasted Graphic

次に,この physical-quantity を in-port に関連づける.しかし,この状態では関連付けをする in-port がまだ1つも無いので,まずは in-port を作成する.
これらの作業は,このタブの右側にある "Link to a port" という囲みの中で行うことができる.Direction に In を選択する.

Pasted Graphic 1

Port の名前を下部の "Name" 欄にセットする.ここでは名前を "port_y" とする.

Pasted Graphic 2

そして "Add" ボタンを押す.

Pasted Graphic 3

すると,"port_y" がリストボックスに現れる.これをクリックして選択する.

Pasted Graphic 4

これらの作業により,この physical-quantity を "port_y" in-port に関連づけることができる.
OK ボタンをおして,編集を確定する.

module x に port_y という in-port が作成されていることが Canvas 上で確認できる.
Pasted Graphic 5

4.3 variable-parameter の out-port への関連づけの定義


モジュール y に定義する state y のダイナミクスの中に x の値が必要である.このため,state x の値を out-port に関連づけし,モジュール y から参照できるようにしておく必要がある.この設定をするため,もう一度module x 上で右クリックし,Edit Physical-Quantity... を選択する.

x の行を選択し,右側の囲みで Out を選択する.

Pasted Graphic

out-port を作成する必要があるので,Name の中に名前を入力し(ここでは,port_x),Add ボタンを押す.これで out-port が作成される.

Pasted Graphic 1

port_x がリストエリアに表示されるので,それを選択する.

Pasted Graphic 2

OK ボタンを押して編集を確定する.Canvas 上では module x に out-port が表示されていれば上記作業は成功している.

Pasted Graphic 3

右クリックして現れるコンテキストメニューの中から Edit Ports... を選ぶと,port に関する情報をまとめて見る,あるいは編集することができる.in-port, out-port の作成,削除,physical-quantity への関連付け等は,
このダイアログ上でも実行できる.


Pasted Graphic


4.4 モジュール y の定義


同様にモジュール y の中に state y を定義する(式は diff(y, time)=-(x-a+b*y)/c).同時に,static-parameter a, b, c. (a=0.7, b=0.8, c=3.0) も定義する.また,x を in-port に関連づけられた variable-parameter として定義する.

Pasted Graphic 1

y を out-port に関連づけることも忘れずに.

Pasted Graphic 2


4.5 Edge を張る


 これまでで,Canvas 上には2つのモジュール x, y があることになる.それぞれのモジュールは in-port と out-port を1つずつ持っている.

Pasted Graphic 3

モジュール y の in-port の port_x はモジュール x の out-port の port_x からの出力を入力として受け取る.この関係を定義するには,モジュール x の port_x を左クリックして,そのままドラッグしてモジュール y の port_x にドロップすることで,両ポート間にエッジを張ることができる.

PhysioDesignerScreenSnapz002

2つのポート簡易,機能的エッジが張られる.
Pasted Graphic 4

同様に,port_y に関してもエッジを張る.この場合は,モジュール y から モジュール x へドラッグ & ドロップする.
Pasted Graphic 5

エッジを直線ではなく折れ線表示しにするためには,エッジの上で右クリックをして,表示されるメニューからTo Orthogonal を選択する.
PhysioDesignerScreenSnapz003
エッジは下のように表示される.
Pasted Graphic 6