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

質問 (解決済み)

[artisocモデル] 配列インデックスと配列のサイズについて
質問者: kentaroさん , 質問日時: 2019/10/31 14:27
空間の大きさ50×50でT字路の避難モデルを作っています。
Agt_Init{
My.X = 49
My.Y = 25
}

Agt_Step{
Dim min_x As Integer
Dim min_y As Integer
Dim min_p As Integer

//出口に着いたら消滅する
If Universe.Building.potrntial(My.X, My.Y, 0) == 0 then
DelAgt(My)
End If

//周囲のセルを調べ、最もポテンシャルの低いセルを記憶する
min_p = 99
min_x = My.X
min_y = My.Y

//現在地のセル
If Universe.Building.potrntial(My.X, My.Y, 0) < min_p Then
min_p = Universe.Building.potrntial(My.X, My.Y, 0)
min_x = My.X
min_y = My.Y
End If

//右のセル
If Universe.Building.potrntial(My.X, My.Y + 1, 0) < min_p Then
min_p = Universe.Building.potrntial(My.X, My.Y + 1, 0)
min_x = My.X
min_y = My.Y + 1
End If

//左のセル
If Universe.Building.potrntial(My.X, My.Y - 1, 0) < min_p Then
min_p = Universe.Building.potrntial(My.X, My.Y - 1, 0)
min_x = My.X
min_y = My.Y- 1
End If

//上のセル
If Universe.Building.potrntial(My.X - 1,My.Y, 0) <min_p Then
min_p = Universe.Building.potrntial(My.X - 1,My.Y, 0)
min_x = My.X - 1
min_y = My.Y
End If

//下のセル
If Universe.Building.potrntial(My.X + 1,My.Y, 0) <min_p Then
min_p = Universe.Building.potrntial(My.X + 1,My.Y, 0)
min_x = My.X + 1
min_y = My.Y
End If

//ポテンシャルの低いセルに移動
My.X = min_x
My.Y = min_y

personエージェントに上のルールを書き込むと、配列インデックス(=2525)が配列のサイズ(=2500)を超えています。というエラーが出ます。
なぜこのエラーが出るのか、どうしたら解決できるのかわかりません。
わかるかたがいれば教えていただきたいです。よろしくお願いいたします。



▼解決した回答


あと、そもそもMy.X = 49というのが問題ですね。
X座標の端っこではなく、48くらいにしてください。

回答者: igaguri さん , 回答日時: 2019/10/31 14:46

▼ 全ての回答


おそらく、My.X + 1やMy.Y + 1、My.X - 1やMy.Y - 1を参照する際に、空間の外の座標となっているからです。例えば、Xが-1とかになっているのでしょう。
それを避けるために、エージェントは50×50の空間の端っこ(つまりXまたはYが0もしくは49)には入らないように壁を作成したり、出口を少し手前に持ってくると改善できると思います。

回答者: igaguri さん , 回答日時: 2019/10/31 14:44
あと、そもそもMy.X = 49というのが問題ですね。
X座標の端っこではなく、48くらいにしてください。

回答者: igaguri さん , 回答日時: 2019/10/31 14:46



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