📄 pso(c++).txt
字号:
#include <fstream.h>
#include <stdlib.h>
#include"randgen.h"
#define Dim 2 // Dimension of problem's search space
#define NumParticle 40 // Number of particles in population
#define max_cycle 100 // Maximum iteration cycle
#define C1 1.5
#define C2 1.5
void main()
{
// Variable Declaration
float xLo[Dim],xHi[Dim]; // Lower bound and upper bound for each dimension
float v[Dim][NumParticle], //current velocity of particle
x[Dim][NumParticle], //current position of particle
individual_optimal_fit[NumParticle], //individual optimal fitness
individual_optimal_x[Dim][NumParticle], // individual optimal position
social_optimal_fit, // social optimal fitness
social_optimal_x[Dim]; // social optimal position
fRan32 rand(123456789); // random number generator
// Initialization
xLo[0]=-5;xHi[0]=5;xLo[1]=-5;xHi[1]=5;
for(int i=0;i<Dim;i++)for(int j=0;j<NumParticle;j++)
{
x[i][j]=individual_optimal_x[i][j]=rand.Next(xLo[i],xHi[i]);
v[i][j]=rand.Next(xLo[i]/20.,xHi[i]/20.);
}
for(int j=0;j<NumParticle;j++)individual_optimal_fit[j]=x[0][j]*x[0][j]+x[1][j]*x[1][j]; social_optimal_fit=individual_optimal_fit[0];
// Optimization
float fitness;
for(int cycle=0;cycle<max_cycle;cycle++)
{
for(int j=0;j<NumParticle;j++)// Evaluate each particle
{
fitness=x[0][j]*x[0][j]+x[1][j]*x[1][j]; // evaluation function
if(fitness>individual_optimal_fit[j])// Replace the individual optimal position
{
individual_optimal_fit[j]=fitness;
individual_optimal_x[0][j]=x[0][j];
individual_optimal_x[1][j]=x[1][j];
}
}
for(int j=0;j<NumParticle;j++)// Replace the social optimal position
{
if(individual_optimal_fit[j]>social_optimal_fit)
{
social_optimal_fit=individual_optimal_fit[j];
social_optimal_x[0]=individual_optimal_x[0][j];
social_optimal_x[1]=individual_optimal_x[1][j];
}
}
for(int i=0;i<Dim;i++)for(int j=0;j<NumParticle;j++)// Modify the velocity and position of particle
{
v[i][j]=v[i][j]+C1*rand.Next(-1.,1.)*(individual_optimal_x[i][j]-x[i][j])
+C2*rand.Next(-1.,1.)*(social_optimal_x[i]-x[i][j]);
x[i][j]=x[i][j]+v[i][j];
if(x[i][j]>xHi[i])x[i][j]=xHi[i];
if(x[i][j]<xLo[i])x[i][j]=xLo[i];
}
}
ofstream out("result.txt");
cout<<social_optimal_x[0]<<"\t"<<social_optimal_x[1]<<"\t"<<social_optimal_fit<<endl;
out<<social_optimal_x[0]<<"\t"<<social_optimal_x[1]<<"\t"<<social_optimal_fit<<endl;
system("PAUSE");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -