現在、避難シミュレーションを作成しています。20×17のセル空間を教室とし、(0,8)のセルを出口に設定しています。出口までの距離は出口とのx座標、y座標の差の絶対値の和とし、空間変数cellで表しています(例えば(3,10)の距離は5)。人エージェントがいるセルとの上下左右のセルの空間変数を比べることで出口まで移動させたいのですが、「配列値に対して、演算はできません。」というエラーが出てしまっているのですが、どこがエラーの原因なのでしょうか?
// 周囲のセルの数字を読み取る処理
Dim minIndex as Integer
Dim i as Integer
Dim j as Integer
Universe.classroom.tmp(0) = Universe.classroom.cell(My.X, My.Y) // 0
Universe.classroom.tmp(1) = Universe.classroom.cell(My.X+1, My.Y) // 1
Universe.classroom.tmp(2) = Universe.classroom.cell(My.X, My.Y+1) // 2
Universe.classroom.tmp(3) = Universe.classroom.cell(My.X-1, My.Y) // 3
Universe.classroom.tmp(4) = Universe.classroom.cell(My.X, My.Y-1) // 4
minIndex = 0
for i = 1 To 4
If Universe.classroom.tmp(minIndex) > Universe.classroom.tmp(i) then
minIndex = i
end If
Next i
for j = 0 To 4
If Universe.classroom.tmp(minIndex) == Universe.classroom.tmp(j) then
If Rnd() > 0.5 then
minindex = j
End if
End if
Next j
cellもtmpも空間上の変数ですね。 では、
Universe.classroom.tmp(My.X, My.Y, 0) = Universe.classroom.cell(My.X, My.Y, 0)
・・・
と記述すればよいと思います。
なお、ポテンシャル法を使った例として、下記が参考になると思います。
モデルの作り方 > 06.ポテンシャル法を使って、買い回り行動を再現しよう
https://mas.kke.co.jp/howto/06-%e3%83%9d%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a3%e3%83%ab%e6%b3%95%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81%e8%b2%b7%e3%81%84%e5%9b%9e%e3%82%8a%e8%a1%8c%e5%8b%95%e3%82%92%e5%86%8d%e7%8f%be/
現在universe.classroom.cellは実数型、universe.classroom.tmpは整数型となっています。
モデルを理解したので質問させてください。 Universe.classroom.cellとUniverse.classroom.tmpは整数型の変数でしょうか? もし、整数型の変数であれば、空間上に配置されているため、
(X, Y, Layer)の3つの座標を指定する必要があります。