| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4554 人关注过本帖
标题:下面代码遗传算法中,是交叉操作的哪种方法呢(部分匹配交叉法,单点交叉, ...
只看楼主 加入收藏
haiqin2009
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-20
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:8 
下面代码遗传算法中,是交叉操作的哪种方法呢(部分匹配交叉法,单点交叉,顺序交叉,循环交叉)
以下代码是交叉操作的哪种方法呢 ?是部分匹配交叉法,单点交叉,顺序交叉,循环交叉?还是其他的方法呢?
void Cross(PTSP city,double pc)
{//交叉概率是pc
    int crossNum,i;
    int cityCross[2][CITY_NUM+1];
    int tempXuh[2];
    crossNum=int(POPSIZE*pc);
   
    for(i=0;i<crossNum/2;i++)
    {
        tempXuh[0]=rand()%(POPSIZE-1);
        do
        {
            tempXuh[1]=rand()%(POPSIZE-1);
        }while(tempXuh[0]==tempXuh[1]);
        copyCityXuhTo(city,tempXuh,cityCross);
        crossTwo(city,tempXuh,cityCross);
    }
void copyCityXuhTo(PTSP city,int *tempXuh,int cityCross[][CITY_NUM+1])
{
    int i,h;

    for(h=0;h<2;h++)
    {
    for(i=0;i<=CITY_NUM;i++)
    {
        cityCross[h][i]=city->colony[tempXuh[h]][i];
    }
    }
return;
void crossTwo(PTSP city,int *tempXuh,int cityCross[][CITY_NUM+1]) //交叉操作
{
    int genePoint[2],temp1,countCrossGene,flaglike;
    int samePoint=0;
    int i,j,k,h;
    int tempcityxuh[2][CITY_NUM+1];
   
    do
    {
        genePoint[0]=rand()%(CITY_NUM-1);
        genePoint[1]=rand()%(CITY_NUM-1)+1;
    }while(genePoint[0]==genePoint[1]||genePoint[0]==0||genePoint[1]==0);
    if(genePoint[0]>genePoint[1]) {temp1=genePoint[0];genePoint[0]=genePoint[1];genePoint[1]=temp1;}
    countCrossGene=genePoint[1]-genePoint[0];

    for(k=0;k<2;k++)//相同的部分屏蔽
    {
        for(i=genePoint[0]+1;i<=genePoint[1];i++)
        {
            for(j=1;j<CITY_NUM;j++)
            {
                if(!(j>genePoint[0]&&j<=genePoint[1]))
                {
                if(cityCross[k][j]==cityCross[(k+1)%2][i])
                {
                    ++samePoint;
                    cityCross[k][j]=CITY_NUM;//用CITYNUM代表H
                }
                }
            }
        }
    }
    samePoint=samePoint/2;

    //for(h=0;h<2;h++)
    //{
    for(k=0;k<2;k++)//one
    {
            j=1;
    for(i=genePoint[0]+1;i<=genePoint[1];i++)
    {
        tempcityxuh[k][j++]=cityCross[(k+1)%2][i];
        cityCross[(k+1)%2][i]=0;
    }
    for(i=1;i<=CITY_NUM-1;i++)
    {
        if(cityCross[k][i]==CITY_NUM)
        {
            tempcityxuh[k][j++]=cityCross[k][i];
            cityCross[k][i]=0;
        }
    }
    for(i=1;i<=CITY_NUM-1;i++)
    {
        if(cityCross[k][i]!=0&&!(i>genePoint[0]&&i<=genePoint[1]))
        {
            tempcityxuh[k][j++]=cityCross[k][i];
        }
    }
    }//for k
//    }

   
    if(samePoint!=0)//cross
    {
        for(h=0;h<2;h++)
        {
        k=countCrossGene;
        for(i=1;i<=countCrossGene;i++)
        {
            flaglike=0;
            for(j=1;j<=countCrossGene&&flaglike==0;j++)
            {
                if(tempcityxuh[h][i]==tempcityxuh[(h+1)%2][j])
                {
                    flaglike=1;
                }
            }
            if(flaglike==0) {tempcityxuh[(h+1)%2][++k]=tempcityxuh[h][i];}
        }
        }//forh
    }
}
搜索更多相关主题的帖子: Cross 
2011-05-27 14:18
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
遗传算法是神马?

My life is brilliant
2011-05-27 16:48
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
这个我真的不懂  请教楼主  什么是遗传算法

                                         
===========深入<----------------->浅出============
2011-05-27 16:56
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:3 
看不懂。帮顶。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-27 16:58
haiqin2009
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-20
收藏
得分:0 
回复 2楼 lz1091914999
遗传算法是属于人工智能里面的!
2011-05-27 17:26
haiqin2009
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-20
收藏
得分:0 
回复 3楼 laoyang103
谢谢哈
2011-05-27 17:26
haiqin2009
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-20
收藏
得分:0 
高手帮忙 帮忙!~
2011-05-27 20:01
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:3 
你是研究这个的,既然你自己都不知道,我们怎么会知道呢?

愿用余生致力编程
2011-05-27 20:23
haiqin2009
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-20
收藏
得分:0 
回复 7楼 haiqin2009
我是在学习,学习哈!不懂的,向大家请教!
2011-05-27 20:48
快速回复:下面代码遗传算法中,是交叉操作的哪种方法呢(部分匹配交叉法,单点交 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019367 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved