s q r t 函 数 实 现 算 法

更新时间:2023-06-23 07:22:38 阅读: 评论:0

多目标优化的遗传算法及其改进(浮点数编码),对多个函数进行测试
prada是什么意思为了解决算法陷入局部最优的现象,本文主要采用以下改进算法:把每一代种群中最优的一定数量的个体,无条件的遗传到下一代中,所以种群的最优适应度一定会随着遗传代数的增加不断升高或者不变(达到最大值时不再变化),通过这种方法可以大大减小遗传算法陷入局部最优的概率。
本文在上一篇的基础上,把单目标优化,扩展到了多目标优化,C语言代码如下:
#includestdio.h
董事长英文翻译
#includestdlib.h
#includemath.h
#includetime.h
#define M 100 --种群数量
#define N 2 --变量个数
#define PI 3.1415926
electronic>阻挠的意思
#define PC 0.8 --交叉概率
#define PM 0.4 --变异概率
#define PA 0.01 --交叉因子
#define COPYNUM 4
struct Node
double Pmember[N];
double Myfitness; --Myfitness是适应度
double Myfitsum; --Myfitsum是适应度占总体适应度的百分比,然后从第一个个体往后累加,主要用于选择操作
traffic lights什么意思}Nownode[M],Nextnode[M],TempNode[COPYNUM]; --本代群体和下一代群体,TempNode存放每一代最优的COPYNUM个个体
int nodeindex[M]; --交叉时随机配对,存放配对的群体下标
double XMIN[N]={-10,-10};--每一个参数的最小值
double XMAX[N]={10,10};--每一个参数的最大值
double fx(double *x);
int sortnode();
int copym(int n);
int copyn(int n);
int calfitsum();
int calfitness();
double randn(int index);
int initpopulation();
int assignment(struct Node *node1,struct Node *node2);
家庭教育故事
int copypopulation();
int isrepeat(int temp,int n);
int crossover();
int mutation();
int findmaxfit();
int diplaynode();
double fx(double *x) --根据x计算fx
double y;
int i=0,px[N]={0};
y=0.5-(pow(sin(sqrt(pow(x[0],2)+pow(x[1],2))),2)-0.5)-pow ((1+0.001*(pow(x[0],2)+pow(x[1],2))),2);--schaffer函数,通过测试--y=3+pow(x[0],2)-cos(18*x[0])+pow(x[1],2)-cos(18*x[1]);--通过测试
--y=4*pow(x[0],2)-2.1*pow(x[0],4)+pow(x[0],6)-3+x[0]*x[1] -4*pow(x[1],2)+pow(x[1],4)+5;--通过测试
--y=pow(x[1]-5.1*pow(x[0],2)-(4*PI*PI)+5*x[0]-PI-6,2)+10* (1-1-(8*PI))*cos(x[0])+10;--通过测试
--y=x[0]*exp(-pow(x[0],2)-pow(x[1],2))+1;--通过测试
--y=sin(sqrt(pow(x[0],2)+pow(x[1],2)))-sqrt(pow(x[0],2)+p ow(x[1],2))+1;--通过测试
--y=1.0-4000*(pow(x[0],2)+pow(x[1],2))-cos(x[0])*cos(x[1] -sqrt(2.0))+1;--Griewank函数通过测试
--y=pow(x[0],2)-10*cos(2*PI*x[0])+10+pow(x[1],2)-10*cos(2 *PI*x[1])+10;--Rastrigin函数通过测试
-*for(i=0;iN;i++)
if(x[i]=0)keypress
px[i]=1;
hm中文名px[i]=0;
y=px[1]*(1+px[0])+fabs(x[0]+50*px[1]*(1-2*px[0]))+fabs(x[ 1]+50*(1-2*px[1]));*---Tripod函数通过测试
--y=20+exp(1)-20*exp(-0.2*sqrt((0.5)*(pow(x[0],2)+pow(x[1 ],2))))-exp(0.5*(cos(2*PI*x[0])+cos(2*PI*x[1])));--Ackley函数通过测试
--y=100*pow((pow(x[0],2)-x[1]),2)+pow((1-x[0]),2)+1;--Ros enbrock函数范围缩小时可找到,或者把y=1-y改成y=exp(1-y)扩大个体适应度之间的差别
--y=pow(x[0],2)+pow(x[1],2)+1;--NDparabola函数通过测试
return y;
int sortnode()
int i,j;
struct Node temp;
for(i=0;iM;i++)
for(j=i;jM;j++)
英国留学中介if(Nownode[i].MyfitnessNownode[j].Myfitness)
assignment(temp,Nownode[i]);
assignment(Nownode[i],Nownode[j]);
assignment(Nownode[j],temp);
calfitsum();
return 0;
int copyn(int n)
sortnode();
for(i=0;in;i++)
assignment(Nownode[M-1-i],TempNode[i]);
calfitsum();
return 0;
int copym(int n)
sortnode();
for(i=0;in;i++)
assignment(TempNode[i],Nownode[i]);
return 0;
int calfitsum()
Nownode[0].Myfitsum=Nownode[0].Myfitness;
for(i=1;iM;i++)
Nownode[i].Myfitsum=Nownode[i].Myfitness+Nownode[i-1].Myf itsum;--每一个Myfitsum都是自己的适应度加上前一个的Myfitsum for(i=0;iM;i++)
Nownode[i].Myfitsum=Nownode[i].Myfitsum-Nownode[M-1].Myfi tsum;--每一个Myfitsum除以所有适应度之和,使Myfitsum为0~1之间return 0;
int calfitness() --计算适应度值
double minfitness,maxfitness,avefitness=0;
acep
double temp;
minfitness=Nownode[0].Myfitness=fx(Nownode[0].Pmember);
maxfitness=minfitness;
avefitness=maxfitness;
for(i=1;iM;i++)
Nownode[i].Myfitness=fx(Nownode[i].Pmember);
avefitness+=Nownode[i].Myfitness;
if(minfitnessNownode[i].Myfitness)
minfitness=Nownode[i].Myfitness;
if(maxfitnessNownode[i].Myfitness)
maxfitness=Nownode[i].Myfitness;
if(minfitness0)--如果有负的适应度值,就把所以的适应度都加上一个数,使适应度全都为正数
temp=minfitness;
Nownode[0].Myfitness+=-temp;
avefitness=Nownode[0].Myfitness;
maxfitness=Nownode[0].Myfitness;
minfitness=Nownode[0].Myfitness;
for(i=1;iM;i++)
Nownode[i].Myfitness+=-temp;
avefitness+=Nownode[i].Myfitness;

本文发布于:2023-06-23 07:22:38,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/154595.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:适应度   函数   陷入   局部   遗传算法   目标   优化
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图