遗传算法求二元函数极值怎么编码_遗传算法求解二元函数极值源码
网上看到了一个比较不错的讲解遗传算法的帖子,链接如下
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;
}
遗传算法求二元函数极值怎么编码_遗传算法求解二元函数极值源码相关推荐
- 遗传算法求二元函数极值怎么编码_遗传算法求解一元函数二元函数最值
##--------------------------施工中----------------------------## import random import math import numpy ...
- 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)
1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文) 文章目录 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程 ...
- c++ gdb 绑定源码_【Vue原理】VNode 源码版
↑点击上方 "神仙朱" 一起研究Vue源码吧 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版 ...
- JavaScript实现多项式函数在某个点的评估算法(附完整源码)
JavaScript实现多项式函数在某个点的评估算法(附完整源码) classicPolynome.js完整源代码 classicPolynome.js完整源代码 /** @param {number ...
- 天天有毒_鸡汤文案类小程序源码
简介: 天天有毒_鸡汤文案类小程序源码 网盘下载地址: http://kekewl.net/oi8WRaw46rq0 图片:
- c语言比较函数memcmp,c语言函数memcmp()如何比较内存前n个字节实例源码介绍
c语言函数memcmp()如何比较内存前n个字节实例源码介绍.引入头文件:#include 定义memcmp()函数:int memcmp (const void *s1, const void *s ...
- html圣诞树代码_支持手机选择背景音乐圣诞树源码
html圣诞树代码_支持手机选择背景音乐圣诞树源码小子在本地测试了下,圣诞树会根据音乐变化起来,挺好看的手机打开显示黑屏的问题,已经修复适配,上传服务器即可,如果加载慢就把远程js和css本地化或者更 ...
- 遗传算法求二元函数极值怎么编码_使用遗传算法求二元函数的最小值
二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...
- 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 ...
最新文章
- 某leader求助:周六晚上拉下属开会,被下属怀孕的老婆公然大骂,怎么办?网友:活该!...
- 传蔚来计划回国内科创板上市,关闭硅谷办公室
- AE CreateFeatureClass 创建shp. 删除shp. 向shp中添加要素
- 十分钟学会用Go编写Web中间件
- 95-30-050-java.util-LinkedHashMap
- .ne中的控制器循环出来的数据如何显示在视图上_让不懂编程的人爱上iPhone开发系列2 iOS12+Swift4.2版-Checklists-16...
- 文本输入框input将输入转换为统一大小写
- 链式延迟执行DOME
- 《Xcode实战开发》——1.1节下载
- js 能实现监听F5页面刷新子iframe 而父页面不刷新
- 手机登入注册为什么出现这个错误?
- python设计模式-模板方法模式 1
- 编译问题处理:undefined symbol: OPENSSL_init_crypto
- Samba使用大全(绝对经典)
- matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!
- 魔兽世界服务端开服架设服务器搭建教程Centos系统
- 登录的时候 实现记住密码
- Win11 U盘驱动异常怎么调整为正常?
- RAR解压、压缩命令
- VproC#混合编程,Basler相机加载显示实时图像
热门文章
- (学习java)水果超市管理系统
- 【沐风老师】3dMax自动灯光插件AutoLight使用教程
- vue + 图片加载 + 默认图片
- Ubuntu20.04 设置开机自启
- 详解回文质数---洛谷1217---C语言
- HRP标记-纯化兔抗鸡IgY功能与参数
- 判断整数序列是否是二叉查找树的后序遍历
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树
- 人生百味-4:“程序猿”不要做成“驴”
- 【九州仙侠传H5魂骨版】linux手工外网端+架设视频教程+开服清档+运营后台+授权GM后台+H5三端