مقایسه دو کتابخانه mesa و Agentpy

ابزارهای مدل‌سازی و شبیه‌سازی متعددی برای مدلسازی عامل بنیان یا ABM‌ها وجود دارد که هر کدام تمرکز و سبک خاص خود را دارند (یک نمای کلی را در اینجا بیابید). سه ویژگی اصلی متمایز کننده Agentpy عبارتند از:

  1. Agentpy وظایف متعدد مدل‌سازی مبتنی بر عامل – طراحی مدل، شبیه‌سازی تعاملی، آزمایش‌های عددی و تجزیه و تحلیل داده‌ها – را در یک محیط واحد ادغام می‌کند و برای محاسبات تعاملی با IPython و Jupyter بهینه شده است.
  2. Agentpy برای استفاده علمی با آزمایش های چندگانه طراحی شده است. ابزارهایی برای نمونه‌گیری پارامتر (شبیه به فضای رفتاری NetLogo)، آزمایش‌های مونت کارلو، فرآیندهای تصادفی، محاسبات موازی و تحلیل حساسیت ارائه می‌کند.
  3. Agentpy به زبان Python نوشته شده است، یکی از محبوب ترین زبان های برنامه نویسی جهان که تعداد زیادی ابزار و کتابخانه را برای استفاده علمی ارائه می دهد. همچنین برای سازگاری با بسته‌های موجود مانند numpy، scipy، networkx، pandas، ema_workbench، seaborn و SALib طراحی شده است.

جایگزین اصلی agentpy در پایتون Mesa است. برای مقایسه نحو، در اینجا دو مثال برای یک مدل ساده از انتقال ثروت آورده شده است که هر دو دقیقاً عملیات مشابهی را انجام می دهند. اطلاعات بیشتر در مورد دو مدل را می توان در مستندات هر چارچوب (Agentpy & Mesa) یافت.

Agentpy

import agentpy as ap





class MoneyAgent(ap.Agent):

    def setup(self):
        self.wealth = 1

    def wealth_transfer(self):
        if self.wealth == 0:
            return
        a = self.model.agents.random()
        a.wealth += 1
        self.wealth -= 1



class MoneyModel(ap.Model):

    def setup(self):
        self.agents = ap.AgentList(
            self, self.p.n, MoneyAgent)

    def step(self):
        self.agents.record('wealth')
        self.agents.wealth_transfer()










# Perform single run
parameters = {'n': 10, 'steps': 10}
model = MoneyModel(parameters)
results = model.run()

# Perform multiple runs
variable_params = {
    'n': ap.IntRange(10, 500), 
    'steps': 10
}
sample = ap.Sample(variable_params, n=49)
exp = ap.Experiment(
    MoneyModel,
    sample,
    iterations=5,
    record=True
)
results = exp.run()

Mesa

from mesa import Agent, Model
from mesa.time import RandomActivation
from mesa.batchrunner import BatchRunner
from mesa.datacollection \
    import DataCollector

class MoneyAgent(Agent):

    def __init__(self, unique_id, model):
        super().__init__(unique_id, model)
        self.wealth = 1

    def step(self):
        if self.wealth == 0:
            return
        other_agent = self.random.choice(
            self.model.schedule.agents)
        other_agent.wealth += 1
        self.wealth -= 1

class MoneyModel(Model):

    def __init__(self, N):
        self.running = True
        self.num_agents = N
        self.schedule = \
            RandomActivation(self)
        for i in range(self.num_agents):
            a = MoneyAgent(i, self)
            self.schedule.add(a)

        self.collector = DataCollector(
            agent_reporters={
                "Wealth": "wealth"})

    def step(self):
        self.collector.collect(self)
        self.schedule.step()

# Perform single run
model = MoneyModel(10)
for i in range(10):
    model.step()

# Perform multiple runs
variable_params = {
    "N": range(10, 500, 10)}

batch_run = BatchRunner(
    MoneyModel,
    variable_params,
    iterations=5,
    max_steps=10,
    agent_reporters={"Wealth": "wealth"}
)

batch_run.run_all()

جدول زیر مقایسه ای از ویژگی های اصلی هر فریم ورک را ارائه می دهد.

Feature Agentpy Mesa
Containers
Sequence classes like AgentList and AgentDList
Scheduler classes for different activation orders
Topologies
Spatial grid, continuous space,
network
Spatial grid, continuous space,
network
Data recording
Recording methods for variables
of agents, environments, and
model; as well as reporters
DataCollector class that can
collect variables of agents
and model
Parameter sampling
Classes for sample generation
and different types of
parameter ranges
Multi-run experiments
Experiment class that supports
multiple iterations, parameter
samples, randomization,
and parallel processing
BatchRunner class that supports
multiple iterations and parameter
ranges
Output data
DataDict class to store, save,
load, and re-arrange output data
Methods to generate dataframes
Visualization
Gridplots, animations,
and interactive visualization
within Jupyter Notebooks
Plots and interactive visualization
in a separate web-server
Analysis
Tools for data arrangement and
sensitivity analysis

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

keyboard_arrow_up