(前頁)<<      >>(次頁)          (Up)

6章 再び要素モデルの作成
6.2 色々な要素モデル   〜 水理以外の要素モデル作成とCommonMP適応モデル作成例 〜
(CommonMPを用いた 「ダム操作員の操作とダム下流の人の反応シミュレーション」


 実用的な「ダム要素モデル」は、京都大学 大学院 工学研究科 水文・水資源研究室殿にて、既に公開されています。

 ここでは、敢えて、ダム本体モデルと、ダムのゲート操作を行う操作員を別の要素モデルとしてみました。
 それぞれのダムでは、放流開始前にサイレンや広報車による放流事前通知を行う事や、下流の水位を急激に上昇させないようにするために放流量の増加量を徐々に上昇させる等、放流操作を行う場合の手順や規則が決められています。 ダムの操作員要素モデルには、その手順や規則の動作を組み込み、ダム本体には水理学的なモデルを組み込むことで、各ダムに定められた規則が変更となった場合でも、水理学に精通していない人間が新しい規則でダムを操作する場合の要素モデルの製作や、シミュレーションの実行を行えるようにします。
 さらに、此処では、ダム下流流域にいる人間の行動を模擬する要素モデルを作成し、ダムのゲート操作による人間の行動への影響を調べられるようにしました。
 
 但し、本シミュレーションモデルは CommonMPの応用例を示す目的で制作したので、要素モデル本体は正確なモデルでは有りません。
 
 此処で使用する要素モデルは

 「ダム操作員」
 「河流流域人間行動」
 「ダム」 
 「テスト用雨量等、発生」
 「河道」 <−−(CommonMPのサンプルで提供されている『McSampleKinematicWave』を使用)

です。 下図の通りに接続します。
 此処での目玉は 「ダム操作員」、「河川流域の人間行動」等の 「自然現象」や「物理現象」ではない項目も 要素モデルとすることです。

          



 各モデルは、ループ接続があるので、「McForecastModelBase」からの派生とします。

 新たに作成する各クラスの派生関係を下図に示します。

 
 
 namespace名称は xx.yy.zz.HYMCO.OptionImpl.MyDamOperationLIB
 DLL名称は xx.yy.zz.MyDamOperation.DLL
  とします。


 これまでの要素モデル作成の手順通り、「MyModel」プロジェクトを型紙として、MyDamOperation.csproj プロジェクトを作成します。
 ファクトリークラスと、各要素モデルのスタブを作成して、スタブの動作を確認します。 

namespace xx.yy.zz.HYMCO.OptionImpl.MyDamOperationLIB
{
    public class MyDamOperationDefine
    {
           。。。。。。。。
        /// <summary>ダムゲート操作員モデル種別</summary>
        public static readonly HySObjectKind MY_DAM_OPERATOR_MODEL_KIND = new HySObjectKind("MyDamOperatorModel");
        /// <summary>ダムゲート操作員モデル名称</summary>
        public static readonly HySString MY_DAM_OPERATOR_MODEL_NAME = new HySString("ダムゲート操作員モデル");
           。。。。。。。。
    }
   public class MyDamOperationFactory : McBasicModelFactoryBase
    {
           。。。。。。。。

        public override McCalModel CreateCalModel(HySObjectKind csModelKind)
        {
            McBasicCalculateModelBase csCalModel = null;

            if (csModelKind.Equals(MyDamOperationDefine.MY_DAM_OPERATOR_MODEL_KIND) == true)
            {
                csCalModel = new MyDamOperatorModel();
            } 
           。。。。。。。。


 各要素モデルのスタブが完成したところで、 各要素モデルのメソッドを実装していきます。

 ダム操作員は、ダム上流域の雨量予測、ダムへの観測流入量、ダムの水位等から、「放流の決断」、「下流の河域への警報」、「放流操作」を行います。
 ダムは、ダム操作員の指示した放流量通りに 放流量を増やします。

 ダムの河流域の人間の行動は下記の様にします。
 ダム放流の30分前に警報を発しても、偶々それを聞き逃したりした人がいると、放流開始時までは、全員が上位へ移動しているとは限りません。 放流量を徐々に増加させ、下流域の水位の上昇率が急激でなければ、下位にいた人も余裕を持って上方向(岸辺の高い所)に移動できます。
 要素モデルは下図の用に、地域を河道方向と川岸の高さ方向に升目に区切り、その升目の中に何人の人がいるかを管理します。 また、人間が立ち入れる最低の高さ基準を設けます。 この基準の高さは、天候(河流域に降っている雨量、洪水警報等)、ダム操作員からの放流警報、河の水位、等から決定します。
 要素モデルは、計算メソッドがコールされる毎に、サイコロを振り、一定の確率で基準値より下の升目の中の何人かが、より高い方向へ移動します。移動する確率は、基準高さよりも低いほど高くします。 一回に移動できる枡目の数は1つのみとします。
 この様に、確率的に人間の動作を模擬して、呑気な人や、神経質な人等が存在するように、人間の個性を表しています。

 正確なモデルを作成するならば、季節(例えば釣りシーズン)、時刻、気温、休日か平日かの違い等、色々な条件を考慮するがありますが、ここでは、作成の一例を示すのみなので、そこまで考慮していません。



 下図に 実際に実装したシミュレションモデルを示します。


   



 プロジェクトの演算制御は、ループが存在するモデルなので、同期型に設定します。

   



 河流域の人間の行動は、別な章で作成した バイナリーファイル出力要素と、出力したバイナリーファイルの表示ツールを用いて、視覚化しています。

  下図は、放流前で、雨も降っていない時の状況です。

   



 下図は、放流が開始されて、水位が上昇しはじめた状況を示しています。 放流の警報は放流開始の30分前に行われ、その時点で 低い位置にいた人たちは(全員では無い)、岸辺の高い位置に移動を開始しています。 また、水位が上昇し始めると、下にとどまっていた人々も高い位置に移動しています。

   


 此処で示した、要素モデルは応用の可能性の一部を示したものであり、処理内容を十分に検討したもでのはありません。 
 この例を参考に、色々な応用分野の要素モデルを作成を試みて下さい。 


 ここで作成した要素モデル開発プロジェクト(Ex23_CommonMP.lzh

 ダウンロードしたら解凍して生成されたフォルダー「MyDamOp」を \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます。   
 解凍して生成されたプロジェクト:MyDamOperation.csproj を ディバッグ用ソリューションに追加し、スタートアッププロジェクト(TestModelDeveloperMainExp)の依存関係に追加します。 
 また、 解凍して生成された、「MyExerciseStep2」フォルダーを \CommonMP\CommonMPData\ 下に置きます。



(前頁)<<      >>(次頁) 

初版:2013/10/16 |