python mesa包教程

python中的mesa包预制了一些类,提供了一些基础模型,可以大大简化abm建模的工作量。在python中实现,也有利于和其它算法相结合。本文是一次作业,按照个人理解把mesa包教程整理,代码压缩成了两大部分。如果是新手上手,建议查看下方的官方链接,在jupyter notebook里一步一步运行代码。

mesa包的英文简介

https://mesa.readthedocs.io/en/latest/tutorials/intro_tutorial.html

模型构造

建模一个简单的模型:
强假设(只要有钱就把钱给邻居)下财富的流动,观察基尼系数变化

主要的类与类图

一个未明确任何功能的,简单的agent模型,含有如下类,分别是:

  • 实例化的模型,对于每一个具体问题应当是唯一的
  • 主体或智能体(agent),在启动模型前应对其进行实例化,通常一个模型有多个agent(实现观察涌现性等功能)
  • 调度器(schedule),控制每一个时间步(ticks)里agent的动作(step())顺序,如同时(即并行),随机串行运行。随机串行是最常见也是最简单的控制方式
  • 网格(grids)提供两种SingleGrid和MultiGrid,前者一个格子空间上只能有一个agent,而后者一个格子上可以由多个agent
  • 数据收集类(DataCollector),收集模型级变量, agent级别变量和其它变量(下图省略)
  • 控制模型运行类(BatchRunner),使用固定的参数多次生成和运行模型,查看结果的情况。可消除随机误差(下图省略)
    类图:
    在这里插入图片描述

代码

不考虑agent的位置,随机把钱给其它agent

注意,下面的代码使用的是jupyter notebook,可以复制到自己的jupyter里面按顺序运行

from mesa import Agent, Model
from mesa.time import RandomActivation

先定义MoneyModel类,因为下面MoneyAgent类实现时要调用,具体参见上方类图,二者存在一对多的组合关系

class MoneyModel(Model):
    """A model with some number of agents."""
    def __init__(self, N):
        self.num_agents = N
        self.schedule = RandomActivation(self)
        # Create agents
        for i in range(self.num_agents):
            a = MoneyAgent(i, self)
            self.schedule.add(a)

    def step(self):
        '''Advance the model by one step.'''
        self.schedule.step()

定义MoneyAgent类

class MoneyAgent(Agent):
    """ An agent with fixed initial wealth."""
    def __init__(self, unique_id, model):
        super().__init__(unique_id, model)
        self.wealth = 1
    def step(self):
        # The agent's step will go here.
        # For demonstration purposes we will print the agent's unique_id
        if self.wealth == 0:
            return
        other_agent = self.random.choice(self.model.schedule.agents) # 需要随机从所有agent中选择,同时可能会选中自己
        other_agent.wealth += 1
        self.wealth -= 1

创建10个agent,并运行10步

model = MoneyModel(10)
for i in range(10):
    model.<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值