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

📄 pso.cpp

📁 基于粒子群优化算法
💻 CPP
字号:
// pso.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include "PSO.h"
#include <iostream.h>
#include <math.h>


//派生自己的PSO类
class MyPSO : public PSO
{
   public:
   MyPSO(int d, int n):PSO(d, n){}; //构造函数,给出微粒维数和微粒个数
   double GetFit(PARTICLE &p) //适合度计算方法,必须定义
   {
     //函数:Schaffer's F6
      double f6;
      f6 = 1+0.001*(p.X[0]*p.X[0]+p.X[1]*p.X[1]);
      f6 *= f6;
      f6 = 0.5-(sin(sqrt(p.X[0]*p.X[0]+p.X[1]*p.X[1]))*sin(sqrt(p.X[0]*p.X[0]+p.X[1]*p.X[1]))-0.5)/f6;
      return f6;
   }
};

//定义通讯函数
bool MyCom(double fit, double *op, double**,int)
{
    static long sn=1;
    cout<<"\r           No.="<<sn++<<"\tFun="<<fit;
    for(int i=0; i<2; i++)
      cout<<"\tX("<<i<<")="<<op[i];
    return true;
}

//申明相关数据
const int PNum = 20; //微粒个数
const int PDim = 2; //微粒维数
double Xup[] = {100, 100}; //自变量上界
double Xdown[] = {-100, -100}; //自变量下界
void print();
//菜单
void menu()
{   
	int n;
	cout<<"                           ";
	cout<<"choice 0: ENTER THE PROCESS.\n";
	cout<<"                         ";
	cout<<"choice 1: EXIT FORM THE PROCESS.\n";
	cout<<"                                 ";
	cout<<"Input n : ";
	cin>>n;
	if(n==1)
	{
		cout<<"                         ";
		cout<<"Yes, you exit!\n";
	}
	else if(n==0)
	{
		 cout<<"                         Run the process !\n";
		 print();
	}
		 else
		 {
             cout<<"Choose again!";
			 cout<<"                                 ";
		     cout<<"Input n : ";
		     cin>>n;
		 }

}
//打印
void print()
{
   int m;
   MyPSO pso(PDim, PNum); //生成微粒群实例
   pso.SetXup(Xup); //设置自变量上界
   pso.SetXdown(Xdown); //设置自变量下界
   pso.SetVmax(0.2); //设置最大速度
   pso.SetCom(MyCom); //设置通讯函数
   //menu();
   cout<<"                          "; 
   cout<<"Please choose the choice:1&&2\n";
   cout<<"                                 ";
   cout<<"Input m : ";
   cin>>m;
   if(m!=1&&m!=2)
   {
	   cout<<"please input the number m again!\n";
	   cout<<"                                 ";
	   cout<<"Input m : ";
	   cin>>m;
   }
   
   switch(m)
	 {
       case 1 : cout<<"               ";
		        cout<<"Run the process of PSO algorithm on the most times.\n";
			    cout<<"               ";
				cout<<"Run Now:\n";
				//运行微粒群
                pso.Run(2000); 
				//输出结果
                cout<<"\n                         ";
				cout<<"The Result is:\t"<<pso.GetBest(Xup)<<"\n"; 
				//menu();
			    //break;
				cout<<"\n";
				cout<<"                    ";
				cout<<"-----------------------------------------\n";
                cout<<"              ";
		        cout<<"Run the process of PSO algorithm on the best goal.\n"; 
		        cout<<"                             ";
		        //运行微粒群
                pso.Run(0.999);
				//输出结果
                cout<<"\n                         ";
				cout<<"The Result is:\t"<<pso.GetBest(Xup)<<"\n";
		        //break;
	   case 2 : cout<<"\n";
		        menu();break;
	 }
}
//主程序
void main()
{ 
	cout<<"Grade: 0401\n";
	cout<<"Author: Zang Huijuan\n";
	cout<<"Date: 2008-05-05";
	cout<<"\n";
	cout<<"\n";

	cout<<"                                  ";
	cout<<"Welcom You!\n";
	cout<<"                      ";
	cout<<"Particle swarm optimization algorithm.\n";
	cout<<"           ---------------------------------------------------------\n";
	cout<<"\n";
	menu();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -