• 大小: 214KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: 计算智能  

资源简介

用粒子群优化算法求解函数最大值和最小值问题,稍微更改一下即可求任意函数最值

资源截图

代码片段和文件信息

#include
#include
#include
#include

#define N 100 //迭代次数
#define T 10 //粒子群个数
#define X 4 //纬度
#define W 0.5 //权重
#define C1 2 //
#define C2 2 //
#define E 2.718

//粒子群参数
struct pso{
double v[X]; //速度矢量
double lv[X];
double p[X]; //位置矢量
double lp[X];
double pbest[X]; //粒子最优
double lbest[X];
double value; //适应度
double lvalue;
}num[T];

//全局最优
double gbest[X];
double bbest[X];
//所求函数值
double gvalue;
double bvalue;

//随机函数
double random()
{
return (rand()/32767.0);
}

//初始化
void init()
{
int ij;
for(i=0;i {
for(j=0;j {
num[i].v[j] = (random()*4 - 2);
num[i].lv[j] = (random()*4 - 2);
num[i].p[j] = (random()*8 - 4);
num[i].lp[j] = (random()*8 -4);
}
}
for(i=0;i {
// num[i].value = 0;
for(j=0;j {
//函数表达式
num[i].value =cos(num[i].p[0])+num[i].p[1]*num[i].p[1]+pow(E-num[i].p[2])*num[i].p[3]+sin(num[i].p[0]+num[i].p[1])+1;
//
num[i].lvalue =cos(num[i].lp[0])+num[i].lp[1]*num[i].lp[1]+pow(E-num[i].lp[2])*num[i].lp[3]+sin(num[i].lp[0]+num[i].lp[1])+1;
num[i].pbest[j] = num[i].p[j];
//
num[i].lbest[j] = num[i].lp[j];
}
}
//计算全局最优
for(j=0;j {
gbest[j] = num[0].pbest[j];
//
bbest[j] = num[0].lbest[j];
gvalue  = cos(num[0].p[0])+num[i].p[1]*num[0].p[1]+pow(E-num[0].p[2])*num[i].p[3]+sin(num[0].p[0]+num[0].p[1])+1;
//
bvalue  = cos(num[0].lp[0])+num[i].lp[1]*num[0].lp[1]+pow(E-num[0].lp[2])*num[i].lp[3]+sin(num[0].lp[0]+num[0].lp[1])+1;
}
for(i=0;i {
if(gvalue < num[i].value)
{
gvalue = num[i].value;
for(j=0;j {
gbest[j] = num[i].pbest[j];
}
}
}
//
for(i=0;i {
if(bvalue > num[i].lvalue)
{
bvalue = num[i].lvalue;
for(j=0;j {
bbest[j] = num[i].lbest[j];
}
}
}
}

//更新
void renew()
{
int ij;
for(i=0;i {
for(j=0;j {
num[i].v[j] = W*num[i].v[j] + (C1)*random()*(num[i].pbest[j] - num[i].p[j]) + (C2)*random()*(gbest[j]-num[i].p[j]);
if(num[i].v[j] > 2)
num[i].v[j] = 2;
if(num[i].v[j] < -2)
num[i].v[j] = -2;
num[i].p[j] = num[i].p[j] + num[i].v[j];
if(num[i].p[j]>4)
num[i].p[j] = 4;
if(num[i].p[j]<-4)
num[i].p[j] = -4;
//
num[i].lv[j] = W*num[i].lv[j] + (C1)*random()*(num[i].lbest[j] - num[i].lp[j]) + (C2)*random()*(bbest[j]-num[i].lp[j]);
if(num[i].lv[j] > 2)
num[i].lv[j] = 2;
if(num[i].lv[j] < -2)
num[i].lv[j] = -2;
num[i].lp[j] = num[i].lp[j] + num[i].lv[j];
if(num[i].lp[j]>4)
num[i].lp[j] = 4;
if(num[i].lp[j]<-4)
num[i].lp[j] = -4;
}
}
}

//评价
void assement()
{
int ij;
double ptempgtemp;
for(i=0;i {
ptemp = num[i].value;
num[i].value =cos(num[i].p[0])+num[i].p[1]*num[i].p[1]+pow(E-num[i].p[2])*num[i].p[3]+sin(num[i].p[0]+num[i].p[1])+1;
//num[i].value = (num[i].p[0]*num[i].p[0]+

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     225356  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\Debug\PSO.exe

     文件     257732  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\Debug\PSO.ilk

     文件      14594  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\Debug\PSO.obj

    I.A....    198924  2016-11-09 15:23  粒子群优化算法求函数最大值和最小值\Debug\PSO.pch

     文件     508928  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\Debug\PSO.pdb

     文件      33792  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\Debug\vc60.idb

     文件      53248  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\Debug\vc60.pdb

     文件       4641  2016-11-09 15:09  粒子群优化算法求函数最大值和最小值\PSO.c

     文件       3363  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\PSO.dsp

     文件        514  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\PSO.dsw

     文件      50176  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\PSO.ncb

     文件      48640  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\PSO.opt

     文件        739  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值\PSO.plg

     目录          0  2016-11-09 15:23  粒子群优化算法求函数最大值和最小值\Debug

     目录          0  2016-11-09 18:35  粒子群优化算法求函数最大值和最小值

----------- ---------  ---------- -----  ----

              1400647                    15


评论

共有 条评论