#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
#include "time.h"
#define POPSIZE 100
#define DIMENSION 30
//********************************************88
#define POP_SIZE 40 //粒子规模
#define MAX_GEN 5000 //最大迭代次数
#define DIMEN 30 //维数
#define X_MAX 5.12 //正向最大边界
//***************************************************
int popsize; //粒子群规模
int maxgeneration; //最大迭代次数
int generation; //迭代次数
int dimension; //维数
int a;
int Tu[POPSIZE]; //没有更新最优解的代数
double w;
double c1;
double c2;
double vmax;
double vmin;
double xmax;
double xmin;
double maxf;
double maxf1;
double minf;
double f[POPSIZE];
double f1[POPSIZE];
double x[POPSIZE][DIMENSION];
double v[POPSIZE][DIMENSION];
double pbest[POPSIZE][DIMENSION];
double gbest[DIMENSION];
double BandOne[20][DIMENSION];
double BandOneFitness[20];
int BandOneSize=0;
void generateinitialpopulation();
void generatenextpopulation();
void calculateobjectvalue();
void calculatenewobjectvalue();
void findgbestandmaxf();
void findgworstandminf();
void renewgbestandmaxf();
void rennewgworstandminf();
void input();
void outputreport();
void outputinitialpopulation();
void V_update(int i);
void MinSDFirst(int i);
//初始化粒子群
void generateinitialpopulation()
{
int i,j;
double r1,r2;
for(i=0;i<popsize;i++)
{
for(j=0;j<dimension;j++)
{ r1=(double)rand()/RAND_MAX;
x[i][j]=(xmax-xmin)*r1+xmin;
r2=(double)rand()/RAND_MAX;
v[i][j]=(vmax-vmin)*r2+vmin;
pbest[i][j]=x[i][j];
}
}
}
//计算适值
void calculateobjectvalue()
{ int i,j,k;
double ff=1,f0[200];
for(i=0;i<popsize;i++)
{ f[i]=0;
//ff=1; //F11: Generalized Girewank Function
//f0[i]=0; //F10:Ackley's Function
//f[i]=fabs(x[i][0]); //f4:Schwefel's Problem 2.21
for(j=0;j<dimension;j++) //F5时 dimension-1
{
//f[i]=f[i]+x[i][j]*x[i][j]; //F11: Generalized Girewank Function
//ff=ff*cos(x[i][j]/sqrt(j+1)); //F11: Generalized Girewank Function
//f[i]=f[i]+x[i][j]*x[i][j]; //F10:Ackley's Function
//f0[i]=f0[i]+cos(2*3.14156*x[i][j]); //F10:Ackley's Function
f[i]=f[i]+x[i][j]*x[i][j]-10*cos(2*3.14156*x[i][j])+10;//F9:Generalized Rastrigin
//f[i]=f[i]-x[i][j]*sin(sqrt(fabs(x[i][j]))); //F8:Generalzed Schwefel's problem
//f[i]=f[i]+(j+1)*pow(x[i][j],4); //f7:Quartic Function
//f[i]=f[i]+int(x[i][j]+0.5) * int(x[i][j]+0.5);//f6:Step Function
//f[i]=f[i]+100*(x[i][j+1]-x[i][j]*x[i][j])*(x[i][j+1]-x[i][j]*x[i][j])+(x[i][j]-1)*(x[i][j]-1); //f5:Generalized Rosenbrock
//if(f[i]<fabs(x[i][j])) //f4:Schwefel's Problem 2.21
// f[i]=fabs(x[i][j]); //f4:Schwefel's Problem 2.21
//ff=0; //f3:Schwefel's Problem 1.2
//for(k=0;k<=j;k++) //f3:Schwefel's Problem 1.2
// ff=ff+x[i][k]; //f3:Schwefel's Problem 1.2
//f[i]=f[i]+ff*ff; //f3:Schwefel's Problem 1.2
//ff=ff*fabs(x[i][j]); //f2:Schwefel's Problem 2.22
//f[i]=f[i]+fabs(x[i][j]); //f2:Schwefel's Problem 2.22
//f[i]=f[i]+x[i][j]*x[i][j]; //f1:Sphere Model
}
//f0[i]=exp(f0[i]/30); //F10:Ackley's Function
//f[i]=-20*exp(-0.2*sqrt(f[i]/30))-f0[i]+20+exp(1); //F10:Ackley's Function
//f[i]=f[i]+(double)(1.0*rand()/RAND_MAX); //f7:Quartic Function
//f[i]=f[i]+ff; //f2:Schwefel's Problem 2.22
//f[i]=f[i]/4000-ff+1;//F11: Generalized Girewank Function
}
}
//计算适值
void calculatenewobjectvalue()
{ int i,j,k;
double ff=1,f0[200];
for(i=0;i<popsize;i++)
{ f1[i]=0;
//ff=1; //F11: Generalized Girewank Function
//f0[i]=0; //F10:Ackley's Function
//f1[i]=fabs(x[i][0]); //f4:Schwefel's Problem 2.21
for(j=0;j<dimension;j++) //F5时 dimension-1
{
//f1[i]=f1[i]+x[i][j]*x[i][j]; //F11: Generalized Girewank Function
//ff=ff*cos(x[i][j]/sqrt(j+1)); //F11: Generalized Girewank Function
//f1[i]=f1[i]+x[i][j]*x[i][j]; //F10:Ackley's Function
//f0[i]=f0[i]+cos(2*3.14156*x[i][j]); //F10:Ackley's Function
f1[i]=f1[i]+x[i][j]*x[i][j]-10*cos(2*3.14156*x[i][j])+10;//F9:Generalized Rastrigin
//f1[i]=f1[i]-x[i][j]*sin(sqrt(fabs(x[i][j]))); //F8:Generalzed Schwefel's problem
//f1[i]=f1[i]+(j+1)*pow(x[i][j],4); //f7:Quartic Function
//f1[i]=f1[i]+int(x[i][j]+0.5) * int(x[i][j]+0.5);//f6:Step Function
//f1[i]=f1[i]+100*(x[i][j+1]-x[i][j]*x[i][j])*(x[i][j+1]-x[i][j]*x[i][j])+(x[i][j]-1)*(x[i][j]-1);//f5:Generalized Rosenbrock
//if(f1[i]<fabs(x[i][j])) //f4:Schwefel's Problem 2.21
// f1[i]=fabs(x[i][j]); //f4:Schwefel's Problem 2.21
//ff=0; //f3:Schwefel's Problem 1.2
//for(k=0;k<=j;k++) //f3:Schwefel's Problem 1.2
// ff=ff+x[i][k]; //f3:Schwefel's Problem 1.2
//f1[i]=f1[i]+ff*ff; //f3:Schwefel's Problem 1.2
//ff=ff*fabs(x[i][j]); //f2:Schwefel's Problem 2.22
//f1[i]=f1[i]+fabs(x[i][j]); //f2:Schwefel's Problem 2.22
//f1[i]=f1[i]+x[i][j]*x[i][j]; //f1:Sphere Model
}
//f0[i]=exp(f0[i]/30); //F10:Ackley's Function
//f1[i]=-20*exp(-0.2*sqrt(f1[i]/30))-f0[i]+20+exp(1); //F10:Ackley's Function
//f1[i]=f1[i]+(double)(1.0*rand()/RAND_MAX); //f7:Quartic Function
//f1[i]=f1[i]+ff; //f2:Schwefel's Problem 2.22
//f1[i]=f1[i]/4000-ff+1;//F11: Generalized Girewank Function
}
}
//找出适值最大的解
void findgbestandmaxf()
{
int i,j;
for(j=0;j<dimension;j++)
gbest[j]=x[0][j];
calculateobjectvalue();
maxf=f[0];
for(i=0;i<popsize;i++)
{ if(maxf>f[i])
{ maxf=f[i];
for(j=0;j<dimension;j++)
gbest[j]=x[i][j];
}
}
}
//更新适值最大的解
void renewgbestandmaxf()
{
int i,j,maxn;
double temp;
for(i=0;i<popsize;i++)
{
if(f1[i]<f[i])
{
f[i]=f1[i];
Tu[i]=0;
for(j=0;j<dimension;j++)
pbest[i][j]=x[i][j];
}
else
Tu[i]++;
}
maxf1=f1[0];
maxn=0;
for(i=0;i<popsize;i++)
{
if(maxf1>f1[i])
{
maxf1=f1[i]; //记下本代找到的最优解值
maxn=i; //记下对应的粒子下标
}
}
//**********************[榜样策略]***************************************************************
//temp=0;
//for(j=0;j<dimension;j++)
// temp+=fabs(x[maxn][j]-gbest[j]);
//for(i=0;i<BandOneSize;i++)
// for(j=0;j<dimension;j++)
// temp+=fabs(x[maxn][j]-BandOne[i][j]);
//temp=temp/dimension;
if(BandOneSize<popsize*0.1) //如果BandOne集合没有满,则增加一个BandOne成员
{
BandOneFitness[BandOneSize]=maxf1;
for(j=0;j<dimension;j++)
BandOne[BandOneSize][j]=x[maxn][j];
BandOneSize++;
}
else //如果BandOne集合满了,则替换一个资历最老且比当前最优差的成员
{
for(i=0;i<BandOneSize;i++)
if(BandOneFitness[i]>maxf1)
{
for(j=0;j<dimension;j++)
没有合适的资源?快使用搜索试试~ 我知道了~
基于案例学习的粒子群算法 Matlab实现
共13个文件
pdb:2个
plg:1个
exe:1个
需积分: 5 0 下载量 101 浏览量
2023-09-15
21:51:53
上传
评论
收藏 294KB ZIP 举报
温馨提示
基于案例学习的粒子群算法 Matlab实现
资源推荐
资源详情
资源评论
收起资源包目录
Example-based learning particle swarm optimization.zip (13个子文件)
MPSO.plg 675B
MPSO.cpp 12KB
MPSO.opt 48KB
MPSO.dsw 533B
MPSO.dsp 3KB
Debug
MPSO.exe 200KB
MPSO.pdb 481KB
vc60.pdb 60KB
MPSO.pch 290KB
MPSO.ilk 221KB
vc60.idb 49KB
MPSO.obj 19KB
MPSO.ncb 49KB
共 13 条
- 1
资源评论
背包客研究
- 粉丝: 675
- 资源: 111
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功