资源简介
用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.em
文件 472 2012-11-01 23:00 Genetic\Genetic\Debug\Genetic.exe.em
文件 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\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
文件 2 2012-11-13 23:33 Genetic\Genetic\Debug\li
............此处省略20个文件信息
相关资源
- 精通Windows.API-函数、接口、编程(光
- 机器学习-数据挖掘-梯度下降算法C+
- ISODATA算法C语言程序
- 基于混沌算法的图像加密系统C++源码
- KMP中文字符匹配算法的C++实现
- 图像增强MSRCR算法
- FDTD 算法以及C语言代码
- 区域填充三种算法
- C语言经典算法最大流问题
- C++语言释难解惑
- VC++ AES加密算法实现与范例的源代码
- 网络拓扑发现算法c++源码
- 文件压缩程序基于哈夫曼C++算法
- 四种页面置换算法代码
- 数据结构算法与应用-c++语言描述(代
- 数据结构与算法分析c++第三版课后习
- 图像边缘提取经典算法MFC实现
- Coons曲面与hermite、bezier、B样条曲线标
- 算法c语言实现英文版part1-4
- 常用算法程序集C语言描述第三版(
- libcstl数据结构和常用的算法库
- 龙格库塔算法c++
- MD5算法源代码(MFC)
- 蚁群算法解决旅行商问题c++
- C++ 排课程序源代码
- 使用API函数实现的串口通讯DLL含源码
- 旅行商问题TSP三种解决算法 基于C++的
- 梁友栋-barsky算法
- VC++经典小游戏含代码 算法说明
- MFC实现RSA算法
评论
共有 条评论