Я пытаюсь написать многоагентную систему на python, используя библиотеку Mesa, и хотя библиотека отлично подходит для начинающего, как я (в отличие от чего-то вроде Spade, которое я считаю слишком сложным), я не могу понять,как бы я определял субагенты с помощью библиотеки.
Вот элементарный код очень простой агентской системы
from mesa import Agent
from mesa import Model
import random
class Device(Agent):
def __init__(self, unique_id, model, energy, threshold, status):
super().__init__(unique_id, model)
self.energy = energy
self.threshold = threshold
self.status = 0
def _cost(self, price):
self.elec_cost = price*self.energy
def run(self, price):
print('price:', price)
self._cost(price)
if self.elec_cost > self.threshold:
self.status = 0
elif self.elec_cost <= self.threshold:
self.status = 1
def getStatus(self):
if self.status == 1:
return 'on'
elif self.status == 0:
return 'off'
class Fan(Device):
def __init__(self, unique_id, model, energy=0.06, threshold=0.55, status=0):
super().__init__(unique_id, model, energy, threshold, status)
class Light(Device):
def __init__(self, unique_id, model, energy=0.06, threshold=0.55, status=0):
super().__init__(unique_id, model, energy, threshold, status)
class HVAC(Device):
def __init__(self, unique_id, model, energy=3, threshold=31, status=0):
super().__init__(unique_id, model, energy, threshold, status)
class HomeModel(Model):
def __init__(self):
self.fan1 = Fan(1, self)
self.fan2 = Fan(2, self)
self.light1 = Light(3, self)
self.light2 = Light(4, self)
def run(self):
self.price = get_Price()
self._run(self.fan1)
self._run(self.fan2)
self._run(self.light1)
self._run(self.light2)
def _run(self, x):
x.run(self.price)
print(x.unique_id, 'is: ', x.getStatus())
def get_Price():
priceSet = [8, 9, 7, 9, 7, 7, 6, 8, 9, 7, 7, 10, 13, 4, 7, 9, 7, 9, 10, 11, 14, 13]
return random.choice(priceSet)
model = HomeModel()
model.run()
Что я хочу проверить, так это то, что вместо модели только одного домаЯ хочу посмотреть, смогу ли я масштабировать его до района, и поэтому я хочу определить каждый дом как один агент вместо полной модели с приборами в качестве субагентов в этом доме.Я думал о том, чтобы сделать каждый дом агентом и определить устройства как субагенты, но каждый экземпляр агента принимает в качестве аргумента экземпляр модели, к которой он принадлежит, поэтому я был немного озадачен тем, как определить агентов устройства в агенте дома.
Я знаю, что могут быть и другие способы сделать это, но я относительно новичок в python (почти 3 месяца работаю с ним), поэтому я не могу понять, какими могут быть эти другие методы.Я был бы чрезвычайно признателен, если бы кто-то мог направить меня сюда.