MAS コミュニティ
artisoc質問用掲示板(アーカイブ)
  
質問掲示板は移転しました。新掲示板はこちら

質問 (解決済み)

[artisocモデル] 格子モデルに於いて、ループさせないで決められたエージェント数で1回だけ実行したい
質問者: th1さん , 質問日時: 2017/03/03 21:16
はじめて質問利用します。宜しくお願いします。
格子モデルに於いて、ループさせないで決められたエージェント数で1回だけ実行したいです。尚、既に格子モデルや決められたエージェント数の設定その他は実現しています。
例えば生産活動における、ロット生産のモデルを作りたいとします。この場合、1ロットあたりの決められたジョブの量をエージェント数(例えば10エージェント等)で作成したとします。
1ロット(10エージェント)目だけを、格子モデル上で流して実行させて完了させるようなシミュレーションを作りたいです。
実際に現状で実行させると永遠にループして、2ロット目、3ロット目・・と、実行が続いてしまいます。
ユニバース上の格子モデルの設定で、「ループさせない」と設定しても、永遠に実行は自動で止まらないでループされ続けてしまいます。
1ロット分のエージェントだけが格子上を流れて停止するモデルは作れないのでしょうか?
若しくは(別とした質問で予定しますが)、各エージェントに通しIDを設定してログデータを別で加工して識別する方が良いでしょうか?
通しIDを設定する方法で解決すべきであれば、別とした質問で問合せを予定します。お手すきの際に、アドバイスを何卒宜しくお願いします。



▼解決した回答


格子モデルの設定での「ループする」の設定は、空間のループだと思われます。
これは、2次元格子空間の上下左右が繋がっている「トラース」状の空間とする設定です。
https://ja.wikipedia.org/wiki/トーラス

お考えのモデルにおける1ステップの概念はよく分かりませんが、シミュレーションを停止させたいところで「ExitSimulation()」関数などを呼べば良いかと思いますがいかがでしょうか?(ExitSimulation()関数についてはヘルプに説明があります)

例えば、エージェントに作業終了フラグ「finished(Boolean型)」をエージェント変数として設定して作業を終了したタイミングでfinishedをtrueにして、最後のエージェントのIDを10とした場合に下記のようにします。

Agt_Init {
my.finished = false
}

Agt_Step {

// 作業を終了
my.finished = true

// 自身がID10で作業終了時にExitSimulation()を実行
if (my.finished and my.ID == 10) then
ExitSimulation()
end if
}

回答者: kabochan さん , 回答日時: 2017/03/06 22:12

▼ 全ての回答


格子モデルの設定での「ループする」の設定は、空間のループだと思われます。
これは、2次元格子空間の上下左右が繋がっている「トラース」状の空間とする設定です。
https://ja.wikipedia.org/wiki/トーラス

お考えのモデルにおける1ステップの概念はよく分かりませんが、シミュレーションを停止させたいところで「ExitSimulation()」関数などを呼べば良いかと思いますがいかがでしょうか?(ExitSimulation()関数についてはヘルプに説明があります)

例えば、エージェントに作業終了フラグ「finished(Boolean型)」をエージェント変数として設定して作業を終了したタイミングでfinishedをtrueにして、最後のエージェントのIDを10とした場合に下記のようにします。

Agt_Init {
my.finished = false
}

Agt_Step {

// 作業を終了
my.finished = true

// 自身がID10で作業終了時にExitSimulation()を実行
if (my.finished and my.ID == 10) then
ExitSimulation()
end if
}

回答者: kabochan さん , 回答日時: 2017/03/06 22:12



Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
( 会社情報 情報セキュリティ・個人情報について )