Skip to content

gmono/lifegame

Repository files navigation

说明

计划

  • 编写基本的b2s3规则下,基于tensorflow.js 加速的生命游戏并实验
    • 基本实验
    • 绘图部分,双缓冲机制
    • 静默加速
    • 研究性能,CPU GPU使用率问题,确保GPU使用率够高,在静默时
    • 编写基本的b2s3规则
    • 确保大场景下的工作情况(已完成,2000*2000场景在我平板上测试正常)
  • 改造b2s3 ,分解其规则为原子操作,比如 P=keep(K,S,P,value=number) P=setone(K,S,P,value=number)
    • 将现有的规则改造为基于原子操作的规则
    • 然后将这些原子操作单独列到外面
    • 然后允许外部通过指定一些参数来调用这些原子规则
    • 然后允许外界编写转移脚本使用原子规则和控制流 循环等来指定每一步的操作,尝试直接使用一个js函数来表示转移脚本,对转移脚本内的操作做出限制,不允许直接操作原始矩阵,只能使用给定的操作,这样为了确保效率
      • js函数表示的转移脚本
      • 独立解析的转移脚本
      • 独立解析或js函数表示的,可以让用户自定义函数的转移脚本
  • 实现兰顿蚂蚁规则并实验,然后使用规则脚本实现兰顿蚂蚁规则,测试效率
  • 考虑加速事宜
    • 研究tensorflow.js的计算时机
      • 研究是否可以使用对折的幂次运算来提高计算速度(重要)(不能)
    • 研究在多次调用规则时是否会在最后绘制并获取数据时统一执行计算,由此来考虑加速事宜(基于layer的symbolic体系可以)
    • 考虑每一步都要dispose 上一步的frame数据带来的开销问题(基本不存在这个问题)
  • 测试其他的细胞自动机规则
    • b36s23等一系列规则
    • 研究b和s的含义和分离实现
  • 考虑是否可以用类似手段实现基于质能守恒和物质相互作用,生命环境相互作用的生命游戏(使用基于领域总和的规则不行)
  • 研究使用webgl绘图的可能

启发

  1. 基于空间四叉树进行的,循环局部探测。基本原理是认为一个循环中的每个部分也会出现循环,因此可逐步收紧,如果一个大块没有循环,那么则考虑其两个小块,直到找到单位为1的单元为止,可以直到,单位为1的单元,只有出现和不出现,非周期性出现和周期性出现,只需要有一个判断是否周期性出现的标准,另一个规律是,如果一个单元中的每个子单元都是周期性的,那么这个单元也是周期性的。因此我们可以得到一个最大的周期单元,而这个周期单元中其实可能包括几个互不联系的周期单元,而添加一个拆分法,判断是否有联系即可
  2. 规则可以表示为 2dtensor->2dtensor的函数
  3. 2dtensor的每个位置可以是一个结构体,即可以允许object,或视作多域,即可表达为多通道变为一个3dtensor
  4. 对通道间逻辑处理,可使用矩阵表示逻辑的手段,使用一些数学计算表示与或非,可证明,矩阵运算的同位置之间的逻辑处理可以实现,而空间上的逻辑处理,可通过9次卷积摄取3*3区域的值,然后通过上述逻辑表示方法运算,最终得到一个同大小的featuremap
  5. 如果更慢,考虑直接使用js进行逻辑处理或使用wasm进行逻辑处理,但这样无法使用gpu计算
  6. 可在float32中保存多个域的值