粒子群算法实验报告Word文件下载.docx

上传人:b****5 文档编号:21342911 上传时间:2023-01-29 格式:DOCX 页数:8 大小:16.85KB
下载 相关 举报
粒子群算法实验报告Word文件下载.docx_第1页
第1页 / 共8页
粒子群算法实验报告Word文件下载.docx_第2页
第2页 / 共8页
粒子群算法实验报告Word文件下载.docx_第3页
第3页 / 共8页
粒子群算法实验报告Word文件下载.docx_第4页
第4页 / 共8页
粒子群算法实验报告Word文件下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

粒子群算法实验报告Word文件下载.docx

《粒子群算法实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《粒子群算法实验报告Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。

粒子群算法实验报告Word文件下载.docx

2、速度的限制范围对结果很重要,不能过大亦不能过小,这需要根据实际情况进行确定。

3、迭代的代数过多反而会使结果变差。

附:

主程序

//MainFrm.cpp:

implementationoftheCMainFrameclass

//

#include"

stdafx.h"

粒子群算法.h"

math.h"

MainFrm.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)

ON_WM_CREATE()

ON_COMMAND(AFX_ID_PREVIEW_CLOSE,Oncalucate)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

staticUINTindicators[]=

{

ID_SEPARATOR,//statuslineindicator

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

//CMainFrameconstruction/destruction

CMainFrame:

:

CMainFrame()

//TODO:

addmemberinitializationcodehere

}

~CMainFrame()

intCMainFrame:

OnCreate(LPCREATESTRUCTlpCreateStruct)

if(CFrameWnd:

OnCreate(lpCreateStruct)==-1)

return-1;

if(!

m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP

|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||

!

m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("

Failedtocreatetoolbar\n"

);

//failtocreate

}

m_wndStatusBar.Create(this)||

m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

Failedtocreatestatusbar\n"

Deletethesethreelinesifyoudon'

twantthetoolbarto

//bedockable

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&

m_wndToolBar);

return0;

BOOLCMainFrame:

PreCreateWindow(CREATESTRUCT&

cs)

if(!

CFrameWnd:

PreCreateWindow(cs))

returnFALSE;

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

returnTRUE;

//CMainFramediagnostics

voidCMainFrame:

AssertValid()const

CFrameWnd:

AssertValid();

Dump(CDumpContext&

dc)const

Dump(dc);

#endif//_DEBUG

//CMainFramemessagehandlers

Oncalucate()//粒子群算法主程序入口

FILE*m_fp;

//打开和关闭结果文件所用的指针

doubleGx,Gy;

//最佳位置

doublex[20],y[20];

//粒子的位置(x[0],y[0]表示第一个粒子的位置)

doubleLx[20],Ly[20];

//当前步的所有粒子发现的最优位置,暨粒子本身的位置(L[0]为第一个粒子计算得到的函数值,计算出所有的函数值后选出最小的付给G)

doubleVx[20],Vy[20];

//粒子的速度

inti,t;

//循环用变量i为第i个粒子,t为迭代计算的次数

doubler1,r2;

//为0,1之间的随机数,计算速度公式涉及的系数

doublehanshuzhi;

//最小函数值

Gx=Gy=10000000;

//给G赋初值,便于以后的比较

//创建结果文件

m_fp=fopen("

result.txt"

"

w"

//fprintf(m_fp,"

迭代次数(t)位置(x)位置(y)最优函数值(G)\n"

//产生初始位置和速度更新L和G

for(i=0;

i<

20;

i++)//粒子数为20

doublea1,a2;

//产生0-1均匀分布的随机数

a1=rand()/double(RAND_MAX);

a2=rand()/double(RAND_MAX);

x[i]=a1;

y[i]=a2;

Vx[i]=a1;

Vy[i]=a2;

//设定速度介于(0,1)之间

Lx[i]=x[i];

Ly[i]=y[i];

//求G

i++)

if(Gx*Gx+2*Gx*Gy+3*Gy*Gy+4*Gy+5*Gx+6>

=Lx[i]*Lx[i]+2*Lx[i]*Ly[i]+3*Ly[i]*Ly[i]+4*Ly[i]+5*Lx[i]+6)//求最小值

{

Gx=Lx[i];

Gy=Ly[i];

}

//计算以后每一步粒子的速度,t为迭代次数,总共迭代10次

for(t=1;

t<

=10;

t++)

i++)//分别计算20个粒子的速度及位置

r1=rand()/double(RAND_MAX);

r2=rand()/double(RAND_MAX);

Vx[i]=(0.9+0.05*t)*Vx[i]+2.05*r2*(Gx-x[i]);

//P77这里按照要求ws为0.9,wt为0.5,tmax=10,c1=c2=2.05,简化后的该式

//速度控制

if(Vx[i]>

10)

Vx[i]=10;

}

elseif(Vx[i]<

-1)

Vx[i]=-1;

Vx[i]=Lx[i]+Vx[i];

Vy[i]=(0.9+0.05*t)*Vy[i]+2.05*r2*(Gy-y[i]);

if(Vy[i]>

20)

Vy[i]=10;

elseif(Vy[i]<

-20)

Vy[i]=Ly[i]+Vy[i];

//计算该步的L和G

for(i=0;

Lx[i]=Vx[i];

Ly[i]=Vy[i];

if(Gx*Gx+2*Gx*Gy+3*Gy*Gy+4*Gy+5*Gx+6>

Gx=Lx[i];

Gy=Ly[i];

hanshuzhi=Gx*Gx+2*Gx*Gy+3*Gy*Gy+4*Gy+5*Gx+6;

fprintf(m_fp,"

t=%lfGx=%lfGy=%lf函数值=%lf\n"

t,Gx,Gy,hanshuzhi);

//t每增加1,打印一次

fclose(m_fp);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 艺术创意

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

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