具有多重处理能力的n维元胞自动机。

cellular-automaton的Python项目详细描述


细胞自动机

这个包为Python 3

细胞自动机定义了一个细胞网格和一组规则。 然后,所有的细胞都会根据它们的邻居同时进化出它们的状态。

有关细胞自动机的更多信息,请参见mathworld.wolfram.com

又是一个细胞自动机模块?

它不是第一个提供细胞自动机的python模块, 但据我所知,第一款提供了以下所有功能:

  • 易于使用
  • n维
  • 支持多进程
  • 速度优化
  • 记录在案
  • 测试

我本来不打算写一个新的细胞自动机模块, 但是当我搜索一个时,我发现有些文档很少或者根本没有api文档,它们真的不符合我的需求 和/或迫切需要重构的代码。

所以我开始编写自己的模块,目的是提供一个用户友好的api 以及可接受的文件。在实施过程中,我想,为什么不提供 n维支持和读罗伯特c马丁的干净代码 要有一个干净的、经过测试的、覆盖率不错的代码,还需要增加一些要求。 速度优化和多过程能力对我来说是更大的挑战。 虽然模块现在达到了可接受的速度,但仍有改进的余地(例如,使用numba?).

用法

要启动和使用自动机,您必须定义三件事:

  • 邻居
  • 网格的尺寸
  • 进化规律
neighborhood=MooreNeighborhood(EdgeRule.IGNORE_EDGE_CELLS)ca=CAFactory.make_single_process_cellular_automaton(dimension=[100,100],neighborhood=neighborhood,rule=MyRule)

邻里

邻域在相对坐标中为单元邻域定义。 细胞的进化将完全取决于这些邻居。

作为参数传递给邻域的边缘规则定义了如何处理网格边缘上的单元格。 有三个选项:

  • 忽略边缘细胞:边缘细胞将没有邻居,因此不会进化。
  • 忽略丢失的邻居:边缘单元将添加存在的邻居。这会导致边缘单元上的邻居计数不同。
  • 每个维度的第一个和最后一个单元格是邻居:所有的单元格都具有相同的邻居计数,并且没有边缘存在。

尺寸

表示每个维度大小的列表或元组。 上面的示例定义了一个包含100 x 100个单元格的二维网格。

除了内存和处理器的能力之外,您选择的维度没有限制。

规则

规则有三个任务:

  • 设置所有单元格的初始值。
  • 进化出一个与其相邻的细胞。
  • (可选)定义单元格的绘制方式。
classMyRule(Rule):definit_state(self,cell_coordinate):return(1,1)defevolve_cell(self,last_cell_state,neighbors_last_states):returnself._get_neighbor_by_relative_coordinate(neighbors_last_states,(-1,-1))defget_state_draw_color(self,current_state):return[255ifcurrent_state[0]else0,0,0]

cellular_automaton.rule:Rule继承,定义演化规则和初始状态。

可视化

该软件包为常见的二维自动机提供了一个pygame窗口中的可视化模块。

要添加另一种显示选项,例如,对于其他维度或六边形网格,可以拉伸提供的实现或构建自己的实现。 该模块的可视部分是完全解耦的,因此应该易于更换。

示例

该软件包包含两个示例:

这些示例自动化实现应该为您自己的项目提供一个良好的开端。

参与

请随意打开拉取请求,发送我的功能请求,甚至作为开发人员加入。 还有很多工作要做。

对所有其他人来说,当你有问题的时候,不要犹豫打开问题!

依赖关系

对于元胞自动机的直接使用,则不存在依赖关系。 但是,如果要使用display选项或执行示例,则必须安装 pygame对于vis形象化。 如果出于某种原因不想使用此引擎,则只需从display.drawengine继承并覆盖 必要的方法。(有关如何执行此操作的示例,请参见./test/test_display.py)

许可证

此包在Apache License, Version 2.0下分发,请参见LICENSE.txt

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

推荐PyPI第三方库


热门话题
编写测试用例时将Json响应转换为java对象时出错   Java中的LZW压缩/扩展   java ProGuard**通配符匹配类问题   javajar忽略其中的文件   java捕获字符串中属性的值?   操作集合的java最佳实践   nullpointerexception Java如何处理参数传递的空值?   java Android Twitter4j最新流行推文未显示   使用selenium webdriver代码在ie浏览器中关注java问题   java如何在单个帖子中发送文件和数据?   使用不同的用户证书验证Java Rest调用   调试Vagrant+Oracle VM+Java Hybris调试   在网页上运行Java应用程序的html   java无法使用GWT显示从REST webservice检索的图像   java在数据库中存储jodatime日期时间   java Hibernate二级缓存只写不读   javafx8中画布内的java HoverProperty   java JOptionPane如何禁用X?   ssl如何使用自签名证书运行Java HTTP服务器,并信任浏览器?   java HibernateTransactionManager回滚事务