• 大小: 7KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: Python
  • 标签: python  

资源简介

带有基因型以及表现型元胞自动机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

评论

共有 条评论