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

質問  (回答受付中)

[artisocモデル] エージェント集合型変数の中身(AgtSet)について
質問者: hidaka_maさん , 質問日時: 2018/12/26 15:43
指定した座標にエージェントが存在するかの判定をhttps://mas-auth.kke.co.jp/board/item/index.php?q=55に倣って,行いたいと考えております.

2×2の格子状の空間{(x,y) = (0,0),(0,1),(1,0),(1,1)}でエージェントA(初期位置(0,0)),エージェントB(初期位置(0,1))がいて,Bが(1,1)にいる時に,Aが(0,1)に移動するようなモデルを作成したいと考えております.

その際,エージェントAはMakeAgtSetAroundPositionCellを使って,(1,1)にエージェントがいるかどうかの判定を行おうとしているんですが,この判定が上手くいきません.

ツリーは
Universe
−test
−−A
−−−mawari
−−B
−−−mawari
です.

AのMy.mawariやCountAgtSet(My.mawari)は,Printで出力すると100000000,0と出力されます.
なので,エージェントAはエージェントBのことを認識できていないか,エージェント集合型変数について誤解しているかもしれません.


エージェントA
Agt_Init{
}
Agt_Step{
if My.Y == 1 Then
 My.Y = 0
Else///My.Y = 0
 MakeAgtSetAroundPositionCell(My.mawari, Universe.test, 1,1,0,1,Universe.test.B.mawari)
 If CountAgtSet(My.mawari) >= 1 Then
  My.Y = 1
 End if
End if
}


エージェントB
Agt_Init{
}

Agt_Step{
if My.Y == 0 Then
 if My.known/100 > Rnd() Then
  My.Y = 1
 End if
else///My.Y == 1
 My.known = My.known + 1
 My.Y = 0
End if

MakeAgtSetAroundPositionCellやエージェント集合型変数に対する知識不足だと思うのですが,解決策を教えてもらえないでしょうか?



▼ 全ての回答


artisoc4.0以降には、ヘルプがあるので、きちんと確認しましょう。
ヘルプによると、
MakeAgtSetAroundPositionCell(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
arg1:AgtSet エージェント集合型変数
arg2:Space 空間
arg3:Integer X座標
arg4:Integer Y座標
arg5:Integer Layer
arg6:Integer 視野
arg7:AgtSet 指定したエージェント集合型変数
つまり、arg7のなかに、あらかじめエージェントが存在しないと使えません。
あなたのコードを見ると
MakeAgtSetAroundPositionCell(My.mawari, Universe.test, 1,1,0,1,Universe.test.B.mawari)

Universe.test.B.mawariには何もエージェントがいない状態になっているのではないでしょうか。
少々ややこしい関数ですが、すべてのエージェントをどこかのAgtsetに格納してから、それをarg7の引数にすれば良いと思います。

回答者: igaguri さん , 回答日時: 2019/01/10 08:54



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