思路:

//目标函数:y=(x1-1)^2+(x2-2)^2;
#include<stdio.h>
#include<time.h>
#include<windows.h>
#define T 2000  //进化代数
#define N 200   //群体个数
#define INT 8   //整数基因长度
#define FLOAT 20    //小数基因长度
#define MUTATE 0.005    //基因突变率int t=0;    //代数计数
int gene[N][(INT+FLOAT)*2];    //基因
double value[N];    //函数值
double ratio[N];    //适应度概率区间
int pair[N];    //随机配对规则
int totalRate=0;void InitGroup();
double GetValue(int[],int);
int Mi(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) {return -(a-1)*(a-1)-(b-2)*(b-2)+2;
}//初始化种群
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)*2; 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];}//printf("%f\n",ratio[i]);}for(int i=0; i<N; i++) {value[i]=Function(GetValue(gene[i],1),GetValue(gene[i],2));}
}//输出种群信息
void Output() {printf("个体基因:\n");for(int i=0; i<N; i++) {printf("【");for(int j=0; j<(INT+FLOAT)*2; j++) {if(j==INT) printf(",");else if(j==INT+FLOAT) printf("】,【");else if(j==INT*2+FLOAT) printf(",");printf("%d",gene[i][j]);}printf("】\n");}printf("个体数值:\n");for(int i=0; i<N; i++) {printf("%d: %f + %f -> %.16f\n",i,GetValue(gene[i],1),GetValue(gene[i],2),value[i]);}
}//求a的b次方
int Mi(int a,int b) {int ans=1;for(int i=0; i<b; i++) {ans*=a;}return ans;
}//求十进制值
double GetValue(int a[(INT+FLOAT)*2],int n) {int v=0;double ans;if(n==1) {for(int i=1; i<=INT+FLOAT; i++) {if(a[i-1]!=0) v+=Mi(2,INT+FLOAT-i);}ans=v/(double)Mi(2,FLOAT);} else if(n==2) {for(int i=1+INT+FLOAT; i<=(INT+FLOAT)*2; i++) {if(a[i-1]!=0) v+=Mi(2,(INT+FLOAT)*2-i);}ans=v/(double)Mi(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)*2; 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)*2];for(int i=0; i<N-1; i+=2) {int pos=rand()%((INT+FLOAT)*2-1)+1;//printf("%d  ",pos);for(int k=0; k<(INT+FLOAT)*2; 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)*2; 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));}
}//基因突变
void GeneMutate() {for(int i=0; i<N; i++) {for(int j=0; j<(INT+FLOAT)*2; 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));}
}//输出答案
void Answer() {printf("\n\n最大值是:%.16f\n",value[N-1]);printf("此时,x1=%f, x2=%f\n",GetValue(gene[N-1],1),GetValue(gene[N-1],2));
}

运行结果:

遗传算法(求函数极值)简易代码C语言200行相关推荐

  1. python求函数极值_python 遗传算法求函数极值的实现代码

    废话不多说,大家直接看代码吧! """遗传算法实现求函数极大值-Zjh""" import numpy as np import rando ...

  2. 遗传算法求函数极值(含MATLAB代码实现)

    介绍转载自https://blog.csdn.net/xujinpeng99/article/details/6211597,后面用自己设置的函数进行实验. 引言:遗传算法求函数极值算是遗传算法的一种 ...

  3. 人工智能遗传算法求函数极值

    ** 人工智能遗传算法求函数极值 ** 1.实验目的与原理 1)目的 熟悉和掌握遗传算法的原理.流程和编码策略,并利用遗传求解函数优化问题,理解求解函数极值问题的流程并测试主要参数对结果的影响,掌握遗 ...

  4. 遗传算法求函数最小值(多维)1

     目标函数:  代码: %%实值遗传算法求函数极值%%%% %%%%%初始化参数%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 NP=100; %染色 ...

  5. 遗传算法求函数最小值(多维)2

     目标函数:  代码: function o=func21(x) o=sum(x.^2-10*cos(2*pi.*x)+10); end %%实值遗传算法求函数极值%%%% %%%%%初始化参数%%% ...

  6. GA求函数极值问题MATLAB代码学习

    标准遗传算法求函数极值y=x+10*sin(5*x)+7*cos(4*x) 一.代码 0 初始化参数 %x=0:0.1:10; %y=x+10*sin(5*x)+7*cos(4*x); %plot(x ...

  7. MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)

    MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...

  8. 运用遗传算法求解函数极值(fortran)

    运用遗传算法求解函数极值(fortran) 写在前面 遗传算法的前世今生 算法步骤简介 遗传算法的主体结构 开始求解: 结果显示: 最后再来说一些需要注意的地方 写在前面 这篇文章适合一些应急学习最优 ...

  9. 利用遗传算法求解函数极值

    1.利用遗传算法求解函数极值 例1 利用遗传算法求函数 f(x) = 11sin(6x) + 7cos(5x),x∈[- π,π]的最大值点. 解:在MATLAB中编制绘制函数曲线的代码,运行得到题中 ...

最新文章

  1. php mysql int string_mysql查出的 int 型字段都是 string
  2. java删除一级域名下cookie_java操作cookie示例(删除cookie)
  3. 为什么有了接口还要增加一层抽象类?
  4. Template Metaprogramming
  5. windows创建进程的过程
  6. Linux文件删除原理
  7. azure 免费帐户注册_如何使用模拟器模拟Azure SQL数据库存储帐户行为
  8. (面试)涉及到继承和类加载
  9. 扇贝编程python是干嘛的-扇贝新推出的python课程值得买吗?
  10. 医疗系统流程软件测试用例,医疗管理系统案例测试用例.doc
  11. oracle健康检查脚本下载,oracle 数据库性能健康检查脚本
  12. 基于数组(非链表)实现软件定时器---可以移植到未使用系统的单片机,通用型
  13. __init__.py 文件用法
  14. 需求文档 | 商业需求文档(BRD)
  15. 美貌智慧不可兼得?超模琳赛 斯科特变身程序员
  16. 博弈论之:防止背叛与促进背叛
  17. 检测labview安装visa驱动,并实现串口仪器控制(上篇)
  18. 大神教你如何搭建自己的web speedtest站点
  19. 计算机辩证技巧,庄子:辩证智慧与诡辩技巧
  20. [办公软件教程] Excel迷你图在哪里?Excel迷你图怎么设置

热门文章

  1. C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.10 轻松一下---国际C语言混乱代码大赛
  2. 阿里云虚拟主机使用教程
  3. Codeforce C. Barcode
  4. 数据度量消费贷款—影响因素数据分析
  5. oracle 11g for solaris,solaris 11 下安装oracle 11g 与 11g RAC
  6. IAR里面的icf文件的解析
  7. 大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase
  8. 安卓安装kali教程
  9. Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED参数详解
  10. 聊聊这次试用期“被”离职和感悟(大前端组)