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

質問 (解決済み)

[artisocモデル] 最もちかいポイントを指定する関数を作成しています
質問者: paramaさん , 質問日時: 2020/01/23 13:02
Universe.Map.Person下で以下の関数を作成していました



Function selectpoint() as integer{

Dim neighbor as Agtset
Dim one as Agt
Dim ekkusu as double
Dim wai as double
Dim nagasa as double
Dim itizi as double
Dim hozon as integer

itizi= 100
hozon = 0
MakeOneAgtSetAroundOwn(neighbor,50,Universe.Map.Point,False)


for each one in Universe.Map.Point
 ekkusu = (My.X- one.X)^2
 wai = (My.Y - one.Y)^2
 nagasa = (ekkusu + wai)^0.5

 if nagasa <= itizi then
 hozon = one.ID
i tizi = nagasa
 End if
next one

return(hozon)
}


この関数を用いて,Universe.Map.Personの初期位置からUniverse.Map.Pointのなかで一番近いエージェントを求めることを期待していました
しかし,うまく行きません
ここで私は,これはMakeOneAgtsetArounDOwnで周囲のPointエージェントを格納する中でPointエージェントのIDとneighborのIDでは同じ地点を示しているはずなのにIDが異なるのではないかということを考えました
どのようにしたらうまくいくでしょうか



▼解決した回答


まずは、質問される前に、よくデバッグしてみることをお薦めします。
パッと見ると、
MakeOneAgtSetAroundOwn()とneighborはなんのために書いたのでしょうか。
その後、neighborは使っていないように見えます。
普通は、
for each one in Universe.Map.Point
ではなく、
for each one in neighbor
とすると思います。
あと、nagasaは
nagasa = (ekkusu + wai)^0.5
よりも
nagasa = MeasureDistance(My.X, My.Y, One.X, One.Y, Universe.Map)
とする方がスマートです。

回答者: igaguri さん , 回答日時: 2020/01/23 13:43

▼ 全ての回答


まずは、質問される前に、よくデバッグしてみることをお薦めします。
パッと見ると、
MakeOneAgtSetAroundOwn()とneighborはなんのために書いたのでしょうか。
その後、neighborは使っていないように見えます。
普通は、
for each one in Universe.Map.Point
ではなく、
for each one in neighbor
とすると思います。
あと、nagasaは
nagasa = (ekkusu + wai)^0.5
よりも
nagasa = MeasureDistance(My.X, My.Y, One.X, One.Y, Universe.Map)
とする方がスマートです。

回答者: igaguri さん , 回答日時: 2020/01/23 13:43



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