⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pso(c++).txt

📁 粒子群最佳化演算法(pso)
💻 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 + -