資源簡介
使用vc編寫PSO算法,實現(xiàn)粒子的尋優(yōu),其中運用了龍格庫塔進行軌跡優(yōu)化。

代碼片段和文件信息
//?MyPSO.cpp:?implementation?of?the?MyPSO?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“MyPSO.h“
#include?“math.h“
#include?
#include?
//?#include?“PARTICLE.h“
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
void?MyPSO::PSOSimInitial()
{
int?i;
for?(i=0;i<4;i++)
{
RKF[i] = 0;
}
for?(i=0;i<2;i++)
{
RKR[i] = 0;
}
RKF[0]?=?1;
RKF[1]?=?1; //?對象的初始狀態(tài)
m_iType =?1; //?從第一個系統(tǒng)開始切換
m_iStartTime =?0; //?起始時間
m_iEndTime =?2; //?結(jié)束時間
m_iSimSumStep =?4000; //?仿真總步數(shù)
m_dSwitchTime =?0;
J??=?0;
Ju?=?0;
}
double?MyPSO::GetFit(PARTICLE?&p)?//適合度計算方法,必須定義
{
J??=?0;
Ju?=?0;
m_iType?=?1;
RKF[0]?=?1;
RKF[1]?=?1; //?對象的初始狀態(tài)
double?ControlValue; //?控制量
double?MinStepTime; //?最小步長時間
MinStepTime?=?((double)2?/?m_iSimSumStep);
int?phase; //?當粒子維度為43時,一共均分了40段,用來表示當前在哪一段
int?phaseStepNum; //?每一段的步數(shù)
double?slope; //?線性插值的斜率
double?phasetime; //?每一段的時間
int?switchi?=?0;
for?(int?i=0;?i {
if?(i*MinStepTime?>?p.X[PDim-1]?&&?m_iType?!=?2) //?p.X[PDim-1]?表示該粒子的切換時刻當仿真時間大于切換時刻時,進入system2
{
m_iType?=?2;
switchi?=?i;
}
if?(m_iType?==?1) //?當處于system1時,求當前的控制量
{
phasetime?=?p.X[PDim-1]/20; //?每一個時間段的長度
phaseStepNum?=?phasetime/MinStepTime;
phase?=?(int)(i*MinStepTime/phasetime); //?表示當前時刻在哪個段
slope?=?(p.X[phase+1]-p.X[phase])/phaseStepNum;
ControlValue?=?p.X[phase]+slope*(i-phaseStepNum*phase);
}
if?(m_iType?==?2)
{
phasetime?=?(m_iEndTime-p.X[PDim-1])/20; //?每一個時間段的長度
phaseStepNum?=?phasetime/MinStepTime;
phase?=?(int)((i-switchi)*MinStepTime/phasetime); //?表示當前時刻在哪個段
slope?=?(p.X[phase+21+1]-p.X[phase+21])/phaseStepNum;
ControlValue?=?p.X[phase+21]+slope*(i-switchi-phaseStepNum*phase);
}
ControlValue?=?p.X[phase]+slope*(i-phaseStepNum*phase);?//?求得當前的控制量
CalRK4(ControlValue); //?進行龍格庫塔仿真
Ju?+=?ControlValue*ControlValue/m_iSimSumStep; //?控制量平方積分相
}
J?=?(Ju?+?(RKF[0]-10)*(RKF[0]-10)?+?(RKF[1]-6)*(RKF[1]-6))/2;
return?J;
}
void?MyPSO::CalRK4(double?ControlValue)
{
RKR[0]?=?ControlValue;
RBody.Setting(2?DiffBody); //設置RK4類的值
RBody.step(m_iType2.0/4000RKFRKR2); //計算龍格庫塔
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6306??2011-12-21?09:33??PSOproject\Debug\MyPSO.obj
?????文件???????5022??2011-12-21?09:33??PSOproject\Debug\PARTICLE.obj
?????文件??????25866??2011-12-21?09:33??PSOproject\Debug\PSO.obj
?????文件?????254028??2011-12-21?09:33??PSOproject\Debug\PSOproject.exe
?????文件?????289452??2011-12-21?09:33??PSOproject\Debug\PSOproject.ilk
?????文件??????11537??2011-12-21?09:33??PSOproject\Debug\PSOproject.obj
?????文件?????188624??2011-12-21?09:33??PSOproject\Debug\PSOproject.pch
?????文件?????500736??2011-12-21?09:33??PSOproject\Debug\PSOproject.pdb
?????文件???????8270??2011-12-21?09:33??PSOproject\Debug\RK4.obj
?????文件???????4934??2011-12-21?09:33??PSOproject\Debug\StdAfx.obj
?????文件??????66560??2012-05-19?02:20??PSOproject\Debug\vc60.idb
?????文件??????77824??2011-12-21?09:33??PSOproject\Debug\vc60.pdb
?????文件???????2751??2009-03-06?15:40??PSOproject\MyPSO.cpp
?????文件???????3387??2012-03-01?08:32??PSOproject\MyPSO.dsp
?????文件????????516??2012-05-18?00:22??PSOproject\MyPSO.dsw
?????文件???????1307??2012-05-19?02:14??PSOproject\MyPSO.h
?????文件??????33792??2012-05-18?00:23??PSOproject\MyPSO.ncb
?????文件??????53760??2012-05-18?00:23??PSOproject\MyPSO.opt
?????文件????????878??2009-03-05?10:22??PSOproject\PARTICLE.cpp
?????文件????????787??2009-03-05?10:22??PSOproject\PARTICLE.h
?????文件???????5545??2009-06-08?10:40??PSOproject\PSO.cpp
?????文件???????2053??2009-03-05?16:00??PSOproject\PSO.h
?????文件????????942??2009-03-09?09:31??PSOproject\PSOproject.cpp
?????文件???????5274??2012-05-19?02:22??PSOproject\PSOproject.dsp
?????文件????????543??2009-03-05?10:16??PSOproject\PSOproject.dsw
?????文件?????115712??2012-05-19?02:22??PSOproject\PSOproject.ncb
?????文件??????99328??2012-05-19?02:22??PSOproject\PSOproject.opt
?????文件????????254??2012-05-19?02:14??PSOproject\PSOproject.plg
?????文件???????1232??2009-03-05?10:16??PSOproject\ReadMe.txt
?????文件????1132230??2012-05-19?02:24??PSOproject\Result\a.dat
............此處省略11個文件信息
- 上一篇:latex的中文模板
- 下一篇:txt文件的連續(xù)讀寫的labview程序
評論
共有 條評論