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

質問 (解決済み)

[artisocモデル] 一度選ばれた目的地を候補から外す処理
質問者: mofumariさん , 質問日時: 2020/01/29 01:25
人エージェントが複数の座標に生成されたポイントエージェントのうち、最寄りのポイントエージェントを選んだ時に、他の人エージェントや自身がそのポイントをシミュレーション終了まで選ばないようにするためにフラグ処理を行おうとしていました。
現在、ポイントエージェントの中に整数型変数flagを定義して、人エージェント内で、最寄りだったポイントエージェントのIDを基にflag=1を入れるという処理を行おうとしているのですが上手くいかず困っています。どのように格納すればいいのか分からず、勉強不足で申し訳ないのですが、アドバイスを頂けると有難いです。

以下現在書いている最寄りのポイント算出までのコードです
dim distance As Double //距離計算
dim min_distance As Double //最短距離の記憶
dim n As Integer //最寄りエリア番号を記憶
dim p_set As AgtSet
dim tmp As Agt

MakeAgtSet(p_set,Universe.building.Point)
for each tmp in p_set
distance=MeasureDistance(My.X,My.Y,Universe.building.Point.X,Universe.building.Point.Y,Universe.building)
If distance < min_distance then
min_distance = distance
n = tmp.id
End If
Next tmp



▼解決した回答


文法上の変なところがあります。
基本的なところの理解が不十分だと思われるので、まずは『人工社会構築指南』を熟読してください。
具体的には、
for each文でp_setからエージェントをtmpとして取り出す処理をしていますが、その後、tmpは使ってないのが問題です。
私ならば、
for each tmp in p_set
 If tmp.flag <> 1 Then
  distance=MeasureDistance(My.X,My.Y,tmp.X,tmp.Y,Universe.building)
  If distance < min_distance then
   min_distance = distance
   n = tmp.id
  End If
 End If
Next tmp
Universe.building.Point(n).flag = 1
にようにします。他は自分で工夫してみてください。

回答者: igaguri さん , 回答日時: 2020/01/29 14:21

▼ 全ての回答


文法上の変なところがあります。
基本的なところの理解が不十分だと思われるので、まずは『人工社会構築指南』を熟読してください。
具体的には、
for each文でp_setからエージェントをtmpとして取り出す処理をしていますが、その後、tmpは使ってないのが問題です。
私ならば、
for each tmp in p_set
 If tmp.flag <> 1 Then
  distance=MeasureDistance(My.X,My.Y,tmp.X,tmp.Y,Universe.building)
  If distance < min_distance then
   min_distance = distance
   n = tmp.id
  End If
 End If
Next tmp
Universe.building.Point(n).flag = 1
にようにします。他は自分で工夫してみてください。

回答者: igaguri さん , 回答日時: 2020/01/29 14:21



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