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

質問 (解決済み)

[artisocモデル] 目的地の変更
質問者: rd0052hvさん , 質問日時: 2018/01/11 01:33
ルートの再探索の際にpersonルール内で「LinkのCostが10000になれば再探索」という定義を用いていますが、pointルール内でも同じように「Costが10000になればこの目的地に向かう(ダイクストラ法を用いて)」としたいのですが、初期化しないで使用していますと出てしまいます。

原因を教えていただきたいです。
またどのようなルールであればこの動きが可能になるかご教授お願いいたします。

[personルール]
If streetAgt.Cost == 10000 Then
reroute(targetPointAgt)
End if

[pointのルール]
If streetAgt.Cost < 10000 Then
personAgt.RouteArray=@dijkstra(My.ID,"6")
personAgt.RouteCount=1
ElseIf streetAgt.Cost == 10000 Then
personAgt.RouteArray=@dijkstra(My.ID,"7")
End If
personAgt.RouteCount=1



▼解決した回答


どういうアドバイスが適切なのかわかりませんが、
経路再計算は、Agt_Stepのルールのなかで、実行しないとできません。
コストが変わるとかブロックが生成されるとかは、外生的に与えられる条件とするならば、
Agt_Step{
If 何かしらの変更 == True Then
 最短経路取得
END If
}
ただここでの最短経路取得は、参照するデータは、変更前のものとは違う値を参照する必要があります。

回答者: igaguri さん , 回答日時: 2018/01/11 13:11

▼ 全ての回答


???
まず、よくわからないのが、なぜ静的存在と考えられるPointエージェント(交差点?)がルールを持ち、コスト計算し、最短経路計算をするのでしょうか?

次に、初期化していないエラーはどこで出るのでしょうか?
これだけでは回答できません。エラーの箇所は表示されるはずです。そのエラーに該当する変数を初期値を設定するなどしてください。
経験上ですが、If文の書き方のミスにより、エージェント型変数に何も入っていないときに、起こることが多いエラーです。
 

回答者: igaguri さん , 回答日時: 2018/01/11 11:36
レシピブックの02.03を参考にしてルールを作成し、コストに関してはできるかどうかを試しに作ってみました。
できない理由がわかりました、ありがとうございます。

「リンクのコストが変わるorブロックが生成される」このどちらかでif文を作成し、エージェントの動きを変更したいのですが、適切なルールまたはアドバイスいただけますでしょうか。
度々申し訳ありませんが、お願いいたします。

回答者: rd0052hv さん , 回答日時: 2018/01/11 12:22
どういうアドバイスが適切なのかわかりませんが、
経路再計算は、Agt_Stepのルールのなかで、実行しないとできません。
コストが変わるとかブロックが生成されるとかは、外生的に与えられる条件とするならば、
Agt_Step{
If 何かしらの変更 == True Then
 最短経路取得
END If
}
ただここでの最短経路取得は、参照するデータは、変更前のものとは違う値を参照する必要があります。

回答者: igaguri さん , 回答日時: 2018/01/11 13:11



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