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

質問 (解決済み)

[artisocモデル] ダイクストラ法に登場する「ノード」はエージェントに分類されますか
質問者: natsumiさん , 質問日時: 2020/12/10 10:45
はじめまして。
artisocのプログラム内で

①エージェントが最寄りのノードを見つける
②見つけたノードから最短距離で目的地へ向かう

といったことを実装したいのですが①のやり方がわからずこまっています。
ノードがエージェントに分類されるのであれば
MakeoneAgtSerAroundOwnをもちいて周囲のノードをリストアップしてその中から選ぶようにできそうだと感じたのですが...



▼解決した回答


ダイクストラ法に登場するノードはエージェントです。

Personから見て、最寄りのノードは下記のように記述すると取得できます。
なお、MakeoneAgtSerAroundOwnは視野を持つなど検索できる範囲が自分の周りに限定する場合に利用します。


Dim pointAgtSet As AgtSet, pointAgt As Agt
Dim nearestPointAgt As Agt
Dim nearestDistance As Double
Dim d as Double

nearestDistance = Sqr(GetWidthSpace(UNiverse.Map)^2 + GetHeightSpace(UNiverse.Map)^2)

MakeAgtSet(pointAgtSet, Universe.Map.Point)
For Each pointAgt In pointAgtSet
d = MeasureDistance(My.X, My.Y, pointAgt.X, pointAgt.Y, Universe.Map)
If d < nearestDistance Then
nearestDistance = d
nearestPointAgt = pointAgt
End If
Next pointAgt

PrintLn("nearestPointAgt.ID=" & nearestPointAgt.ID)

もし、PersonがPoint(targetPointAgt)上に存在して、リンクされたノードに限定して選択したい場合は、MakeAgtSetではなく、以下の通り記述してください。

DuplicateAgtSet(pointAgtSet, targetPointAgt.NearAgtSet)

回答者: m.tamada さん , 回答日時: 2020/12/10 11:54

▼ 全ての回答


ダイクストラ法に登場するノードはエージェントです。

Personから見て、最寄りのノードは下記のように記述すると取得できます。
なお、MakeoneAgtSerAroundOwnは視野を持つなど検索できる範囲が自分の周りに限定する場合に利用します。


Dim pointAgtSet As AgtSet, pointAgt As Agt
Dim nearestPointAgt As Agt
Dim nearestDistance As Double
Dim d as Double

nearestDistance = Sqr(GetWidthSpace(UNiverse.Map)^2 + GetHeightSpace(UNiverse.Map)^2)

MakeAgtSet(pointAgtSet, Universe.Map.Point)
For Each pointAgt In pointAgtSet
d = MeasureDistance(My.X, My.Y, pointAgt.X, pointAgt.Y, Universe.Map)
If d < nearestDistance Then
nearestDistance = d
nearestPointAgt = pointAgt
End If
Next pointAgt

PrintLn("nearestPointAgt.ID=" & nearestPointAgt.ID)

もし、PersonがPoint(targetPointAgt)上に存在して、リンクされたノードに限定して選択したい場合は、MakeAgtSetではなく、以下の通り記述してください。

DuplicateAgtSet(pointAgtSet, targetPointAgt.NearAgtSet)

回答者: m.tamada さん , 回答日時: 2020/12/10 11:54



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