资源简介
带有基因型以及表现型元胞自动机python代码。其中增加了两种基因型。
代码片段和文件信息
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import copy
‘‘‘
该代码研究的是在赋予每一个元胞可以与其它元胞杂交的基因时产生的现象;
在原有的元胞类里添加基因类里面有Aa Bb两种,A为疾病基因,B为强化基因,均显性有效。
在每一个回合内:
AA代表正常的cell也有10%死亡的可能性,BB代表根据规则应该死亡的cell也有10%存活可能性
CC无影响
迭代规则:
在一个回合中,cell可以随机与周围一个交换基因产生子代原有的cell死亡。
也可以选择与周围存活率最高的哪一个cell交换基因。
用不同的颜色表示这个cell的基因组成(存活率)
A-B-:不变 150
A-bb;最暗 100
aaB-:亮 255
子代产生规则:
在一个回合中如果空的元胞的周围环形边界内如果有两个活元胞,子代会产生,
其基因型是这两个元胞按照概率自由组合产生的。
当边界有超过3个元胞,或小于两个元胞,元胞将会死亡。在此基础上,A、B两个
基因会产生额外的生存与死亡几率
‘‘‘
#根据上述规则的基因解码函数
def decode(gene):
cells = np.zeros(len(gene))
for i in range(len(gene)):
if gene[i] ==‘0‘:
cells[i] = 0
elif gene[i].find(‘A‘)!=-1 and gene[i].find(‘B‘)==-1 :
cells[i]=100
elif gene[i].find(‘A‘)==-1 and gene[i].find(‘B‘) !=-1:
cells[i] =150
else:
cells[i] = 255
return cells
#以下是地图生成函数:生成随机地图参数是地图大小,pA是A出现概率,pB同理p1是地图中活着的格子出现的概率
def generaterandom(lengthpApBp1):
grid = np.random.choice([0‘A‘‘a‘]length*length p=[1-p1p1*pAp1*(1-pA)])
for i in range(length*length):
if grid[i]!=‘0‘:
grid[i] = (grid[i]+ np.random.choice([‘A‘‘a‘]p=[pA1-pA])+
np.random.choice([‘B‘‘b‘]p=[pB1-pB]) + np.random.choice([‘B‘‘b‘]p=[pB1-pB]))
return grid.reshape(lengthlength)
#基因自由组合函数
def combine(AB):
newgene=np.random.choice([A[0]A[1]]p=[0.50.5])+np.random.choice([B[0]B[1]]p=[0.50.5])+\
np.random.choice([A[2]A[3]]p=[0.50.5])+np.random.choice([B[2]B[3]]p=[0.50.5])
return newgene
#地图类:
class group:
def __init__(selflengthpApBp):
self.grid = generaterandom(lengthpApBp) #grid代表基因型矩阵
self.cells = decode(self.grid.reshape(length*length)).reshape(lengthlength) #cells代表对应的颜色矩阵
self.shape = self.grid.shape
self._length = length
def show(self):
plt.imshow(self.cells)
plt.show()
def gene(self): #这个函数是为了统计基因所占比例
m=‘‘
for i in range(self._length):
for j in range(self._length):
m= m+self.grid[i][j]
length_A= len(m)-m.count(‘0‘)-m.count(‘B‘)-m.count(‘b‘)
length_B= len(m)-m.count(‘0‘)-m.count(‘A‘)-m.count(‘a‘)
return m.count(‘A‘)/length_Am.count(‘a‘)/length_Am.count(‘B‘)/length_Bm.count(‘b‘)/length_B
def number(self):#这个函数是为了统计各个表现型的比例与活着的元胞的比例
all_ = self.cells.nonzero()[0].size
m=copy.copy(self.cells)
m[m!=100]=0
number_1 = m.nonzero()[0].size
m=copy.copy(self.cells)
m[m!=150]=0
number_2 = m.nonzero()[0].size
m=copy.copy(self.cells)
m[m!=255]=0
number_3 = m.nonzero()[0].size
return all_/(self._length*self._length)number_1/all_number_2/all_number_3/all_
def set_grid(sel
- 上一篇:python-web系统实时监控
- 下一篇:unti
tled2.py
相关资源
- python-web系统实时监控
- numpy-1.17.0+mkl-cp37-cp37m-win_amd64.whl百度云
- 四行Python代码实现将word文件转换为
- python评分卡模型数据源
- 传智播客 python基础班 + 就业班 + 课件
- python实现简易3D方块动画
- 基于PYTHON+OPENCV的SIFT SURF图像特征匹配
- python总结
- boost.python 动态编译库
- 高斯投影正反算Python源码
- python xlutils
- Python3网络爬虫实战思维导图
- ros_arduino_python 调通版
- 数据挖掘十大算法源代码Python)
- XModem -发送端源代码Python语言实现
- pytracking/pytracking/evaluation/tracker.py
- Python爬取教务系统课程表
- 元胞自动机模拟交通道路_Python
- Python二级考试试题.zip
- python实现扫描线填充算法,可以画凹
- python3 包装的httpclient,支持session
- python日期时间运算
- python实现的ping工具
- Python简版聊天室代码
- Flask-login
- 矩阵分解在MovieLens上的Python实现
- 全国840个气象站点日照时数转日总太
- python 3.6 socket传输视频
- 基于PYQT编写的人脸识别软件
- 续Python3.x+PyQtChart实现数据可视化界面
评论
共有 条评论