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

質問 (解決済み)

[artisocモデル] CreateAgt()でエージェントの作成をかずうぃ指定して止める方法
質問者: kentaroさん , 質問日時: 2020/01/09 16:54
私は今避難モデルの作成をしています。
下のような形でエージェントを発生させています。
このルールだとシミュレーションを停止するしか発生を止めることができないです。
例えば100体エージェントを作成したら発生を止めるというルールに変えるためにはどうしたらよいでしょうか?
分かる方がいらしゃれば教えていただきたいです。
よろしくお願いいたします。
Dim new As Agt

If Universe.incidence > Rnd() then
If Rnd() <= 0.5 then
My.Y = 45
Else

End if
new = CreateAgt(Universe.B階段.B6F)
new.X = My.X
new.Y = My.Y
End if



▼解決した回答


わかりました。
この場合、Universe直下に整数型の変数「作った人数」を作成し、エージェントのStep内のルールで作った数をカウントすれば良いです。
例えば、
If Universe.作った人数 < 100 Then
 new = CreateAgt(Universe.B階段.B6F)
 new.X = My.X
 new.Y = My.Y
 Universe.作った人数 = Universe.作った人数 + 1
End if
という具合です。

回答者: igaguri さん , 回答日時: 2020/01/10 17:20

▼ 全ての回答


この書き方だと、最初に100体作成するということなのか、シミュレーション途中で1体ずつ作成するのかわかりません。
前者は、For文、後者は数をカウントしてIF文でできます。
ところで、前回の質問は解決したのでしょうか。

回答者: igaguri さん , 回答日時: 2020/01/09 17:00
いつも回答ありがとうございます。
100体作成したらCreateAgt()を止めるというルールにしたいと考えています。
この場合どうしたらよいでしょうか?教えていただきたいです。
前回の質問は解決できました。ありがとうございます。

回答者: kentaro さん , 回答日時: 2020/01/10 14:45
100体作成したいのは理解していますが、
教えて欲しいのは、100体を一気に作成するか、1ステップに1体ずつ作成し100体作成する必要があるのかどうかです。
今回は、前者として回答します。
Dim i As Integer
Dim new As Agt
For i = 0 to 99
 new = CreateAgt(Universe.B階段.B6F)
 new.X = My.X
 new.Y = My.Y
Next i
このことは人工社会構築指南にも載っていることなので、きっきり読んでおくと良いでしょう。
たぶん、これらだと同じ場所に一斉に100体できることになるため、避難を考え場合、もう少し工夫が必要かと思います。

回答者: igaguri さん , 回答日時: 2020/01/10 14:57
回答ありがとうございます。
言葉足らずですいません。1ステップに1体ずつ作成して100体作成したいです。
このやり方を教えていただきたいです。お願いいたします。

回答者: kentaro さん , 回答日時: 2020/01/10 17:11
わかりました。
この場合、Universe直下に整数型の変数「作った人数」を作成し、エージェントのStep内のルールで作った数をカウントすれば良いです。
例えば、
If Universe.作った人数 < 100 Then
 new = CreateAgt(Universe.B階段.B6F)
 new.X = My.X
 new.Y = My.Y
 Universe.作った人数 = Universe.作った人数 + 1
End if
という具合です。

回答者: igaguri さん , 回答日時: 2020/01/10 17:20
解決しました、ありがとうございます。

回答者: kentaro さん , 回答日時: 2020/01/10 17:56



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