Universeの変数にUniverse.meanを設定し、空間「space」下のエージェント「agent」の属性「attribute」の平均値を算出したい、というシチュエーションを考えています。例えば、各ステップの処理でattributeの値が変化するので、ステップごとにその平均を計算し、出力するといったことを想定しています。
agt_set = make_agtset(agttype = Universe.space.agent) # エージェント集合を作成
s = 0 # 属性値の総和を格納する変数を定義
for agt in agt_set: # 集合中のすべてのエージェントについて、属性値の和を計算
s += agt.attribute
Universe.mean = s / count_agtset(agt_set) # 属性値の和をエージェントの数で割る
このコードで平均値を算出することはできるのですが、これを自作関数にできないかと考えています。
def mean(Unverse.spase.agent, attribute):
みたいな感じで、エージェント名と平均を計算したい属性を引数にして、平均値を返すような自作関数を作れないでしょうか。
関数にエージェント名は渡せますが、属性名が渡せないようです。
例えば、属性を変数として定義せず、辞書型の変数に格納すれば実現できると思います。
下記では attribute_dict をエージェントの変数として定義しています。
--- ここから ---
def calc_mean(self, agt_type, attr_name):
agt_set = make_agtset(agttype = agt_type) # エージェント集合を作成
s = 0 # 属性値の総和を格納する変数を定義
for agt in agt_set: # 集合中のすべてのエージェントについて、属性値の和を計算
s += agt.attribute_dict[attr_name]
Universe.mean = s / count_agtset(agt_set) # 属性値の和をエージェントの数で割る
--- ここまで ---