遗传算法求函数极值

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能优化算法第一次作业

--------------遗传算法洪文杰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

#include

#include

#include

#include

using namespace std;

#define NUMBER 50//种群规模

#define GENE_NUMBER 10000//迭代次数

int Unit[NUMBER][30];//初始种群

int Unit_choose[NUMBER][30];//选择、交叉、变异后的种群

int Number[NUMBER];//被选择的个体编号

float Fitness[NUMBER];//适应度

float select_probability[NUMBER];//选择概率

float accumula_probability[NUMBER] ;//积累概率

float f_max=0.0;//最大值

float f_x=0.0;//最大值对应的自变量

int hwj_coding(int start,int end);//编码

void hwj_initial_population(int num);//产生初始种群

void hwj_fitness(int num);//适应度计算

void hwj_choose();//选择个体

int hwj_binary_search(int l, int r,float temp);//查找选择

//void hwj_N_M(int a[],int b[],int N, int M);//从M个数中选N个不一样的数void hwj_cross(int num,float cross);//交叉后的得到种群

void hwj_aberrance(int num,float aberrance);//变异后的得到的种群

void hwj_max(int num);//找到最适应的个体

int main(){

int strat,end;//区间

int Num;//编码大小

float cross=0.8;//交叉概率

float aberrance = 0.04;//变异概率

int key=1;

cout<<"请输入求解区间:"<

cin>>strat>>end;

Num=hwj_coding(strat,end);

cout<<"Num:"<

// cout<<"--------------------------1-----------------"<

hwj_initial_population(Num);

// cout<<"--------------------------2初始种群-----------------"<

for(int j=0;j

cout<

}

cout<

}

*/

while(key!=GENE_NUMBER){

hwj_fitness(Num);

// cout<<"--------------------------3适应度-----------------"<

// for(int i=0;i

// cout<

// }

hwj_choose();

// cout<<"--------------------------4被选择的个体-----------------"<

for(int j=0;j

cout<

}

cout<

}

*/

hwj_cross(Num,cross);

/* cout<<"--------------------------5交叉后的种群-----------------"<

for(int i=0;i

for(int j=0;j

cout<

}

cout<

}

*/

hwj_aberrance(Num,aberrance);

相关文档
最新文档