资源简介

用c语言实现的简单的遗传算法,可以将一个输入的函数在定义域范围内自动求出他的最值。

资源截图

代码片段和文件信息

#include
#include
#include
#include

const int NUMBEROFX=6;
int firstG[NUMBEROFX]={0}; //自变量
int firstValue[NUMBEROFX]={0}; //函数值数组
int Bin[NUMBEROFX][5]={0};//自变量的二进制码

//


int max=0;  //最大值对应自变量
int maxValue=0; //最大值
int binMax[5]={0}; //最大值对应自变量的二进制码
int Change=0;  //变异的位数

int function(int x)
{
return(x*x*x-60*x*x+900*x+100);
}

void choose()
{
int temp=0;
int i=0j=0;
double percent[NUMBEROFX]={0.0};  //选择概率
double qpercent[NUMBEROFX]={0.0}; //赌轮法积累概率
double tempPercent=0.0;
int numberOfEachX[NUMBEROFX]={0}; //赌轮法选出的每个自变量对应的次数
int totalValue=0;//函数值数组之和
int copyOfFirstG[NUMBEROFX]={0}; //自变量集合的拷贝


//6个函数值之和
for(i=0;i {
totalValue+=firstValue[i];
}
//每个函数值概率
for(i=0;i {
percent[i]=(double)firstValue[i]/totalValue;
//积累概率
for(j=0;j<=i;j++)
{
qpercent[i]+=percent[j];
}
}
//生成6个随机数
for(i=0;i {
tempPercent=(double)(rand()%10000)/10000;
if(tempPercent<=qpercent[0]) numberOfEachX[0]+=1;
else if(tempPercent<=qpercent[1]) numberOfEachX[1]+=1;
else if(tempPercent<=qpercent[2]) numberOfEachX[2]+=1;
else if(tempPercent<=qpercent[3]) numberOfEachX[3]+=1;
else if(tempPercent<=qpercent[4]) numberOfEachX[4]+=1;
else if(tempPercent<=qpercent[5]) numberOfEachX[5]+=1;
}

//复制新的种群到firstG中
temp=0;
//将原自变量集合拷贝到新的集合
for(i=0;i {
copyOfFirstG[i]=firstG[i];
}
//根据每个原自变量出现的次数重新赋值firstG
for(j=0;j {
for(i=temp;i {
firstG[i]=copyOfFirstG[j];
}
temp+=numberOfEachX[j];
}
}

void inttobin()
{
int i=0j=0;
int tempBin[5]={0};//自变量二进制码临时变量

for(i=0;i {
for(j=0;j<5;j++)
{
tempBin[j]=0;
}
j=0;
while(firstG[i]>=2)
{
tempBin[j++]=firstG[i]%2;
firstG[i]=firstG[i]/2;
}
if(firstG[i]) tempBin[j]=1;
for(j=0;j<5;j++)
{
Bin[i][j]=tempBin[4-j];
}
}   
/*
for(j=0;j<5;j++)
{  
tempBin[j]=0;
}
j=0;
while(max>=2)
{
tempBin[j++]=max%2;
max=max/2;
}
if(max) tempBin[j]=1;
for(j=0;j<5;j++)
{
binMax[j]=tempBin[4-j];
}
*/
}    

void reverse()
{  
int temp=0ijk;
int Reverse=0; //交叉的位数
int groupInfo[NUMBEROFX]; //两两分组,每个元素的值为与该元素配对的那个,初始都为7,表示未配对
int newBin[NUMBEROFX][5]={0}; //交叉后新的自变量二进制

for(i=0;i {
groupInfo[i]=NUMBEROFX+1;
}
for(i=0k=0;i {
if(groupInfo[i]==NUMBEROFX+1)  //若该元素已经配对,则跳过该元素,若该元素未配对,则配对并进行交叉
{
while(true)  //生成随机数
{

temp=rand()%NUMBEROFX;
if(temp!=i&&groupInfo[temp]==NUMBEROFX+1)  //该随机数不等于当前要配对的数,且该随机数未配对则配对并跳出循环;
//否则重新生成随机数
{
groupInfo[i]=temp; 
groupInfo[temp]=i;
break;
}
}

//确定交叉的位数
Reverse=rand()%5;
//概率为0.9
if(rand()%10<=8)
{
for(j=0;j<=Reverse;j++)
{
newBin[2*k][j]=Bin[i][j];
}
for(j=4;j>Rev

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-11-13 23:34  Genetic\
     目录           0  2012-11-13 22:59  Genetic\Debug\
     文件       33792  2012-11-13 23:33  Genetic\Debug\Genetic.exe
     文件      347500  2012-11-13 23:33  Genetic\Debug\Genetic.ilk
     文件      437248  2012-11-13 23:33  Genetic\Debug\Genetic.pdb
     目录           0  2012-11-05 18:41  Genetic\Genetic\
     文件     2314240  2012-11-13 23:34  Genetic\Genetic.sdf
     文件         888  2012-09-27 21:27  Genetic\Genetic.sln
     文件       12800  2012-11-13 23:34  Genetic\Genetic.suo
     目录           0  2012-11-13 23:33  Genetic\Genetic\Debug\
     文件         622  2012-11-13 23:33  Genetic\Genetic\Debug\cl.command.1.tlog
     文件        1974  2012-11-13 23:33  Genetic\Genetic\Debug\CL.read.1.tlog
     文件         288  2012-11-13 23:33  Genetic\Genetic\Debug\CL.write.1.tlog
     文件        1575  2012-11-01 23:00  Genetic\Genetic\Debug\Genetic.Build.CppClean.log
     文件         406  2012-11-01 23:00  Genetic\Genetic\Debug\Genetic.exe.embed.manifest
     文件         472  2012-11-01 23:00  Genetic\Genetic\Debug\Genetic.exe.embed.manifest.res
     文件         381  2012-11-13 23:33  Genetic\Genetic\Debug\Genetic.exe.intermediate.manifest
     文件          50  2012-11-13 23:33  Genetic\Genetic\Debug\Genetic.lastbuildstate
     文件        2046  2012-11-13 23:33  Genetic\Genetic\Debug\Genetic.log
     文件       21657  2012-11-13 23:33  Genetic\Genetic\Debug\Genetic.obj
     文件         204  2012-11-01 23:00  Genetic\Genetic\Debug\Genetic_manifest.rc
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link-cvtres.read.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link-cvtres.write.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.3120-cvtres.read.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.3120-cvtres.write.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.3120.read.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.3120.write.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.7512-cvtres.read.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.7512-cvtres.write.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.7512.read.1.tlog
     文件           2  2012-11-13 23:33  Genetic\Genetic\Debug\link.7512.write.1.tlog
............此处省略20个文件信息

评论

共有 条评论