资源简介
该程序实现了用遗传算法求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语言实现
- 3des加密算法C语言实现
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- 线性回归算法c语言实现
- 用C语言实现的一个打字游戏
- C语言实现的DES对称加密算法
- 用C语言实现高效日志
- C语言实现十进制转十六进制
- 文件传输和聊天程序(c语言实现)
- 基于C语言实现的网络爬虫(搜索引擎
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- C语言实现 设备信息管理系统
- 2048小游戏c语言实现
- C语言实现的航空售票系统
- 简单通讯录C语言实现
- C语言实现栈操作
- C语言实现的银行家算法 做了界面
- filtfilt C语言实现,可直接运行验证
- 用C语言实现一个火车站的订票系统
- 多表代换 加密解密 C语言实现
- 基于遗传算法的机器人路径规划
- c语言实现的商品进销存管理系统
- 公交车查询系统C语言实现
- 赋值语句翻译c语言实现四元式
- c语言实现bch编码
- 椭圆曲线ECC加密解密算法的c语言实现
评论
共有 条评论