用python编译ABM(Agent-based modeling)模型简介
ABM(Agent-based modeling)是一种用来模拟具有自主意识的智能体(独立个体或共同群体,例如组织、团队)的行动和相互作用的计算模型,通过图像展示和评估智能体在系统整体中的作用。
一个ABM模型是一个计算机模拟系统,包括以下的要素 :
- 一定数量的智能体agents (属于自定义模型的一部分)
- 一定数量的智能体之间的关系
- 一个模拟智能体的行为和互动的框架
ABM模型的优点之一就是易于编译,并相对简单。使用基于对象的编译语言(OOP),将代码分类成不同的对象,每个对象具有不同的功能,且每个对象是基于一个模板“类”。因此从每个类可以创建多个对象,并改变其内在状态使其具有不同的功能。这种编程语言尤其适合ABM模型,在ABM模型中,我们使用Agent class
来表示类,并创建不同属性的Agents
。
一个典型的ABM模型有以下部分组成:
Agentframework
一个agent class
(类)表示agent的状态和属性(名字,年龄,位置,等等),以及一部分可运行的代码来指定agent的运动规则。这部分代码被定义为agent
的方法,被写在定义agent
的类中。例如,大多数具有位置变量的agent
通常会有move的方法或函数。在模型运行时会移动agent的位置。
下面是一个agent框架的简单示例:
import random
#定义agent 类
class Sheep():# 使用 __init__函数来初始化模型
'''
羊随机移动,吃草 (环境),和其他羊互动
'''
#self 作为对象的初始参数
def __init__ (self, x, y, environment,agents, neighbourhood):
self.x = x #x,y坐标
self.y = y
self.environment = environment #环境变量
self.store = 0
self.agents = agents #agents 列表
self.neighbourhood = neighbourhood
#使用randint函数创建一系列0到300的随机整数
if x == None:
self.x = random.randint(0,300)
else:
self.x = x
if y == None:
self.y = random.randint(0,300)
else:
self.y = y
#使agent根据一个随机地数字移动
def move(self):
if random.random() < 0.5:
self.x = (self.x + 1) % 300
else:
self.x = (self.x - 1) % 300
if random.random(