登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

基本遗传算法源程序3  

2006-02-25 14:43:04|  分类: 技术积累 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//基因的交叉算子

//Crossover two chromosome by means of one-point crosover.

void CrossoverOperator(void)

{

    int i, j;

    int index[POPSIZE];

    int point, temp;

    double p;

    char ch;

 

    //make a pair of individual randomly

    for(i = 0; i < PopSize; i++)

    {

        index[i] = i;

    }

    for(i =0; i < PopSize; i++)

    {

        point = random(PopSize - i);

        temp = index[i];

        index[i] = index[point + i];

        index[point + i] = temp;

    }

    //one - point crossover operation

    for(i = 0; i < PopSize - 1; i += 2)

    {

        p = rand() % 1000 / 1000.0;

        if(p < Pc)

        {

            point = random(CHROMLENGTH - 1) + 1;

            for(j = point; j < CHROMLENGTH; j++)

            {

                ch = population[index[i]].chrom[j];

                population[index[i]].chrom[j] = population[index[i + 1]].chrom[j];

                population[index[i + 1]].chrom[j] = ch;

            }

        }

    }

}

 

 

//基因突变

//Mutation of a chromosome.

void MutationOperator(void)

{

    int i, j;

    double p;

    //bit mutation

    for(i = 0; i < PopSize; i++)

    {

        for(j = 0; j < CHROMLENGTH; j++)

        {

            p = rand() % 1000 / 1000.0;

            if(p < Pm)

            {

                population[i].chrom[j] = (population[i].chrom[j] = '0') ? '1' : '0';

            }

        }

    }

}

 

 

//打印报表

//Output the results of urrent population

void OutputTextReport(void)

{

    int i;

    double sum;//temporary sum

    double average; //average of population object value;

 

    //calculate average object value

    sum = 0.0;

    for(i = 0; i < PopSize; i++)

    {

        sum += population[i].value;

    }

    average = sum / PopSize;

    //print result of this population

    printf("gen=%d\tavg=%f\tbest=%f\t", generation, average, currentbest.value);

    printf("chromosome=");

    for(i = 0; i < CHROMLENGTH; i++)

    {

        printf("%c", currentbest.chrom[i]);

    }

    printf("\n");

    //getch();

}

//END

//(标准库中没有random函数,这个是我补充的函数)

int random(int max)

{

    return (rand() % max);

}
  评论这张
 
阅读(1047)| 评论(1)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018