基于agent的建模框架

dworp的Python项目详细描述


Build StatusCoverage Status

德沃普

构建基于Agent的建模仿真的灵活框架。

要求

  • Python3

安装

使用pip安装(在某些平台上可能是pip3):

pip install dworp

使用可选打印功能安装:

pip install dworp[plot]

这将安装dworp.plot所需的依赖项(当前仅限于matplotlib)。

使用

dworp定义了用于构建仿真的基本接口,并提供了一些 支持快速创建基于代理的模型的默认组件。

代理

Agentstep()函数中更新其状态。 更新可能取决于环境、其邻居、过去的历史或其他功能。

代理有两个可选功能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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ws-consumer服务地址中的java动态属性   java如何比较整数列表,然后按升序排序?   javascript我正在使用java脚本调用一个函数,但它没有调用代码下面的方法,也没有调用secretitnames()函数   在文本窗格中多次使用Java insertIcon图标   JavaMSAL安卓。AuthenticationActivity完成,但用于身份验证请求的线程池线程仍处于等待状态   if语句中的java多范围比较   java toString()表示输出   java如何在jcstrest测试中生成指令重新排序   java我怎样才能运行它?   web应用程序中使用Hibernate和Spring的java问题   如何将字符串数据写入Java文本文件   如何在java命令提示符下运行已签名的jar文件?   java从我的菜单调用RCP应用程序   java如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?