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

質問 (解決済み)

[artisocモデル] Univ_Step_End{}内でエージェントを削除する方法
質問者: tentenさん , 質問日時: 2020/12/13 22:15
Agt_Step{}内ではなく、Univ_Step_End{}内でエージェントを削除する方法がわかりません。
supplierというエージェントをUniv_Step_End{}で削除したいです。
sugarscapeモデルの赤アリルールを参照にし、下記のようにコードを書いたのですが、
TerminateAgt(Universe.二次元空間.supplier.UniqueID)部分が「配列のインデックスの指定が不正です」というエラーが出ます。
DelAgtを使用してもエラーが出ました。
Univ_Step_End{}内ではUniqueIDではダメなのでしょうか。


Univ_Step_End{

If GetCountStep() Mod 10 == 3 Then
//3ステップ客の来ていない店は潰れる
If GetHistory(Universe.二次元空間.supplier.come, 1) == 0 AND GetHistory(Universe.二次元空間.supplier.come, 2) == 0 AND GetHistory(Universe.二次元空間.supplier.come, 3) == 0 Then
//supplierエージェントを消す
TerminateAgt(Universe.二次元空間.supplier.UniqueID)
End if
End if
}



▼解決した回答


Univ_Step_End内でエージェントを削除する方法ですが、
下記の通り記述すると削除できます。

Univ_Step_End{
Dim supplierAgtSet As AgtSet, supplierAgt As Agt
Dim closeSupplierAgtSet As AgtSet

ClearAgtSet(closeSupplierAgtSet)

MakeAgtSet(supplierAgtSet, Universe.二次元空間.supplier)
For Each supplierAgt In supplierAgtSet
If GetCountStep() Mod 10 == 3 Then
//3ステップ客の来ていない店は潰れる
If GetHistory(supplierAgt.come, 1) == 0 AND GetHistory(supplierAgt.come, 2) == 0 AND GetHistory(supplierAgt.come, 3) == 0 Then
//supplierエージェントを消す
AddAgt(closeSupplierAgtSet, supplierAgt)
End if
End if
Next supplierAgt

//supplierエージェントを消す
Do While(True)
If CountAgtSet(closeSupplierAgtSet) > 0 Then
supplierAgt = GetAgt(closeSupplierAgtSet, 0)
PrintLn("supplierエージェントを消す: " & CStr(supplierAgt))
TerminateAgt(supplierAgt)
Else
Break
End If
Loop
}

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

▼ 全ての回答


Univ_Step_End内でエージェントを削除する方法ですが、
下記の通り記述すると削除できます。

Univ_Step_End{
Dim supplierAgtSet As AgtSet, supplierAgt As Agt
Dim closeSupplierAgtSet As AgtSet

ClearAgtSet(closeSupplierAgtSet)

MakeAgtSet(supplierAgtSet, Universe.二次元空間.supplier)
For Each supplierAgt In supplierAgtSet
If GetCountStep() Mod 10 == 3 Then
//3ステップ客の来ていない店は潰れる
If GetHistory(supplierAgt.come, 1) == 0 AND GetHistory(supplierAgt.come, 2) == 0 AND GetHistory(supplierAgt.come, 3) == 0 Then
//supplierエージェントを消す
AddAgt(closeSupplierAgtSet, supplierAgt)
End if
End if
Next supplierAgt

//supplierエージェントを消す
Do While(True)
If CountAgtSet(closeSupplierAgtSet) > 0 Then
supplierAgt = GetAgt(closeSupplierAgtSet, 0)
PrintLn("supplierエージェントを消す: " & CStr(supplierAgt))
TerminateAgt(supplierAgt)
Else
Break
End If
Loop
}

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



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