基于agent的建模框架
dworp的Python项目详细描述
德沃普
构建基于Agent的建模仿真的灵活框架。
要求
- Python3
安装
使用pip安装(在某些平台上可能是pip3):
pip install dworp
使用可选打印功能安装:
pip install dworp[plot]
这将安装dworp.plot
所需的依赖项(当前仅限于matplotlib)。
使用
dworp定义了用于构建仿真的基本接口,并提供了一些 支持快速创建基于代理的模型的默认组件。
代理
Agent
在step()
函数中更新其状态。
更新可能取决于环境、其邻居、过去的历史或其他功能。
代理有两个可选功能init()
和complete()
。
当向模拟中添加代理时,将调用init()
函数。
在时间步结束时调用complete()
函数。
classMyAgent(dworp.Agent):defstep(self,now,env):# ToDo add example herepass
代理状态的可见性
当代理基于其邻居的状态更新其状态时, 您可能需要使用两阶段更新机制。 在第一阶段,特工们私下里更新他们的状态以便他们的邻居 看不到新状态。 在第二个阶段,特工们公开这个州,为下一步的行动做准备。
环境
Environment
捕获代理中不存在的所有模拟状态。
这包括用作用于确定邻居的网络或空间信息的容器。
时间
Time
驱动模拟并实现迭代器接口。
它的长度可以是固定的,也可以是无限的。
时间步长可以是固定的或可变的。
时间可以是整数或浮点。
空间
代理可以基于邻居观察或与其他代理交互。 邻域可以在网络上使用各种图形框架如iggraph或snap来定义。 邻域也可以在网格或连续空间上进行空间定义。
终结者
要在满足某些条件时停止模拟,请使用Terminator
。
日程
代理更新的顺序和代理更新的顺序由Scheduler
决定。
为随机顺序或均匀采样的循环更新提供了一些基本的调度程序。
观察者
在每个时间步骤之后运行Observer
。
它是为捕获数据以进行进一步处理而设计的。
它可以访问代理和环境。
可以使用ChainedObserver
将多个观察者链接在一起。
模拟
Simulation
接口定义了基于代理的模拟的单个实现。
提供了单阶段和双阶段更新的基本实现。
通常,您会希望从其中一个继承来定义模拟。
记录
每个组件都有自己的记录器:
self.logger.info("Agent {} set activity to {}".format(self.agent_id,self.activity))
日志记录级别可以在框架级别进行控制:
logging.getLogger('dworp').setLevel(logging.WARN)
或者在单个组件级别:
logging.getLogger('dworp.agent').setLevel(logging.DEBUG)
有关日志级别或日志配置的详细信息,请阅读python logging docs。
示例
学习框架的最佳方法是查看示例模型及其文档。
测试
安装测试要求:
pip install -r test_requirements.txt
然后运行测试(在基本目录中):
nosetests
这将运行所有测试。 要跳过需要matplotlib的打印单元测试,请执行以下操作:
nosetests -a '!plot'
获取单元测试覆盖率报告:
nosetests --with-coverage --cover-package=dworp
开发
要在可编辑模型中安装,以便立即反映对框架的更改:
pip install -e .
代码主要遵循PEP8 coding standard。 如果你使用的是pycharm,它将突出pep8问题。 您还可以使用flake8手动运行样式检查(pip install flake8):
flake8 dworp
docstrings正在使用Google standard。