MAS コミュニティ
artisoc質問用掲示板

質問 (解決済み)

[artisocモデル] エージェントを目的地に向かってX軸方向に移動させて一旦止めてY軸方向に動かす方法について
質問者: mikoさん , 質問日時: 2019/06/12 13:20
エージェントをランダムに決めた目的地に向かって
X軸方向に移動させて
一旦止めて
Y軸方向に動かす方法
について教えてください。
例えば15*15の空間で以下のようにルールを書いても斜めにエージェントが動いたり、X軸方向、Y軸方向、また更にX軸方向に動いてしまいます。

Agt_Init{
My.X=1
My.Y=0
my.finished = false
My.目的地X=Rnd()*15
My.目的地Y=Rnd()*15
}

Agt_Step{
If My.目的地X>My.X then
ForwardXCell(1)
else if
My.目的地X<My.X then
ForwardXCell(-1)
end if
end if

If My.目的地Y<My.Y then
ForwardYCell(1)
else if
My.目的地Y<My.Y then
ForwardYCell(-1)
end if
end if
}


宜しくお願い致します。



▼解決した回答


If文の外にリターンを書くと止まってしまいます。
以下のように書いたらどうでしょう?

If My.目的地X>My.X then
//My.目的地X == My.Xの時はこの中に入ってこない
ForwardXCell(1)
  Return
else if My.目的地X<My.X then
//My.目的地X == My.Xの時はこの中に入ってこない
ForwardXCell(-1)
Return
end if

//My.目的地X == My.Xの時に実行される処理を以下に書く

回答者: ObiWan さん , 回答日時: 2019/06/13 14:39

▼ 全ての回答


Agt_stepの中で、X座標の評価をして移動したあとに、続けてY座標の評価-移動をしているため、斜めに移動しているのだと思います。
ForwardXCellでX方向に移動した後にReturnを入れて、続けてY座標の評価が行われないようにするとよいでしょう。

回答者: ObiWan さん , 回答日時: 2019/06/13 13:25
どうもありがとうございます。
しかしreturnを入れたら今度はそのまま停止してしまいました。
続けてY軸方向に動かすにはどうすれば良いのでしょうか。
ご教示宜しくお願い致します。

回答者: miko さん , 回答日時: 2019/06/13 14:34
If文の外にリターンを書くと止まってしまいます。
以下のように書いたらどうでしょう?

If My.目的地X>My.X then
//My.目的地X == My.Xの時はこの中に入ってこない
ForwardXCell(1)
  Return
else if My.目的地X<My.X then
//My.目的地X == My.Xの時はこの中に入ってこない
ForwardXCell(-1)
Return
end if

//My.目的地X == My.Xの時に実行される処理を以下に書く

回答者: ObiWan さん , 回答日時: 2019/06/13 14:39

MASコミュニティ
掲示板TOP







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