- 论坛徽章:
- 18
|
本帖最后由 bikkuri 于 2014-04-01 08:32 编辑
在您的代码基础上稍微做了下修改:
- awk 'BEGIN{srand();b["o-1"]=".";b["o-2"]="0";b["o-3"]="o";b["0-1"]=".";b["0-2"]="8";b["0-3"]="0";b["8-1"]=".";b["8-2"]="oo";b["8-3"]="o.";p="o";while(i++<100){print i,p;t="";cmd="sleep 1";system(cmd);close(cmd);for(n=1;n<=split(p,x,"");n++){if(x[n]!="."){t=t b[x[n]"-"int(sqrt(1+5*rand()))+1];}else{t=t"."}};if(t~/^\.*$/){print i+1,t;exit};p=t}}'
复制代码 现在应该不会出现全部细胞死亡的情况了。
但是。。。但是。。。但是。。。
到第45代左右细胞数量猛增。。。
在我的busybox上第50代的时候运行速度就很慢了。。。
到Linux上第70代以后运行速度也很慢了。。。
不过满屏幕都是.o08。。。好壮观!
所以为了避免世代80和88和细胞的输出混淆,希望在世代编号前后加括号[]。
比如:
[1] o
[2] 8
[3] oo
在linux上计算第90代需要3分钟,目测等到算完第100代至少还要半个多小时。。。
到第92代已经有20695个细胞了。。。但是活细胞和死细胞的数量不明。。。- [test@hp:~]$ sed -n 92p cell.txt |wc
- 1 2 20698
复制代码 呼~第93代。。。- [test@hp:~]$ sed -n 93p cell.txt |wc
- 1 2 23110
复制代码 第94代。。。- [test@hp:~]$ sed -n 94p cell.txt |wc
- 1 2 25764
复制代码 第95代花了10分钟。。。- [test@hp:~]$ sed -n 95p cell.txt |wc
- 1 2 28808
复制代码 仔细想了一下,int(sqrt(1+5*rand()))+1好像不对,应该是int(sqrt(5*rand()))+1,算了,睡了。。。明天早上再来看结果。。。
int(sqrt(1+5*rand()))+1的话,死亡率/成长率/不变率实际上是0,1/5,4/5。
也就是说,不论是幼体细胞还是成体细胞都不会死,而细胞分裂的时候单个死亡率非常高,几乎是只要分裂必死一个。
这好象也不太符合实际情况。
但是刚才又试了一下int(sqrt(5*rand()))+1,即死亡率/成长率/不变率为1/5,3/5,1/5,还是很快就全部死光了。看来1/5的死亡率还是太高了。
等下再试试1/100,81/100,18/100。不过目测这个比例产生的细胞数会比昨天晚上的更多。
回复 3# yinyuemi
|
|