• 大小: 14KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: PSO  LS-SVM  代码  

资源简介

PSO-LS-SVM代码

资源截图

代码片段和文件信息

//LS-SVM
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

//double sigma = 0.28; //核参数 fatboy数据100-50
//double sigma = 0.49; //核参数 housing
//double sigma = 0.50; //dianjia核参数
//double gamma = 100; //惩罚因子

//double sigma = 5.6; //风速数据参数
//double gamma = 900; 

int scal_flag=0; //归一化参数

int dim_flag = 8; //输入数据的维数
int dim = 8; //多维数据:数据维数
int MD = 20; //一维数据:嵌入维数MD

double beta; //b
vector alpha; //alpha

vector > train_x; //训练数据
vector train_y;
vector > test_x; //测试数据
vector test_y;

vector pred; //预测数据
vector pred_best; //最优预测数据

void Read_Data(); //读取数据
void Writ_Data();
void Scale(); //数据归一化当scal_flag=0,归一化到[01];=1 归一化到[-11]

double RBF(vector xi vector xj double sigma); //RBF函数
void Kmatrix(vector > &KerlMatrix double sigma double gamma); //构造核矩阵
void Gauss(vector > KerlMatrix); //高斯消元法
void Predict(double sigma); //预测函数
void Result_out(); //输出结果

//PSO参数设定
const int Pnum = 10;            //粒子数目
const int Dnum = 50; //迭代总次数1000

const double SigLow  = 0.1;            //sigma搜索域范围
const double SigHigh = 10;
const double SigVmin = -10; //sigma的速度范围
const double SigVmax = 10;

const double GamLow = 1;         //gamma搜索域范围
const double GamHigh = 100;
const double GamVmin = -100; //gamma的速度范围
const double GamVmax = 100;

const double c1 = 2;               //学习因子
const double c2 = 2;
const double Wmin=0.4; //最小权值
const double Wmax=0.9; //最大权值
double w = 0.9; //初始权值
int wn = 1;

//PSO
double sigma[Pnum];   //粒子集合
double gamma[Pnum];
double sigma_loc_best[Pnum]; //局部最优
double gamma_loc_best[Pnum];
double sigma_glo_best; //全局最优
double gamma_glo_best;
double sigma_v[Pnum]; //更新速度
double gamma_v[Pnum];
double fit[Pnum]; //粒子当前的适应度
double loc_fit[Pnum]; //局部最优值
double gfit; //全局最优适应值

//PSO优化相关函数
void Initial(); //初始化
double FitNess(double gamma double sigma); //计算适应度
void renew_par(); //更新粒子信息
void renew_w(); //更新权重

void WCJS();

int main()
{
clock_t begin = clock();

Read_Data();
Writ_Data();
Scale();

cout< cout<<“......训练样本数目 = “< cout<<“......测试样本数目 = “<
cout<<“............开始训练............“<
srand((unsigned)time(NULL));

Initial();

int num=0;
while(num {
//if(num%10 == 0)

cout<<“num = “< cout<<“sigma_glo_best = “< cout<<“gamma_glo_best = “<
renew_par();
renew_w();
num++;
}

Result_out();

clock_t end = clock();
cout<<“程序运行时间: “<<(end-begin)/CLOCKS_PER_SEC<<“秒“<
return 0;
}

void Read_Data()
{
d

评论

共有 条评论