资源简介
用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个文件信息
相关资源
- CCS FFT c语言算法
- 小波变换算法 c语言版
- 3des加密算法C语言实现
- DES加密算法C语言实现
- c语言字符串分割截取子串查找插入删
- 线性回归算法c语言实现
- 基于C语言的模拟退火算法
- C语言实现的DES对称加密算法
- 用VC6.0实现多边形扫描线填充算法
- c语言编写的货郎担算法
- Em算法(使用C++编写)
- STM32烧写算法flash包
- stm32库函数代码自动生成器V1.2
- 永磁同步电机的FOC控制算法
- Proteus仿真:PID算法输出.rar
- 一个模糊PID温度控制算法源代码
- 经典滤波算法
- KMP算法C语言程序
- SVM算法实现(源码+文档)
- 算法A律U律实现
- 人工蜂群算法.docx
- C语言标准库函数大全.chm
- Windows_API_函数大全 C/C++
- BlowFish加密算法
- C语言常用算法源代码
- c++数组快排算法
- 算法表达式求值.cpp
- PID算法.c
- QR二维码C++源码 算法实现
- 基于opencv漫水填充算法综合
评论
共有 条评论