资源简介
该程序实现了用遗传算法求y=x*sin(10*PI*x)+2.0的最大值,若需求其他函数最值,稍作修改即可。
代码片段和文件信息
/*
用遗传算法求y=x*sin(10*pi*x)+2的最大值 -1= 精确到6位小数
pow(221)<3*1000000 编码的二进制长度为22
*/
#include
#include
#include
#include
#include
#define N 3000000
#define PI 3.14159265
#define MAX(ab) ((a)>(b)?(a):(b))
#define SIZE 50
#define MAXGEN 50
#define P_CORSS 0.75
#define P_MUTATION 0.05
#define LEN 22
typedef struct node
{
char x[LEN];
double fitnessfitsum;
}node;
node cur[SIZE]next[SIZE]maxmin;
double randd()
{
return (double)rand()/RAND_MAX;
}
int randi(int k)
{
return (int)(randd()*k+0.5);
}
//计算当前种群中各个个体的适应度
void cal_fitness()
{
int ijk;
double d;
for(i=0;i {
k=0;
for(j=LEN-1;j>=0;j--) k=(k<<1)+cur[i].x[j];
d=(double)k/N*3-1;
cur[i].fitness=d*sin(10*PI*d)+2;
cur[i].fitsum=i>0?(cur[i].fitness+cur[i-1].fitsum):(cur[0].fitness);
}
}
void init()
{
int tmp;
for(int i=0;i {
tmp=randi(N);
for(int j=0;j {
cur[i].x[j]=tmp%2;
tmp=tmp>>1;
}
}
cal_fitness();
}
int sel()
{
double p=randd();
double sum=cur[SIZE-1].fitsum;
for(int i=0;i {
if(cur[i].fitsum/sum>p) return i;
}
}
//换代
void tran()
{
int ijpos;
//找当前种群最优个体
max=cur[0];
for(i=1;i {
if(cur[i].fitness>max.fitness) max=cur[i];
}
for(int k=0;k {
相关资源
- 平行束卷积反投影算法C语言实现
- 控制方法的c语言实现208749
- FFT算法的C语言实现可以直接用在单片
- C语言实现傅里叶变换
- 算术编码,C语言实现
- 用C语言实现任意矩阵的相乘
- C语言实现唯一可译码
- 数字图像处理算法C语言实现.
- 雅克比迭代法 c语言实现计算方法
- HDB3码C语言实现
- 数据结构的二叉树用C语言实现的代码
- 飞秋基于c语言实现
- C语言实现矩阵的行阶梯,行最简变换
- 用c语言实现一元多项式的加减乘运算
- 遗传算法C语言实现
- AES128/192/256 C语言实现AES加密/解密实测
- 考勤系统C语言实现完整源码+详细说明
- C语言实现FFT和IFFT
- AES加密算法C语言实现,有测试代码,
- 矩阵相乘的strassen算法c语言实现
- Kruskal算法的c语言实现
- 用C语言实现的完整B树
- 猜数字游戏 c语言实现 猜4位随机生成
- 秘钥管理系统 c语言实现的RSA
- C语言实现二叉树的创建、插入、删除
- 用C语言实现SHA-1算法
- C语言实现拉格朗日插值
- Linux下C语言实现的FTP系统
- linux下FTP服务器与客户端的C语言实现
- 用C语言实现八数码问题的宽度优先搜
评论
共有 条评论