ImageVerifierCode 换一换
格式:DOCX , 页数:116 ,大小:45.85KB ,
资源ID:5501547      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5501547.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PSO源程序.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PSO源程序.docx

1、PSO源程序/PSO头文件PSO.cpp如下:/Header _PSO_H/n/PlatfoPurpose Provide a class for particle swarm optimizatiorm Visual C+ 7.0/群微粒算法:本算法用群微粒算法求目标函数的最大值/本算法使用步骤/ (1)派生自己的群微粒类,类中必须定义double GetFit(PARTICLE&)方法,用来计算每个微粒的适合度/ (2)生成派生类实例,并在构造函数中指明微粒坐标维数和群体个数/ (2)设置微粒坐标上界数组和下界数组,并用SetXup与SetXdown设置微粒坐标上下界/ (3)用SetVm

2、ax方法设置微粒最大速度/ (4)设置可选参数:C1,C2,W和通讯函数/ (5)采用Run方法进行优化运算,优化后用GetBest方法获得最优个体适合度和坐标#ifndef _PSO_H#define _PSO_H/微粒类class PARTICLEpublic: double *X; /微粒的坐标数组 double *V; /微粒的速度数组 double *XBest; /微粒的最好位置数组 int Dim; /微粒的维数 double Fit; /微粒适合度 double FitBest; /微粒最好位置适合度 /构造函数 PARTICLE(); /空构造函数 PARTICLE(int

3、n); /维数为参数的构造函数 /析构函数 PARTICLE(); void SetDim(int d); /设置微粒的维数;/定义群粒子类class PSOprotected: PARTICLE *Particle; /微粒群数组 int PNum; /微粒个数 int GBestIndex; /最好微粒索引 double W; /惯性权重 double C1; /加速度系数1 double C2; /加速度系数2 double *Xup; /微粒坐标上界数组 double *Xdown; /微粒坐标下界数组 double *Vmax; /微粒最大速度数组 void Initialize()

4、; /初始化群体 void CalFit(); /计算全体适合度 virtual void ParticleFly(); /微粒飞翔,产生新一代微粒 /通讯函数,返回值为false时,系统停止优化 bool (*Com)(double, /最优微粒适合度 double*, /最优微粒坐标数组 double*, /所有微粒坐标指针数组 int); /当前最优微粒索引public: /构造函数 PSO(); /空构造函数 PSO(int dim, /微粒维数 int num); /微粒个数 /析构函数 PSO(); void SetXup(double*); /设置微粒坐标上界 void SetX

5、down(double*); /设置微粒坐标下界 void SetVmax(double*); /设置微粒最大速度,以数组为参数 void SetVmax(double); /设置微粒最大速度,以上下界百分比为参数 void SetW(double w)W=w; /设置权重 void SetC1(double c)C1=c;/设置C1 void SetC2(double c)C2=c;/设置C2 void SetCom(void *p)Com=(bool(*)(double,double*,double*,int)p;/设置通讯函数 /计算特定微粒坐标所对应适合度,必须由派生的实际PSO类定义

6、,以便计算适合度 virtual double GetFit(PARTICLE&)=0; /运行类进行优化 PARTICLE& Run(int max); /按最多次数限制运行PSO PARTICLE& Run(double fit); /按最佳适合度目标运行PSO double GetBest(double*); /获得最优微粒适合度和坐标;#endif/PSO源文件PSO.CPP如下:/Header _PSO_H/Purpose Provide a class for particle swarm optimization/Platform Visual C+ 7.0/Date 2002.

7、4.29/Author Liu Kang/群微粒算法:本算法涌群微粒算法求目标函数的最大值/本算法使用步骤/ (1)派生自己的群微粒类,类中必须定义double GetFit(PARTICLE&)方法,用来计算每个微粒的适合度/ (2)生成派生类实例,并在构造函数中指明微粒坐标维数和群体个数/ (2)设置微粒坐标上界数组和下界数组,并用SetXup与SetXdown设置微粒坐标上下界/ (3)用SetVmax方法设置微粒最大速度/ (4)设置可选参数:C1,C2,W和通讯函数/ (5)采用Run方法进行优化运算,优化后用GetBest方法获得最优个体适合度和坐标#include #includ

8、e #include /#include PSO.H/微粒构造函数PARTICLE:PARTICLE() /空构造函数 X = 0; V = 0; XBest = 0; Dim = 0;PARTICLE:PARTICLE(int n) /维数为参数的构造函数 Dim = n; X = new doubleDim; V = new doubleDim; XBest = new doubleDim;/微粒析构函数PARTICLE:PARTICLE() if(Dim) delete X; delete V; delete XBest; /设置微粒的维数void PARTICLE:SetDim(int

9、 d) if(X) delete X; if(V) delete V; if(XBest) delete XBest; Dim = d; X = new doubleDim; V = new doubleDim; XBest = new doubleDim;/PSO构造函数PSO:PSO() Particle = 0; PNum = 0; GBestIndex = 0; Xup = 0; Xdown = 0; W = 1; C1 = 2; C2 = 2; Com = 0;PSO:PSO(int dim, int num) Particle = new PARTICLEnum; for(int

10、i=0; inum; i+) Particlei.SetDim(dim); PNum = num; GBestIndex = 0; Xup = new doubledim; Xdown = new doubledim; Vmax = new doubledim; W = 1; C1 = 2; C2 = 2; Com = 0;/析构函数PSO:PSO() if(Particle) delete Particle; if(Xup) delete Xup; if(Xdown) delete Xdown; if(Vmax) delete Vmax;/设置坐标上界void PSO:SetXup(doub

11、le *up) if(!Particle) return; for(int i=0; iParticle0.Dim; i+) Xupi = upi;/设置坐标下界void PSO:SetXdown(double *d) if(!Particle) return; for(int i=0; iParticle0.Dim;i+) Xdowni = di;/设置最大速度void PSO:SetVmax(double *max) if(!Particle) return; for(int i=0; iParticle0.Dim;i+) Vmaxi = maxi;void PSO:SetVmax(dou

12、ble p) if(!Particle) return; for(int i=0; iParticle0.Dim; i+) Vmaxi = (Xupi-Xdowni)*p;/初始化群体void PSO:Initialize() if(!Particle) return; static int kk=(unsigned)time(NULL); srand(unsigned)time(NULL)+kk+); GBestIndex = 0; for(int i=0; iPNum; i+)/初始化所有的粒子个体 for(int j=0; jParticleGBestIndex.Fit) GBestIn

13、dex = i;/如果这个鸟的适合度大于群体的最大适合度的话,记录下来查找群体最优微粒 /计算群体各个微粒适合度void PSO:CalFit() if(!Particle) return; for(int i=0; iPNum; i+) Particlei.Fit = GetFit(Particlei);/微粒飞翔,产生新一代微粒void PSO:ParticleFly() static double FitBak100;/用来存放备份的合适度值 if(!Particle) return; static int tt=(unsigned)time(NULL);/wo:以时间为产生随机数的种子

14、 srand(unsigned)time(NULL)*tt+);/wo:srand()的作用是为rand()设置种子,两者配合使用的 /整个群体飞向新的位置 for(int i=0; iPNum; i+) for(int j=0; jParticlei.Dim; j+) Particlei.Vj = W*Particlei.Vj+/ (FitBaki-Particlei.Fit)+/修改速度 rand()/(double)RAND_MAX*C1*(Particlei.XBestj-Particlei.Xj)+ /wo:此处的产生的两个rand()是一样的,有待改进? /wo:RAND_MAX为

15、最大随机数 rand()/(double)RAND_MAX*C2*(ParticleGBestIndex.XBestj-Particlei.Xj); for(j=0; jVmaxj) Particlei.Vj = Vmaxj; if(Particlei.Vj-Vmaxj) Particlei.Vj = -Vmaxj; for(j=0; jXupj) Particlei.Xj=Xupj;/保护 if(Particlei.XjXdownj) Particlei.Xj=Xdownj; /计算各微粒适合度 CalFit(); for(i=0; iPNum; i+) FitBaki = Particle

16、i.Fit; /设置新的个体最好位置 for(i=0; i=Particlei.FitBest) Particlei.FitBest = Particlei.Fit; for(int j=0; jParticlei.Dim; j+) Particlei.XBestj = Particlei.Xj; /设置群体中新的最优个体 GBestIndex = 0; for(i=0; i=ParticleGBestIndex.FitBest & i!=GBestIndex) GBestIndex = i;/运行群粒算法PARTICLE& PSO:Run(int n) Initialize(); doubl

17、e *opt_p = new doubleParticle0.Dim; /通讯用数组,最优点坐标 double *opt_a = new double*PNum; /通讯用数组,所有点坐标 for(int i=0; in; i+) ParticleFly(); if(Com) /通讯函数存在,完成通讯 for(int k=0; kParticle0.Dim; k+) opt_pk=ParticleGBestIndex.XBestk;/拷贝最优点坐标 for(k=0; kPNum; k+) opt_ak = Particlek.X; /指向所有点坐标 if(!Com(ParticleGBestI

18、ndex.FitBest,opt_p,opt_a,GBestIndex) break; delete opt_p; delete opt_a; return ParticleGBestIndex;PARTICLE& PSO:Run(double fit) double *opt_p = new doubleParticle0.Dim; /通讯用数组,最优点坐标 double *opt_a = new double*PNum; /通讯用数组,所有点坐标 Initialize(); do ParticleFly(); if(Com) /通讯函数存在,完成通讯 for(int k=0; kParti

19、cle0.Dim; k+) opt_pk=ParticleGBestIndex.XBestk;/拷贝最优点坐标 for(k=0; kPNum; k+) opt_ak = Particlek.X; /指向所有点坐标 if(!Com(ParticleGBestIndex.FitBest,opt_p,opt_a,GBestIndex) break; while(ParticleGBestIndex.FitBestfit); delete opt_p; delete opt_a; return ParticleGBestIndex;/返回最佳个体double PSO:GetBest(double *r

20、) for(int i=0; i 1000#pragma once#endif / _MSC_VER 1000#define WIN32_LEAN_AND_MEAN / Exclude rarely-used stuff from Windows headers#include / TODO: reference additional headers your program requires here/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before

21、the previous line.#endif / !defined(AFX_STDAFX_H_CA78CC4A_4FB0_49B9_B823_A4DBAEFB44D2_INCLUDED_)*#ifndef _LIBSVM_H#define _LIBSVM_H#ifdef _cplusplusextern C #endifstruct svm_node int index; double value;struct svm_problem int l; double *y; struct svm_node *x;enum C_SVC, NU_SVC, ONE_CLASS, EPSILON_SV

22、R, NU_SVR ; /* svm_type */enum LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED, MIX,COMBINATION ; /* kernel_type */struct svm_parameter int svm_type; int kernel_type; int degree; /* for poly */ double gamma; /* for poly/rbf/sigmoid */ double coef0; /* for poly/sigmoid */ double t; /*for mix/combination*/ /*

23、 these are for training only */ double cache_size; /* in MB */ double eps; /* stopping criteria */ double C; /* for C_SVC, EPSILON_SVR and NU_SVR */ int nr_weight; /* for C_SVC */ int *weight_label; /* for C_SVC */ double* weight; /* for C_SVC */ double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */ do

24、uble p; /* for EPSILON_SVR */ int shrinking; /* use the shrinking heuristics */ int probability; /* do probability estimates */;struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target);int svm_save_model(const char *model_file_name, const struct svm_model *model);struct svm_model *svm_load_model(const char *model_file_name);int svm_get_svm_type(const struct svm_model *model);int svm_get_nr_class(co

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1