チュートリアル1

まずは、基数を作成するだけのシンプルなモデルで、モデルの作成とランの方法について説明します。

(Web上でモデルを参照する場合は、モデル1 をご覧下さい)

モデルを開く

作業フォルダ(C:\Worksなど)に、demo1, demo2, demo3.. のようにフォルダがある状態とします。

  1. PyCharmでサンプルモデルを開いて下さい

    • Fileメニュー -> Open でdemo1を選択します
  2. PyCharmでAlt+F12を押下し、 コマンドウィンドウ を開いて下さい

    • 以下のような画面になります
    ../_images/PycharmDemo1.png

モデルのランを行う

  1. コマンドウィンドウで delver と入力し、Enterを押して実行して下さい
    • オプションを指定していないので、カレントディレクトリ直下のrun.xlsxのシートrunがラン定義ファイルとして読み込まれ、実行されます
  2. resultフォルダが作成され、その中に計算結果のファイルが作成されていれば成功です
    • 基数や計算に使用した値が出力されています
    • その後の作業であると便利なので、計算結果と同時にインフォースのテキストファイルも出力させています

ランの流れやコマンドのオプションについては、 ランの実行 をご覧下さい。

モデルを理解する

モデル

このサンプルのモデルは、demo1のmodel\base.modelに記述されています。
モデルの文法・構造は モデルの構成要素モデルの文法 をご覧下さい。

モデルの内容

  • 計算クラスが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でプロジェクションを行う場合のセルや列(行)に相当し、計算ロジックを定義するとともに、その結果を保持します
  • を指定することで、整数型・小数型などの入る値のタイプ、スカラー値と配列のどちらかであるかを定める必要があります

ポイント

  • モデル作成では、ロジックのみを定義します。実際の計算は、参照関係を解析して順序どおりに行われます。 もし循環参照などがある場合、コンパイルエラーとなります。

インプット

ランを行うにあたっては、モデルの他に、 ラン定義出力定義インフォースアサンプション を読み込みます。
まずラン定義を読み込み、そこに定義されているとおりに他のインプットを読み込んでいきます。
また、 インプット共通のポイント もご参照下さい。

ラン定義

このサンプルでは、ラン定義はrun.xlsxのシートrunに記述されています。
サンプルのラン定義では、以下のような設定がなされています。
  • ランは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のシートinforceに記述されています。

  • 列はsexのみで、M, Fの2件が設定されています

アサンプション

このサンプルでは、アサンプションはrun.xlsxのシート(a1d)Baseに記述されています。

  • アサンプションとしてExcelファイルを指定した場合、(a1d)(a2d)で始まるシートがアサンプションのシートとして認識され、読み込まれます

    • (a1d)はスカラー値および1次元配列のアサンプションを表します
    • (a2d)は2次元配列のアサンプションを表します
  • (a1d)Baseでは、予定利率を表すスカラー値のアサンプションであるCIR, 死亡率を表す1次元配列のアサンプションであるqx_m_SLT1996, qx_f_SLT1996が定義されています

練習問題

以下の練習問題が解ければ、十分にチュートリアル1の内容を理解していることになります!