[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[技术讨论] 细胞自动机Python脚本运行到最后都稳定在一个状态不变了,高手给看看算法对不对

  1. import random
  2. import os
  3. import time
  4. def init(level):
  5.     return random.randint(0,level)
  6. dict={' ':0,'●':1}
  7. cells=[[' ' for x in range(32)] for y in range(22)]
  8. grid=[[' ' for x in range(32)] for y in range(22)]
  9. while True:
  10.     level=input('larger number,less cells (>0):')
  11.     try:
  12.         if int(level)>0:
  13.             for y in range(1,21):
  14.                 for x in range(1,31):
  15.                     r=random.randint(0,int(level))
  16.                     if r==0:cells[y][x]='●'
  17.             break
  18.     except:pass
  19. for y in cells:print(' '.join(y))
  20. print("press key to begin...")
  21. os.system('pause >nul')
  22. i=0
  23. while True:
  24.     for y in range(1,21):
  25.         for x in range(1,31):
  26.             num=dict[cells[y-1][x-1]]+\
  27.                 dict[cells[y-1][x+1]]+\
  28. dict[cells[y-1][x]]+\
  29. dict[cells[y+1][x-1]]+\
  30. dict[cells[y+1][x+1]]+\
  31. dict[cells[y+1][x]]+\
  32. dict[cells[y][x-1]]+\
  33. dict[cells[y][x+1]]
  34.             if num==3:grid[y][x]='●'
  35.             elif num==2:grid[y][x]=cells[y][x]
  36.             elif num :grid[y][x]=' '
  37.     for y in range(1,21):
  38.         for x in range(1,31):
  39.             cells[y][x]=grid[y][x]
  40.     time.sleep(0.05)
  41.     os.system('cls')
  42.     i+=1
  43.     print('time: '+str(i))
  44.     for y in cells:print(' '.join(y))
复制代码
这是出生概率为33%时的稳定状态,基本不变了,个别在动

概率50%的

如果要把这个脚本用迭代函数或者生成器写出来,该怎么改啊,加上是二维数组我更不会写了
!scripting!

开头那个函数忘了删掉了 没有用
!scripting!

TOP

看图好像没什么问题吧,有些形状就是稳定的

TOP

回复 3# CrLf
原来是运气问题 10%概率的时候竟然运行到1200多次才稳定 先前没几下就死完了
!scripting!

TOP

运行了一下,发现结果好像不太对,有些“孤独”的细胞也不会死亡,看代码没看出来为什么

TOP

回复 5# CrLf
对啊 肯定有问题
!scripting!

TOP

回复 5# CrLf
有一行我写错了 elif:num 应该改成else:
1

评分人数

    • CrLf: 卧槽,没发现技术 + 1
!scripting!

TOP

回复 5# CrLf
在第37行那 可是逻辑上这两者没什么不同啊
!scripting!

TOP

回复 5# CrLf
改了37行以后应该对了运行了几次都类似这种

我还奇怪呢 10%的概率那么小怎么变化那么久 你不说我都想不起来孤立这回事
!scripting!

TOP

改制后基本各种概率下基本都在200次以内稳定了
!scripting!

TOP

本帖最后由 523066680 于 2014-9-27 22:42 编辑

我在写perl版本细胞自动机的时候遇到这样的问题:数组赋值变成了引用。
修改赋值方式后得以解决,会不会是相同的问题?

现在不搞python了,没心思细看。

TOP

回复 11# 523066680

很有可能啊 我试试看直接引用是什么效果 然后对比一下
!scripting!

TOP

回复 11# 523066680
改成引用后明显运动没规律了 细胞较多时好像不像能稳定的样子 我原先改过的应该是对的 都稳定了 形态也符合算法
!scripting!

TOP

回复 13# 普大喜奔


    恩 我就是说要避免引用。

TOP

如果要验证显示结果对不对,可以把典型的生命矩阵代入
  1. ......................**...............
  2. ......................**...............
  3. .......................................
  4. .......................................
  5. .......................................
  6. .......................................
  7. .......................................
  8. .......................................
  9. .......................................
  10. .......................................
  11. .......................................
  12. .......................................
  13. .........*..........**...**............
  14. .......*.*............***..............
  15. ......*.*............*...*.............
  16. **...*..*.............*.*..............
  17. **....*.*..............*...............
  18. .......*.*......*.*....................
  19. .........*......**.....................
  20. .................*...*.................
  21. .....................**......*.........
  22. ....................*.*......*.*.......
  23. ...............*..............*.*....**
  24. ..............*.*.............*..*...**
  25. .............*...*............*.*......
  26. ..............***............*.*.......
  27. ............**...**..........*.........
  28. .......................................
  29. .......................................
  30. .......................................
  31. .......................................
  32. .......................................
  33. .......................................
  34. .......................................
  35. .......................................
  36. .......................................
  37. .......................................
  38. ...............**......................
  39. ...............**......................
复制代码

TOP

返回列表