php遗传算法demo,C++_C++实现简单遗传算法,本文实例讲述了C++实现简单遗 - phpStudy...

C++实现简单遗传算法

本文实例讲述了C++实现简单遗传算法。分享给大家供大家参考。具体实现方法如下:

//遗传算法 GA

#include

#include

#include

using namespace std;

const int L=5; //定义编码的长度

int f(int x) //定义测设函数f(x)

{

int result;

result=x*x*x-60*x*x+900*x+100;

return result;

}

int main(int argc,char *argv[])

{

int a(0),b(32); //定义x的定义域范围

const int pop_size=8; //定义种群大小

// int L; //指定编码的长度

const int NG=20; //指定种群最大的繁殖的代数

int t=0; //当前繁殖的代数

int p[pop_size]; //定义种群

int q[pop_size]; //定义繁殖种群 即种群的下一代

srand(6553); //定义随机数生成的种子

double sum; //适值总和

double avl_sum; //适度平均值

double p_probability[pop_size]; //适值概率

double pp[pop_size];

double pro; //定义随机生成的概率

float pc=0.90; //定义交叉的概率

float pm=0.05; //定义变异的概率

cout<

for(int i=0;i

{

p[i]=rand()%31;

cout<

}

cout<

cout<

void Xover(int &,int &); //声明交叉函数

//当停止准则不满足 即繁殖代数没到最大代数 ,继续繁殖

while(t<=NG)

{

cout<

sum=0.0;

for(int i=0;i

{

q[i]=p[i];

cout<

}

cout<

for(int i=0;i

sum +=f(p[i]);

avl_sum=sum/pop_size;

cout<

cout<

for(int i=0;i

{

p_probability[i]=f(p[i])/sum;

if(i==0)

{

pp[i]=p_probability[i];

cout<

}

else

{

pp[i]=p_probability[i]+pp[i-1];

cout<

}

//cout<

}

//选择双亲

for(int i=0;i

{

pro=rand()%1000/1000.0;

if(pro>=pp[0]&&pro

p[i]=q[0];

else if(pro>=pp[1]&&pro

p[i]=q[1];

else if(pro>=pp[2]&&pro

p[i]=q[2];

else if(pro>=pp[3]&&pro

p[i]=q[3];

else if(pro>=pp[4]&&pro

p[i]=q[4];

else

p[i]=q[5];

}

//杂交算子

int r=0;

int z=0;

for(int j=0;j

{

pro=rand()%1000/1000.0;

if(pro

{

++z;

if(z%2==0)

Xover(p[r],p[j]);

else

r=j;

}

}

//变异算子

for(int i=1;i<=pop_size;i++)

for(int j=0;j

{

pro=rand()%1000/1000.0; //在【0,1】区间产生随机数

if(pro

{

bitsetv(p[i]);

v.flip(j);

p[i]=v.to_ulong();

}

}

t++;

cout<

}

cout<

for(int i(0);i

{

cout<

}

cout<

return 0;

}

//定义杂交操作

void Xover(int &a,int &b)

{

int pos; //随机生成杂交点 即第几个分量进行相互交换

pos=rand()%5+1; //在n个分量中,随机确定第pos个分量

int j,k;

j=pos;

k=pos;

bitsete(a);

bitsetf(b); //前pos个分量进行相互交换

bitsetg;

bitseth;

for(int i=0;i

{

if(e[i]==1)

g.set(i);

}

for(int i=0;i

{

if(f[i]==1)

h.set(i);

}

for(j;j

{

if(f[j]==1)

g.set(j);

}

for(k;k

{

if(e[k]==1)

h.set(k);

}

a=g.to_ulong();

b=h.to_ulong();

}

希望本文所述对大家的C++程序设计有所帮助。相关阅读:

JavaScript 语言基础知识点总结(思维导图)

在Debian上设置USB网络打印机和扫描仪服务器的技巧

php绘制一个矩形的方法

bgiframe插件解决IE6 DIV档不住下拉选择框

win10自带应用闪退怎么办 win10自带应用闪退解决方法

jQuery超酷平面式时钟效果代码分享

Ubuntu上安装MySQL+问题处理+安全优化

Js实现动态添加删除Table行示例

浅析Laravel5中队列的配置及使用

HTML5实现简单图片上传所遇到的问题及解决办法

ABP框架的基础配置及依赖注入讲解

如何用php获取程序执行的时间

WinXp系统无法使用微软雅黑字体? WinXp系统上使用微软雅黑字体的安装方法

javascript与cookie 的问题详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值