//目标函数:y=(x1-1)^2+(x2-2)^2;
#include<stdio.h>
#include<time.h>
#include<math.h>
#include<windows.h>
#define delta 3
#define T 200   //进化代数
#define N 200   //群体个数
#define INT 4   //整数基因长度
#define FLOAT 0//小数基因长度
#define MUTATE 0.005//基因突变率int t = 0;  //代数计数
int gene[N][(INT + FLOAT) * delta];    //基因
double value[N];    //函数值
double ratio[N];    //适应度概率区间
int pair[N];    //随机配对规则
int totalRate = 0;void InitGroup();
double GetValue(int[], int);
void SortGroup();
void Output();
double Function(float, float);
void PairGroup();
void GeneMutate();
void Answer();int main() {InitGroup();Output();while ((t++) != T) {GeneMutate();SortGroup();PairGroup();}SortGroup();Output();Answer();
}//目标函数
double Function(double a, double b,double c=15) {return 2 * a * a - 3 * b * b - 4 * a + 5 * b + c;
}//初始化种群
void InitGroup() {for (int i = 1; i <= N; i++) {totalRate += i * i;}srand((unsigned)time(0));for (int i = 0; i < N; i++) {for (int j = 0; j < (INT + FLOAT) * delta; j++) {gene[i][j] = rand() % 2;}}for (int i = 0; i < N; i++) {if (i == 0) {ratio[i] = (i + 1) * (i + 1) / (double)totalRate;}else {ratio[i] = (i + 1) * (i + 1) / (double)totalRate;ratio[i] += ratio[i - 1];}}for (int i = 0; i < N; i++) {value[i] = Function(GetValue(gene[i], 1), GetValue(gene[i], 2),GetValue(gene[i],3));}
}//输出种群信息
void Output() {printf("个体基因:\n");for (int i = 0; i < N; i++) {printf("【");for (int j = 0; j < (INT + FLOAT) * delta; j++) {if (j == INT) printf(",");else if (j == INT + FLOAT) printf("】,【");else if (j == INT * delta + FLOAT) printf(",");printf("%d", gene[i][j]);}printf("】\n");}printf("个体数值:\n");for (int i = 0; i < N; i++) {printf("%5d: ", i);for (int j = 0; j < delta - 1; j++)printf("%.2f + ", GetValue(gene[i],j+1));printf("%.2f = ", GetValue(gene[i], delta));printf("%.0f\n", value[i]);}
}//求十进制值
double GetValue(int a[(INT + FLOAT) * delta], int n) {int v = 0;double ans=0;for (int i = 1 + (INT + FLOAT) * (n - 1); i <= (INT + FLOAT) * n; i++) {if (a[i - 1] != 0) v += pow(2, (INT + FLOAT) * n - i);}ans = v / (double)pow(2, FLOAT);return ans;
}//计算适应度并排序
void SortGroup() {for (int i = 0; i < N; i++) {for (int j = 0; j < N - 1; j++) {if (value[j] > value[j + 1]) {double b = value[j];value[j] = value[j + 1];value[j + 1] = b;for (int k = 0; k < (INT + FLOAT) * delta; k++) {int a = gene[j][k];gene[j][k] = gene[j + 1][k];gene[j + 1][k] = a;}}}}
}//基因自由组合
void PairGroup() {float b;//printf("\n配对规则:");for (int i = 0; i < N; i++) {b = rand() / (RAND_MAX + 1.0);for (int j = 0; j < N; j++) {if (ratio[j] >= b) {pair[i] = j;//printf("%d  ",pair[i]);break;}}}//printf("\n分割位置:");int gene1[N][(INT + FLOAT) * delta];for (int i = 0; i < N - 1; i += 2) {int pos = rand() % ((INT + FLOAT) * delta - 1) + 1;//printf("%d  ",pos);for (int k = 0; k < (INT + FLOAT) * delta; k++) {gene1[i][k] = gene[pair[i]][k];gene1[i + 1][k] = gene[pair[i + 1]][k];}for (int j = 0; j < pos; j++) {int a = gene1[i][j];gene1[i][j] = gene1[i + 1][j];gene1[i + 1][j] = a;}}for (int i = 0; i < N; i++) {for (int j = 0; j < (INT + FLOAT) * delta; j++) {gene[i][j] = gene1[i][j];}}for (int i = 0; i < N; i++) {value[i] = Function(GetValue(gene[i], 1), GetValue(gene[i], 2),GetValue(gene[i],3));}
}//基因突变
void GeneMutate() {for (int i = 0; i < N; i++) {for (int j = 0; j < (INT + FLOAT) * delta; j++) {if (rand() / (RAND_MAX + 1.0) < MUTATE) {gene[i][j] = (gene[i][j] + 1) % 2;}}}for (int i = 0; i < N; i++) {value[i] = Function(GetValue(gene[i], 1), GetValue(gene[i], 2),GetValue(gene[i],3));}
}//输出答案
void Answer() {printf("\n\n最大值是:%.0f\n", value[N - 1]);for(int i=0;i<delta;i++)printf("x%d=%.0f\n", i+1,GetValue(gene[N - 1], i+1));
}

这是一个别人写好的遗传算法,在此基础上修改为任意元遗传算法,但是其中套用的时候需要修改一些地方而不是只修改宏定义,除非将其中的参数列表写为...的形式,就不花这个时间了.

遗传算法的C语言实现相关推荐

  1. 遗传算法的C语言实现(一):以非线性函数求极值为例

    以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...

  2. 遗传算法二进制编码c语言,遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)...

    本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉. 首先,给出个人用python2.7实现的代码,具体模块已上传到: https://github.com/guojun007/sb ...

  3. 遗传算法的c++语言程,C++实现简单遗传算法

    本文实例讲述了C++实现简单遗传算法.分享给大家供大家参考.具体实现方法如下: //遗传算法 GA #include #include #include using namespace std; co ...

  4. 遗传算法的c++语言程,遗传算法 C++的程序

    遗传算法 C++的程序 #include #include #include /* Change any of these parameters to match your needs */ #def ...

  5. 数据分析-R语言资料整理

    独家分享--48页PPT解密数据可视化! Excel图表快捷操作小技巧 基于随机森林的分类与回归 R语言制作网页 ggplot2:可视化设计师的神器,了解一下 [译]R包介绍:Online Rando ...

  6. R语言中文社区2018年终文章整理(作者篇)

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  7. 精心整理 | R语言中文社区历史文章整理(类型篇)

    2018年过去一半了~又到了盘点的时间~感谢长时间来各位好友的关注,我们的成长与你们的爱护是分不开的.更感谢各位老师的投稿,支撑起了我们的这个社区,让更多R语言的爱好者和从业者获得最棒的知识!本文选取 ...

  8. 工行智能客服服务量突破1.7亿笔;迪拜机场拟用人脸识别技术替代护照检查

    韩国防部:计划于2025年前将人工智能投入野战运营 雷锋网 AI 掘金志消息,据韩联社10月9日报道,韩国国防部消息人士当天表示,军方计划到2025年研发人工智能,并将其投入到野战部队的实战运营中. ...

  9. R+ECharts2Shiny实现web动态交互式可视化数据(中)

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

最新文章

  1. AV1时代要来了,超高清视频时代视频编码技术的机遇与挑战
  2. 读excel图片到数据库和上传图片到数据库
  3. ROS+Turtlebot3+RVIZ 显示机器人历史轨迹方法
  4. 快速构建Windows 8风格应用22-MessageDialog
  5. Spring5参考指南:容器扩展
  6. 1036 Boys vs Girls (25 分)_27行代码AC
  7. 图像种类的基本概念整理
  8. 分析一个BO上创建的extension field detail
  9. Python3字符串
  10. 怎么看另一个电脑端口是否通_谁一个人睡觉另一个看看夫妻的睡眠习惯
  11. 在win server 2003上安装SQL Server 2008的步骤
  12. [转载] python cmp函数比较字典_Python 字典(Dictionary) cmp()方法
  13. 亿级流量架构服务降级,写得太好了!
  14. SSIM和PSNR计算
  15. Laravel学习笔记(8)利用SEEDER或者模型工厂批量导入数据
  16. ContextCapture Master 倾斜摄影测量实景三维建模技术
  17. elasticsearch从入门到入门系列(二)---快速入门B
  18. 命令行创建文件和文件夹
  19. 三维向量求夹角(0-360)
  20. mysql gis_MySQL的GIS、GEO入门笔记

热门文章

  1. android禁止下拉刷新,Android开发之无痕过渡下拉刷新控件的实现思路详解
  2. PHPCMS手机访问,调用手机模板
  3. 计算机网络实验:PPP配置与分析
  4. 大数据三种主流架构(Lambda、Kappa、IOTA)
  5. 第三方数据采集卡在LabVIEW中使用Express VI简化编程范例
  6. html 保存草稿,利用localStorage实现对ueditor编辑内容定时保存为草稿,ueditor草稿箱...
  7. 学python对工作有什么帮助_学python有什么好处 学好了能干什么
  8. Photoshop实用的快捷键分享
  9. 双指针、BFS与图论
  10. 怎么将照片压缩变小一点?超实用的几种方法