遗传算法求函数极值.docx
- 文档编号:8430645
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:462.78KB
遗传算法求函数极值.docx
《遗传算法求函数极值.docx》由会员分享,可在线阅读,更多相关《遗传算法求函数极值.docx(17页珍藏版)》请在冰豆网上搜索。
遗传算法求函数极值
智能优化算法第一次作业
--------------遗传算法 洪文杰S151000853
问题:
用遗传算法求解f(x)=xsin(10π*x)+2、0得最大值,x取[-1,2]、
一、分析:
遗传算法基本思路
二、实例简介
1、产生初始种群
s1= 13 (01101)
s2=24(11000)
s3=8 (01000)
s4= 19(10011)
ﻫ2、计算适应度
假定适应度为f(s)=s^2 ,则
f(s1)=f(13)=13^2= 169
f(s2) = f(24) =24^2=576
f(s3)=f(8) =8^2=64
f (s4)= f(19)=19^2=361
3、 选择
染色体得选择概率为:
染色体得累计概率为:
根据上面得式子,可得到:
例如设从区间[0,1]中产生4个随机数:
r1=0、450126, r2=0、110347
r3=0、572496, r4 =0、98503
4、交叉
基本遗传算法(SGA)中交叉算子采用单点交叉算子。
单点交叉运算
5、 变异
6、 至下一代,适应度计算→选择→交叉→变异,直至满足终止条件
三、解决问题
四、实验结果
源代码:
/*问题:
用遗传算法求解f(x)=xsin(10π*x)+2、0得最大值,x取[-1,2]、*/
/*洪文杰2016-3-9、智能优化算法 第一次作业*/
#include
//#includ<stdio、h>
#include
#include<math、h>
#include<time、h>
#include<float、h>
usingnamespacestd;
#define NUMBER50//种群规模
#define GENE_NUMBER 10000//迭代次数
intUnit[NUMBER][30];//初始种群
intUnit_choose[NUMBER][30];//选择、交叉、变异后得种群
intNumber[NUMBER];//被选择得个体编号
float Fitness[NUMBER];//适应度
float select_probability[NUMBER];//选择概率
float accumula_probability[NUMBER];//积累概率
floatf_max=0、0;//最大值
floatf_x=0、0;//最大值对应得自变量
int hwj_coding(int start,int end);//编码
voidhwj_initial_population(intnum);//产生初始种群
void hwj_fitness(intnum);//适应度计算
void hwj_choose();//选择个体
inthwj_binary_search(intl, intr,float temp);//查找选择
//void hwj_N_M(int a[],int b[],int N,int M);//从M个数中选N个不一样得数
voidhwj_cross(int num,float cross);//交叉后得得到种群
voidhwj_aberrance(intnum,float aberrance);//变异后得得到得种群
void hwj_max(intnum);//找到最适应得个体
intmain(){
ﻩintstrat,end;//区间
intNum;//编码大小
float cross=0、8;//交叉概率
floataberrance= 0、04;//变异概率
int key=1;
cout<<"请输入求解区间:
"<<endl;
cin>>strat>>end;
ﻩNum=hwj_coding(strat,end);
ﻩcout<<"Num:
"<<Num< //cout<<"--------------------------1-----------------"<<endl; hwj_initial_population(Num); //cout<<"--------------------------2初始种群-----------------"< /*ﻩfor(inti=0;i ﻩfor(int j=0;j cout< ﻩﻩ} ﻩcout<<endl; ﻩ} */ ﻩwhile(key! =GENE_NUMBER){ hwj_fitness(Num); //ﻩcout<<"--------------------------3适应度-----------------"< //for(inti=0;i //ﻩﻩcout<<Fitness[i]< //} hwj_choose(); //ﻩcout<<"--------------------------4被选择得个体-----------------"<<endl; /*for(inti=0;i ﻩﻩfor(intj=0;j cout<<Unit_choose[i][j]<<''; ﻩ} ﻩcout<<endl; ﻩ} */ ﻩhwj_cross(Num,cross); /*ﻩcout<<"--------------------------5交叉后得种群-----------------"< ﻩfor(inti=0;i ﻩﻩfor(intj=0;j cout<<Unit[i][j]<<' '; } ﻩﻩcout<<endl; } ﻩ*/ ﻩhwj_aberrance(Num,aberrance); /*cout<<"--------------------------6变异后得种群-----------------"<<endl; ﻩfor(inti=0;i for(intj=0;j cout< ﻩ} cout< } ﻩ*/ key++; ﻩhwj_max(Num); ﻩ} ﻩcout<<"最大值就是对应得x值就是: "< cout< cout<<"最大值为: "<<f_max< ﻩreturn0; } inthwj_coding(int start,intend){//种群编码 ﻩfloatprecision; ﻩinttemp=2; intsum; intN=1; ﻩcout<<"请输入精度范围: "<<endl; ﻩcin>>precision; ﻩif(precision==0){ ﻩ cout<<"对不起精度不能为零: "< return0; ﻩ} else{ ﻩﻩsum=(end-start)/precision; cout<<"sum: "< ﻩﻩwhile(temp<sum){ ﻩﻩﻩtemp*=2; N++;ﻩﻩﻩ } ﻩreturn N; ﻩ}ﻩ } void hwj_initial_population(int num){//生成初始种群 ﻩsrand(time(NULL)); for(inti=0;i ﻩfor(intj=0;j<num;j++){ Unit[i][j]=rand()%2; ﻩ} } } voidhwj_fitness(intnum){//计算适应度 float sum; ﻩinttemp; ﻩfor(inti=0;i<NUMBER;i++){ temp=1; ﻩsum=0、0; for(intj=num-1;j>=0;j--){ ﻩsum+=Unit[i][j]*temp; ﻩﻩtemp*=2、0; } ﻩFitness[i]=sum*3/(temp-1、0)-1、0; //cout< //ﻩcout<<"--------------+++++"; Fitness[i]=Fitness[i]*sin(10*3、1415926*Fitness[i])+2、0; //cout<<Fitness[i]< ﻩ} } int hwj_binary_search(intl,intr,float temp){ for(inti=0;i ﻩif(temp<=accumula_probability[i]&&temp>accumula_probability[i-1]){ ﻩﻩreturn i; ﻩﻩ} } ﻩreturn -1; }ﻩ voidhwj_choose(){//选择个体 floatsum=0、0; floattemp; inti; ﻩfor(i=0;i<NUMBER;i++){ sum+=Fitness[i]; } select_probability[0]=Fitness[0]/sum; temp=accumula_probability[0]=select_probability[0]; ﻩfor(i=1;i<NUMBER;i++){ ﻩselect_probability[i]=Fitness[i]/sum; temp+=select_probability[i]; ﻩaccumula_probability[i]=temp; //ﻩﻩcout< ﻩ} for(i=0;i //ﻩsrand(time(NULL)); ﻩﻩtemp=(rand()%1000000)/1000000、0; //ﻩﻩcout< ﻩNumber[i]=hwj_binary_search(0,NUMBER,temp); //ﻩcout<<Number[i]< ﻩfor(int j=0;j ﻩﻩﻩUnit_choose[i][j]=Unit[Number[i]][j]; } } } /*void hwj_N_M(inta[],intb[],intN,intM){//从M个数中选N个不一样得数 inti=1; ﻩsrand(time(NULL)); a[0]=rand()%M; ﻩb[a[0]]=1; while(i! =N){ ﻩa[i]=rand()%M; if(b[a[i]]==0){ i++; ﻩb[a[i]]=1; ﻩcout< }ﻩ ﻩ}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遗传 算法 函数 极值
![提示](https://static.bdocx.com/images/bang_tan.gif)