さまざまな生産者の複数のラップトップに対して消費者から与えられた評価 (0: 最低から 5: 最高) を保存する CSV ファイルがあります。各行は、さまざまな機能に関して 1 人の消費者から与えられた評価を示しています。2 つのコンシューマーの例を以下に示します。
Consumer Screen_13 Screen_14 Screen_15 Battery_7 Battery_10 Battery_11
1 0 3 3 2 5 5
2 1 4 3 1 3 5
mesa
さまざまな新しいラップトップの購入を評価するために、agent_based モデルを作成するために使用しています。コンシューマーの数を 100 とすると、CSV ファイルは 100 行と 2 つの機能 (画面サイズとバッテリー) に対して 6 列になります。CSV を 1 行ずつ読み取る場合、for loop
各エージェント (コンシューマー) に 1 行を割り当てることができるようにしたいCSV の (ヘッダーも保存する必要があります) 誰が (どのエージェント) がどの行を持っているかを知ることができます. 私は主にmesa
モデルとエージェント クラスを構築するためのチュートリアルに従ってこれを行いましたmesa チュートリアル
エージェントを作成するためにコードに何を追加したかを説明すると、 のRate
各行には CSV の行が 1 つあります。consumerAgent i
を代入できるようになりたいのですがRate [i]
、別の引数を使用して行った方法が'ratingarray'
間違っているようですが、修正方法がわかりません。エラーが教えてくれます__init__() missing 1 required positional argument: 'ratingarray'
コメントをお待ちしております。
どうもありがとうございました、
import csv
import random
from mesa import Agent, Model
from mesa.time import RandomActivation
from mesa.space import MultiGrid
class ConsumerAgent(Agent):
def __init__(self, name, model, ratingarray):
super().__init__(name, model, ratingarray)
self.name = name
self.rate[i] = ratingarray
def step(self):
print("agent {} was activated".format(self.name))
# Whatever else the agent does when activated
class ProductEvalModel(Model):
def __init__(self, n_agents):
self.schedule = RandomActivation(self)
self.grid = MultiGrid(10, 10, torus=True)
for i in range(n_agents):
a = ConsumerAgent(i, self, rate[i])
self.schedule.add(a)
coords = (random.randrange(0, 10), random.randrange(0, 10))
self.grid.place_agent(a, coords)
def step(self):
self.schedule.step()
#self.dc.collect(self)
############################# Main #####################################
model = ProductEvalModel(100) #100 consumers
with open('RateVal.csv') as csvfile:
csvreader = csv.reader(csvfile,delimiter=',')
rate = []
for row in csvreader:
rateS = row
rate.append(rateS)
loopi = 1
while loopi < 101:
model.step()
loopi += 1