QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2265|回复: 0
打印 上一主题 下一主题

[代码资源] penna模型论文以及代码

[复制链接]
字体大小: 正常 放大

2

主题

11

听众

21

积分

升级  16.84%

  • TA的每日心情
    开心
    2014-7-25 10:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2014-7-25 11:43 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    无性繁殖Penna模型
    一、 设计思路(包括规则说明 参数设定)
           1. 模型规则:
    生物体由基因构成,基因可以分类,最简单的分类方式为两类,以好坏界定,用01表示,构成方式为有限长串结构..
    规则:
    (1) 死亡机制:   
    老死:B
        活到B岁(最大年龄),下一步死亡
    疾病:     
       活到当前年龄,累计的“疾病”次数达到 Tc次,下一时刻死亡
    环境压力:
       每个个体以概率  Verhulst因子) 生存
    (2) 繁殖机制:
    最低繁殖年龄:R
       每个个体活到R岁时,开始繁殖,繁殖时,采用拷贝加突变的方式形成子代
    突变:M
       突变强度为M,此处为M个位置
      个数:b
       每次繁殖b个子代
    二、 代码(关键部分加注释)
    #include
    #include
    #include
    int i,j,t;
    double x,y;
    FILE *fp;
    #define GeneSize 32
    #define N0 1000
    #define Nmax 100000
    #define TIME 1000
    #define ReproductionAge 8
    #define T 2
    struct {
    int Gene[GeneSize];//
    int Age;
    int BadGeneNum;
    int LiveOrDie;//活着是0;死的是1
    }Agent[Nmax];         //定义结构体数组表示每个个体
    int Nt=N0;
    void Intial()            //初始化函数
    {
    for(i=0;i
    {
    Agent.Age=0;
    Agent.BadGeneNum=0;
    for (j=0;j
    {
    x=rand();
    y=x/32767;
    if(y<0.01)         //初始基因串随机给出,坏基因比例0.01
                {
    Agent.Gene[j]=1;
    }
    else
                {
    Agent.Gene[j]=0;
    }
    ' L$ R( E; \. N# n7 v5 q
    }
            if (i
    {
    Agent.LiveOrDie=0;
    }
    else
    {
    Agent.LiveOrDie=1;
    }
    }
    }
    void Age(int i)                //年龄机制函数
    {
    if (Agent.Gene[Agent.Age]==1)
    Agent.BadGeneNum++;
    Agent.Age++;
    }
    void Die(int i)                  //死亡机制函数
    {
    double v;
    v=(double)rand()/RAND_MAX;
    if (Agent.BadGeneNum>=T)
    {
        Nt-=1;
        Agent.LiveOrDie==1;
    }
    else if (v<((double)Nt/Nmax))
    {
    Nt-=1;
        Agent.LiveOrDie==1;
    }
    else if (Agent.Age>=GeneSize)
    {
    Nt-=1;
        Agent.LiveOrDie==1;
        }
    }
    void Reproduction(int i)
    {
    k=0;
    int z1,z2;
    z1=rand()2;
    z2=rand()2;
    while(Agent[k].LiveOrDie==0)    //b个原本死亡的格子变活,b=1
    k=k++;
    Agent[k].Age=0;                //对新生的个体赋予年龄值
        Agent[k].BadGeneNum=0;
    for (j=0;j
    {
       Agent[k].Gene[j]=Agent.Gene[j];
       if( Agent.Gene[z1]==1)
        Agent[k].Gene[z1]=0;
       else
        Agent[k].Gene[z1]=1;
       if( Agent[k].Gene[z2]==0)
        Agent[k].Gene[z2]=1;
       else
        Agent[k].Gene[z2]=0;
    }
        Nt=Nt+1;
    Agent[k].LiveOrDie=0;
    }                                       //z1,z2突变位置
    void main()
    {
    srand((unsigned)time(NULL));
    Intial();  //初始化
           //时间步迭代
    fp=fopen("penna.txt","w");
    for(t=0;t
    {
    for (i=0;i
    {
    if (Agent.LiveOrDie==0)
    {
    Age(i);//年龄加1;更新坏基因数
    Die(i);//判断死亡1.坏基因致死,2.环境压力致死.3老死
    }
    }
    for (j=0;j
    {
    if (Agent[j].LiveOrDie==0 && Agent[j].Age>=ReproductionAge)
    {
    Reproduction(j);
    }
    }
    2 L+ L; B$ L) Z! h& n) @& {  w' r
    fprintf(fp,"%d\t",Nt);
    }
    }
    三、 结果及分析(包括图及分析)
    (1)对PB=32, 105, 2, 8, 1, M
    最大年龄B=32,最大种群数Nmax=105,疾病次数Tc=2,最低繁殖年龄R=8,每次繁殖子代个数b=1,突变:M=0,t=1000;100,种群规模随时间的变化图
    图一    M=2,t=1000;   & J% E( L/ j- J: |
    图二     M=2,t=100
    9 s- T) `: J' A# E4 {) \& m
    5 y) ]1 X; d  U; Q

    ; G, s: y) O/ C6 l/ {8 C
                   图三    M=2,t=1000;                              

    * n- N9 N9 B2 I; _- Y2 K2 y& L0 Q
                                                                         四    M=2,t=1000;                                                                       

    - a' G! h$ Y  h0 a$ X  k9 P
    (2) P32, 105, 4, R, 1, 2
    R246作稳定后的年龄结构图。
    由(1)知,t=200以后种群数量已经稳定,所以考虑t=200时的年龄组成即可。
                                            图五  
    R=2
    t=200
    年龄结构图        
                   

    ' H; k, W4 B# _; \1 v
                        图六 R=4t=200年龄结构图
                                     图七  R=6t=200年龄结构图

    # @1 o7 i1 I3 b
    3 g  Z: N% W  J5 O5 r; Z- b: w
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-11 09:24 , Processed in 0.393711 second(s), 48 queries .

    回顶部