博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单遗传算法
阅读量:5102 次
发布时间:2019-06-13

本文共 2067 字,大约阅读时间需要 6 分钟。

#include
#include
#include
#include
#define M 50 //种群数量#define LEN 20 //编码长度#define xmin -1 //下限#define xmax 2 //上限#define MMAX (int)pow(2,LEN)//编码长度相应的最大二进制数#define PI 3.1415926#define PC 0.8 //交叉概率#define PM 0.005 //变异概率struct Node{ int num,MyBinary[LEN]; //num是相应二进制编码的整数值。MyBinary存放二进制编码 double Myfitness; //Myfitness是适应度 double Myfitsum; //Myfitsum是适应度占整体适应度的百分比,然后从第一个个体往后累加,主要用于选择操作}Nownode[M],Nextnode[M]; //本代群体和下一代群体int nodeindex[M]; //交叉时随机配对,存放配对的群体下标double fx(double x) //被优化函数{ double y; y=x*sin(3*PI*x)+2; //y=6-pow(x+6,2); //y=sin(0.7*x)/x; return y;}int randn(int temp)//产生0~MMAX之间的随机整数{ return (int)(1.0*rand()/RAND_MAX*temp+0.5);}double double2double(struct Node node)//把相应的二进制数转化为相应区间的double数{ return xmin+node.num*(xmax-xmin)/(pow(2,LEN)-1);}int calfitness() //计算适应度{ int i; double temp,minfitness;//minfitness作用是假设出现负的适应度,就做相应的变化 for(i=0;i
Nownode[i].Myfitness) { minfitness=Nownode[i].Myfitness; } } if(minfitness<0)//假设有负的适应度值,就把所以的适应度都加上一个数,使适应度全都为正数 { for(i=0;i
=0;j--) { Nownode[i].MyBinary[j]=temp%2;//给MyBinary赋值 temp=temp/2; } } calfitness();//计算适应度 return 0;}int assignment(struct Node *node1,struct Node *node2)//两个个体之间赋值操作,所以这里必须使用指针,{ int j; for(j=0;j
MyBinary[j]=node2->MyBinary[j]; } node1->num=node2->num; return 0;}int copypopulation()//选择(复制)操作{ int i,num=0; double temp; while(num
=Nownode[i-1].Myfitsum&&temp<=Nownode[i].Myfitsum) { //Nextnode[num++]=Nownode[i]; assignment(&Nextnode[num++],&Nownode[i]);//假设满足条件就赋值给下一代 break; } } } for(i=0;i
MyBinary[j])); } node->num=num; return num;}int crossposition(struct Node *node1,struct Node *node2,int p)//交叉操作,交叉点为p,參数必须是指针{ int j,temp; for(j=LEN-1;j>=LEN-1-p;j--) { temp=node1->MyBinary[j]; node1->MyBinary[j]=node2->MyBinary[j];//交换两个个体的编码 node2->MyBinary[j]=temp; } bin2int(node1);//交叉完毕后更新num值 bin2int(node2); return 1;}int crossover(){ int i,temp; double pc_temp; for(i=0;i

转载于:https://www.cnblogs.com/blfshiye/p/5118258.html

你可能感兴趣的文章
添加field部署
查看>>
CF-补题1
查看>>
SQL SERVER 读取 XML 数据
查看>>
URLClassLoader
查看>>
shell入门之流程控制语句 分类: 学习笔记 li...
查看>>
UML学习-时序图
查看>>
接口测试工具-Jmeter使用笔记(五:正则表达式提取器)
查看>>
Java线程之生命周期
查看>>
WPF与输入法冲突研究之三:韩文输入法在不同平台,WinForm/WPF下的区别
查看>>
js中的数据转换、整数、小数保存、四舍五入
查看>>
安装redis
查看>>
office如何去除多页签
查看>>
Vue.js刷新当前页面
查看>>
php 反射
查看>>
一、 Python概述、变量
查看>>
sklearn中的损失函数
查看>>
PHP字符串相关函数
查看>>
importlib
查看>>
那么问题来了,什么才是正确的?我们就是为问题而生的
查看>>
string StartsWith 方法 Https
查看>>