チュートリアル1¶
まずは、基数を作成するだけのシンプルなモデルで、モデルの作成とランの方法について説明します。
(Web上でモデルを参照する場合は、モデル1 をご覧下さい)
モデルを開く¶
作業フォルダ(C:\Worksなど)に、demo1, demo2, demo3.. のようにフォルダがある状態とします。
PyCharmでサンプルモデルを開いて下さい
- Fileメニュー -> Open でdemo1を選択します
PyCharmでAlt+F12を押下し、 コマンドウィンドウ を開いて下さい
- 以下のような画面になります
モデルのランを行う¶
- コマンドウィンドウで
delver
と入力し、Enterを押して実行して下さい- オプションを指定していないので、カレントディレクトリ直下のrun.xlsxのシートrunがラン定義ファイルとして読み込まれ、実行されます
- resultフォルダが作成され、その中に計算結果のファイルが作成されていれば成功です
- 基数や計算に使用した値が出力されています
- その後の作業であると便利なので、計算結果と同時にインフォースのテキストファイルも出力させています
ランの流れやコマンドのオプションについては、 ランの実行 をご覧下さい。
モデルを理解する¶
モデル¶
モデルの内容¶
計算クラスがBaseで、それはCTというモジュールを持ちます。
モジュールCTでは、基数の計算を行います。
モジュールパラメータを
@range = x
@range_last = 130
としているので、 このモジュールの中ではタイムステップをxで参照することができ、 それは0から130まで計算されます。string sex = Inf.get_string("sex")
で、 string型の変数sexを作成し、インフォースから列sexをstring型で読み込みます。double CIR = Asm.get_double("CIR")
で、 double型の変数CIR(予定利率)を作成し、アサンプションからキーCIRをdouble型で読み込みます。以下では、double型の0から130までの配列である変数qxを作成します。 x番目の値には、男性であれば、アサンプションからキーqx_m_SLT1996のx番目の値を読み込みます。
double[] qx = if (sex == "M"){ Asm.get_double("qx_m_SLT1996", x) } else { Asm.get_double("qx_f_SLT1996", x) }
以下では、lxの最初の値を1とし、xが0から130まで順に、死亡率qxにより生存数lx, 死亡数dxを計算していきます。(また、 ユーティリティ関数
Utl.max
を使って、値が0以上になるようにしています)double[] lx = if (x == 0) { 1.0 } else { Utl.max(lx(x-1) - d_x(x-1), 0.0) } double[] d_x = lx(x) * qx(x)
同様に、Cx, Dx, Nx, Mxなどについても通常どおりの基数の定義を行っています。
変数¶
モデルの作成において、 変数 が最も中心となる要素となります。
- Excelでプロジェクションを行う場合のセルや列(行)に相当し、計算ロジックを定義するとともに、その結果を保持します
- 型 を指定することで、整数型・小数型などの入る値のタイプ、スカラー値と配列のどちらかであるかを定める必要があります
ポイント¶
- モデル作成では、ロジックのみを定義します。実際の計算は、参照関係を解析して順序どおりに行われます。 もし循環参照などがある場合、コンパイルエラーとなります。
インプット¶
ラン定義¶
- ランは1つのみ行います
- ランの名前はcommutationです
- 計算クラスの名前はBaseです
- モデルはmodelであり、フォルダmodelが読み込み対象になります
- 出力定義はdebugであり、出力定義のdebugの設定にしたがって結果出力を行います
- インフォースはrun.xlsx(自身のファイルを指定しています)のシートinforceから読み込みます
- アサンプションはrun.xlsx(自身のファイルを指定しています)のシートから読み込みます
- シナリオ・ショックは0番目のみを行います
モデル¶
このサンプルでは、フォルダmodel内のすべての.modelファイルを見に行きます。 対象はbase.modelしかないため、そのファイルからモデルを読み込みます。
出力定義¶
出力定義はラン定義と同じファイルのシートoutputに記述されます。
- 出力定義は1種類しか定義されておらず、その名前はdebugです
- 出力対象となるモジュール名はDEBUGと設定されています。 これをDEBUGと設定したときは特殊で、すべてのモジュールを出力するという意味になります。
- インフォースは特に制限なく、すべてのインフォースを出力するように設定しています
- シナリオ・ショックは0番目のみ出力するように設定しています
アサンプション¶
このサンプルでは、アサンプションはrun.xlsxのシート(a1d)Baseに記述されています。
アサンプションとしてExcelファイルを指定した場合、(a1d)(a2d)で始まるシートがアサンプションのシートとして認識され、読み込まれます
- (a1d)はスカラー値および1次元配列のアサンプションを表します
- (a2d)は2次元配列のアサンプションを表します
(a1d)Baseでは、予定利率を表すスカラー値のアサンプションであるCIR, 死亡率を表す1次元配列のアサンプションであるqx_m_SLT1996, qx_f_SLT1996が定義されています