资源简介
用粒子群优化算法求解函数最大值和最小值问题,稍微更改一下即可求任意函数最值
代码片段和文件信息
#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
- 上一篇:key.txt
- 下一篇:弱电工程预算参考定额
评论
共有 条评论