网上看到了一个比较不错的讲解遗传算法的帖子,链接如下

http://blog.csdn.net/b2b160/article/details/4680853

但是却没有贴源代码,正好最近闲来无事,就尝试写了下代码实现,测试了几次,寻优结果都能达到了二元函数最大值98,如下所示

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define MAXLENGTH 1000

#define DNANUMBER 30

#define DNALENGTH 6

#define ITERATIONNUMBER 100

int generic[DNANUMBER][MAXLENGTH];

int select[DNANUMBER][MAXLENGTH];

int FitNess[DNANUMBER];

float FitNessProportion[DNANUMBER];

//二次函数为f(x1,x2)=x1^2+x2^2;遗传数组为待求解的串组合

int fitMax;

void InitDna()

{

//对所有的染色体进行随机初始化

int i,j;

fitMax=INT_MIN;

srand(time(NULL));

for(i=0;i

{

for(j=0;j

{

if(rand()%2==0)

{

generic[i][j]=1;

}

else

generic[i][j]=0;

}

}

}

int BinaryToDecimal(int index,int start,int end)

{

int ret=0;

int i;

int mul=1;

for(i=end;i>=start;i--)

{

if(generic[index][i]==1)

{

ret+=mul;

}

mul=mul*2;

}

return ret;

}

int Decode(int index)

{

int i=0;

int x1,x2;

x1=BinaryToDecimal(index,0,DNALENGTH/2-1);

x2=BinaryToDecimal(index,DNALENGTH/2,DNALENGTH-1);

return x1*x1+x2*x2;

}

void CopyGenericToSelect(int srcIndex,int dstIndex)

{

int i=0;

for(i=0;i

{

select[dstIndex][i]=generic[srcIndex][i];

}

}

void CopySelecToGeneric(int srcIndex,int dstIndex)

{

int i=0;

for(i=0;i

{

generic[dstIndex][i]=select[srcIndex][i];

}

}

void SelectDna()

{

//进行适应度计算 然后填充FitNess和FitNessProportion数组

int i,j;

int fitSum=0;

for(i=0;i

{

FitNess[i]=Decode(i);

fitMax=std::max(fitMax,FitNess[i]);

fitSum+=FitNess[i];

}

for(i=0;i

{

FitNessProportion[i]=0;

FitNessProportion[i]+=FitNess[i];

}

//生成和DNA数目相同的随机数,查看其落在FitNessProprotion哪个区间,并选择其对应的区域,这就是经典的轮盘赌选择方法

srand(time(NULL));

int mask[DNANUMBER];

for(i=0;i

{

mask[i]=0;

}

float randNumber;

for(i=0;i

{

randNumber=rand()/RAND_MAX;

for(j=0;j

{

if(randNumber

{

mask[j]++;

break;

}

}

}

//根据mask数组情况来进行染色体复制 比如mask数组为 1 1 2 0 1 ,就把1,2,3,5号染色体复制回原染色体组,其中3号染色体复制两次

int count=0;

for(i=0;i

{

while(mask[i]!=0)

{

CopyGenericToSelect(mask[i],count);

count++;

mask[i]--;

}

}

//将选择后的select矩阵写回到原generic矩阵

for(i=0;i

{

CopySelecToGeneric(i,i);

}

}

void Swap(int index)

{

int i,j;

int swapIndex;

int temp;

srand(time(NULL));

swapIndex=rand()%DNANUMBER;

for(i=0;i

{

temp=generic[index][i];

generic[index][i]=generic[swapIndex][i];

generic[swapIndex][i]=temp;

}

}

void CrossDna()

{

//该函数为交叉操作

//对dna矩阵进行随机分组

int i,j;

for(i=0;i

{

Swap(i);

}

//两两一组,进行交叉

srand(time(NULL));

int crossPoint;

int temp;

for(i=0;i

{

crossPoint=rand()%DNALENGTH;

for(j=crossPoint;j

{

temp=generic[i][j];

generic[i][j]=generic[i+1][j];

generic[i+1][j]=temp;

}

}

}

void VariateDna()

{

srand(time(NULL));

int variaPoint=rand()%DNALENGTH;

int i;

for(i=0;i

{

if(generic[i][variaPoint]==1)

generic[i][variaPoint]=0;

else

generic[i][variaPoint]=1;

}

}

void Generic()

{

int i,j,k;

InitDna();

for(i=0;i

{

SelectDna();

CrossDna();

VariateDna();

}

cout<

}

int main()

{

int i;

for(i=0;i<50;i++)

{

Generic();

}

return 0;

}

遗传算法求二元函数极值怎么编码_遗传算法求解二元函数极值源码相关推荐

  1. 遗传算法求二元函数极值怎么编码_遗传算法求解一元函数二元函数最值

    ##--------------------------施工中----------------------------## import random import math import numpy ...

  2. 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)

    1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文) 文章目录 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程 ...

  3. c++ gdb 绑定源码_【Vue原理】VNode 源码版

    ↑点击上方 "神仙朱" 一起研究Vue源码吧 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版 ...

  4. JavaScript实现多项式函数在某个点的评估算法(附完整源码)

    JavaScript实现多项式函数在某个点的评估算法(附完整源码) classicPolynome.js完整源代码 classicPolynome.js完整源代码 /** @param {number ...

  5. 天天有毒_鸡汤文案类小程序源码

    简介: 天天有毒_鸡汤文案类小程序源码 网盘下载地址: http://kekewl.net/oi8WRaw46rq0 图片:

  6. c语言比较函数memcmp,c语言函数memcmp()如何比较内存前n个字节实例源码介绍

    c语言函数memcmp()如何比较内存前n个字节实例源码介绍.引入头文件:#include 定义memcmp()函数:int memcmp (const void *s1, const void *s ...

  7. html圣诞树代码_支持手机选择背景音乐圣诞树源码

    html圣诞树代码_支持手机选择背景音乐圣诞树源码小子在本地测试了下,圣诞树会根据音乐变化起来,挺好看的手机打开显示黑屏的问题,已经修复适配,上传服务器即可,如果加载慢就把远程js和css本地化或者更 ...

  8. 遗传算法求二元函数极值怎么编码_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  9. python使用函数求特殊a串数列和_习题6-2 使用函数求特殊a串数列和

    #include int fn(int a, int n); int SumA(int a, int n); int main() { int a, n; scanf_s("%d %d&qu ...

最新文章

  1. 某leader求助:周六晚上拉下属开会,被下属怀孕的老婆公然大骂,怎么办?网友:活该!...
  2. 传蔚来计划回国内科创板上市,关闭硅谷办公室
  3. AE CreateFeatureClass 创建shp. 删除shp. 向shp中添加要素
  4. 十分钟学会用Go编写Web中间件
  5. 95-30-050-java.util-LinkedHashMap
  6. .ne中的控制器循环出来的数据如何显示在视图上_让不懂编程的人爱上iPhone开发系列2 iOS12+Swift4.2版-Checklists-16...
  7. 文本输入框input将输入转换为统一大小写
  8. 链式延迟执行DOME
  9. 《Xcode实战开发》——1.1节下载
  10. js 能实现监听F5页面刷新子iframe 而父页面不刷新
  11. 手机登入注册为什么出现这个错误?
  12. python设计模式-模板方法模式 1
  13. 编译问题处理:undefined symbol: OPENSSL_init_crypto
  14. Samba使用大全(绝对经典)
  15. matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!
  16. 魔兽世界服务端开服架设服务器搭建教程Centos系统
  17. 登录的时候 实现记住密码
  18. Win11 U盘驱动异常怎么调整为正常?
  19. RAR解压、压缩命令
  20. VproC#混合编程,Basler相机加载显示实时图像

热门文章

  1. (学习java)水果超市管理系统
  2. 【沐风老师】3dMax自动灯光插件AutoLight使用教程
  3. vue + 图片加载 + 默认图片
  4. Ubuntu20.04 设置开机自启
  5. 详解回文质数---洛谷1217---C语言
  6. HRP标记-纯化兔抗鸡IgY功能与参数
  7. 判断整数序列是否是二叉查找树的后序遍历
  8. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树
  9. 人生百味-4:“程序猿”不要做成“驴”
  10. 【九州仙侠传H5魂骨版】linux手工外网端+架设视频教程+开服清档+运营后台+授权GM后台+H5三端