シミュレーション、目的の説明↓
複数階ある建物にて、ひとつの階(このシミュレーションでは5階)に絞り込み、後述する心理的特性をもったエージェントが2か所ある階段を目的地として動くシミュレーションを作成しています。シミュレーション実行にあたってポテンシャル法を採用しており、シミュレーション実行時に最も近い目的地のどちらかへ動くようにしています。また、マップの生成においてはUniv_initであらかじめ用意したcsvファイルを読みこむことで空間を作成しています。
エージェントは壁以外の場所でランダムに発生するようにしており、 エージェントがもつ心理的特性及びそのエージェントの種類は以下の3種類ほどを実装しています。(未完成)
(シミュレーションで想定している状況は火災報知器が鳴動し、一斉に非難を開始するという状況です。)
・火災報知器鳴動時に避難する通常避難エージェント
・火災報知器鳴動時でも緊急事態ではないとゆがめて認知し、避難を開始しない正常性エージェント
・火災報知器鳴動時に通常避難者と同様に避難を開始するが、付近にいる正常性エージェントに避難を促す愛他性エージェント
困っていること↓
上記のシミュレーション結果に加えケーススタディとして、時間経過で南側の階段をシミュレーション開始から時間経過で通行不可(封鎖)することで結果を比較したいと考えていますが…
最初に思い付いた方法で、シミュレーションの実行途中で南側の階段を封鎖した状態のcsvファイルを読み込むことで表現できないかと思いましたが、うまく実装できませんでした。次に思いついた方法で、potential値をシミュレーションの実行途中で引き上げられないかと思いましたが、方法がわかりませんでした。初学者なりに書籍やMASコミュニティの資料を拝見し実装しようと奮闘しましたが、なかなかうまくいかず困っています。
上記のような状態を実装するのは難しいのかな…と現状思ってしまっています。
改善案はないでしょうか。どなたかご教授いただけたら幸いです。
※追記
csvファイルが読み取り専用の状態であるとシミュレーションがうまく動かないと思われます。お手数ですが、csvファイルをご自身のPCに保存してシミュレーションモデルと同じファイルにいれていただくと作動するはずですのでご確認のほどよろしくお願いします。
シミュレーション実行中に新しいpotential値をcsvファイルを読み込む案と、
potential値をシミュレーション実行途中に引き上げる案の両方ともありだと思います。
試しに、personのAgt_Stepの最後に
Universe.building.potential(My.X, My.Y , 0) = Universe.building.potential(My.X, My.Y , 0) + 100
を追加すると、エージェントの軌跡上にpotential値が変化し、移動が制限されることが確認できると思います。