1、2、速度的限制范围对结果很重要,不能过大亦不能过小,这需要根据实际情况进行确定。3、迭代的代数过多反而会使结果变差。附:主程序/ MainFrm.cpp : implementation of the CMainFrame class/#include stdafx.h粒子群算法.hmath.hMainFrm.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BE
2、GIN_MESSAGE_MAP(CMainFrame, CFrameWnd) /AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(AFX_ID_PREVIEW_CLOSE, Oncalucate) /AFX_MSG_MAPEND_MESSAGE_MAP()static UINT indicators = ID_SEPARATOR, / status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,;/ CMainFrame construction/de
3、structionCMainFrame:CMainFrame() / TODO: add member initialization code here CMainFrame()int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CFrameWnd:OnCreate(lpCreateStruct) = -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBR
4、S_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) | !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) TRACE0(Failed to create toolbarn); / fail to create m_wndStatusBar.Create(this) |m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)Failed to create status barn Delete these three lines if yo
5、u dont want the toolbar to / be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0;BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs) if( !CFrameWnd:PreCreateWindow(cs) ) return FALSE; Modify the Window class or styles here by m
6、odifying / the CREATESTRUCT cs return TRUE;/ CMainFrame diagnosticsvoid CMainFrame:AssertValid() const CFrameWnd:AssertValid();Dump(CDumpContext& dc) constDump(dc);#endif /_DEBUG/ CMainFrame message handlersOncalucate() /粒子群算法主程序入口 FILE *m_fp; /打开和关闭结果文件所用的指针 double Gx,Gy; /最佳位置 double x20,y20; /粒子的
7、位置 (x0,y0表示第一个粒子的位置) double Lx20,Ly20; /当前步的所有粒子发现的最优位置,暨粒子本身的位置(L0为第一个粒子计算得到的函数值,计算出所有的函数值后选出最小的付给G) double Vx20,Vy20; /粒子的速度 int i,t; /循环用变量 i为第i个粒子,t为迭代计算的次数 double r1,r2; /为0,1之间的随机数,计算速度公式涉及的系数 double hanshuzhi; /最小函数值 Gx=Gy=10000000; /给G赋初值,便于以后的比较 /创建结果文件 m_fp=fopen(result.txt,w/ fprintf(m_fp
8、,迭代次数(t) 位置(x) 位置(y) 最优函数值(G) n /产生初始位置和速度更新L和G for (i=0;i=Lxi*Lxi+2*Lxi*Lyi+3*Lyi*Lyi+4*Lyi+5*Lxi+6) /求最小值 Gx=Lxi; Gy=Lyi; /计算以后每一步粒子的速度,t为迭代次数,总共迭代10次for (t=1;t10) Vxi=10; else if(Vxi20) Vyi=10; else if(Vyi Gx=Lxi; Gy=Lyi; hanshuzhi=Gx*Gx+2*Gx*Gy+3*Gy*Gy+4*Gy+5*Gx+6; fprintf(m_fp,t=%lf Gx=%lf Gy=%lf 函数值=%lfn,t,Gx,Gy,hanshuzhi); / t每增加1,打印一次 fclose(m_fp);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1