📄 pso.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 + -