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

質問 (解決済み)

[artisocモデル] 特定のエージェントの指定について
質問者: kazunoriさん , 質問日時: 2019/10/31 16:36
避難者,誘導員,Aという3つのエージェントが同じ空間内にあり、避難者が誘導員に出会ったら、その避難者は色が青色から黄色になる、というプログラムを避難者内のルール内に作りました。
そこで、Aのルール内でif 避難者==青色 then ~~~,elseif 避難者==黄色 then~~~
というルールを作りたいのですが、避難者を個別で指定しないとプログラムが作動しません。しかし、シミュレーションごとに色の変化する避難者のIDなどは異なるため、指定するわけにもいきません。
そこで、グループごとにエージェントを指定する方法(今回なら黄色と青色)など、なにかいい方法があればご教授お願い致します。



▼解決した回答


>そこではPoint(先ほどのA)に避難者の歩行ルールが組み込まれているので、歩行ルールをステップごとに変えるのは、Pointのルールを変える必要があります。

Pointのルールには歩行ルールは組み込まれていないと思います。Pointのルールで行っているのは、Personエージェントの生成とルートの初期設定のみです。歩行ルールはPersonエージェントに組み込まれてます。

>先ほどのもので作動しましたが黄色になっても目的地に向かいませんでした・・・

YellowPersonエージェント及びBluePersonエージェントのルールエディタで、歩行ルールを作成してください。

回答者: igaguri さん , 回答日時: 2019/11/01 16:05

▼ 全ての回答


Aというエージェントは何ですか?なぜAのルール内で、避難者を識別しないとダメなのですか?

そもそも質問がわからないのですが、質問の後半だけ読むと、避難者の識別をIDでやっているのはあまり良いやり方ではありません。
例えば、避難者が色が変化した際に、ついでに、色に応じて、Universeのエージェト集合変数に入れ、Aのルールで取り出すこともできます。

//避難者のルール
If My.color == COLOR_Blue Then
 AddAgt(Universe.BlueAgtSet, My)
Elseif ~ Then

End if

//Aのルール
For i = 0 to CountAgtSet(Universe.BlueAgtSet) - 1
BluePerson = GetAgt(Universe.BlueAgtSet, i)
Next i

回答者: igaguri さん , 回答日時: 2019/10/31 16:48
ご回答ありがとうございます。内容わかりにくくて申し訳ありません。
質問者ですが、現在、artisocのレシピブックのダイクストラ法を用いて避難シミュレーションを考えています。そこではPoint(先ほどのA)に避難者の歩行ルールが組み込まれているので、歩行ルールをステップごとに変えるのは、Pointのルールを変える必要があります。
避難者が誘導員に出会うと最短距離で目的地まで移動して、会わなければランダムで移動するというものを作ろうとしています。
先ほどのもので作動しましたが黄色になっても目的地に向かいませんでした・・・
If My.ID == 0 And GetCountStep() < 5 Then
personAgt = CreateAgt(Universe.Map.Person)
personAgt.X = My.X
personAgt.Y = My.Y
end if

For j =0 to CountAgtset(universe.Yellow)-1
YellowPerson=GETAGT(Universe.Yellow,j)

For k =0 to CountAgtset(universe.Blue)-1
BluePerson=GETAGT(Universe.Blue,k)


If CountAgtSet(My.NearAgtSet) > 0 Then

nearPointAgt = GetAgt(My.NearAgtSet, Cint(Rnd() * CountAgtSet(My.NearAgtSet)))
BluePerson.RouteArray = @dijkstra(My.ID,CStr(nearPointAgt.ID))
BluePerson.RouteCount = 1
Else

BluePerson.RouteArray = CStr(My.ID)
BluePerson.RouteCount = 1
End if
YellowPerson.RouteArray = @dijkstra(My.ID,"23")
YellowPerson.RouteCount = 1
Next j
Next k
}

回答者: kazunori さん , 回答日時: 2019/10/31 17:32
>そこではPoint(先ほどのA)に避難者の歩行ルールが組み込まれているので、歩行ルールをステップごとに変えるのは、Pointのルールを変える必要があります。

Pointのルールには歩行ルールは組み込まれていないと思います。Pointのルールで行っているのは、Personエージェントの生成とルートの初期設定のみです。歩行ルールはPersonエージェントに組み込まれてます。

>先ほどのもので作動しましたが黄色になっても目的地に向かいませんでした・・・

YellowPersonエージェント及びBluePersonエージェントのルールエディタで、歩行ルールを作成してください。

回答者: igaguri さん , 回答日時: 2019/11/01 16:05



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