粒子群算法代码

上传人:hs****ma 文档编号:486324121 上传时间:2023-01-17 格式:DOCX 页数:9 大小:16.97KB
返回 下载 相关 举报
粒子群算法代码_第1页
第1页 / 共9页
粒子群算法代码_第2页
第2页 / 共9页
粒子群算法代码_第3页
第3页 / 共9页
粒子群算法代码_第4页
第4页 / 共9页
粒子群算法代码_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《粒子群算法代码》由会员分享,可在线阅读,更多相关《粒子群算法代码(9页珍藏版)》请在金锄头文库上搜索。

1、粒子群算法C+代码一、问题重述某一灾区有N名受灾群众,现有一批救灾物资要发放给这些受灾者。物资共有M 种,每种物资的数量有限;各受灾者的灾情不同,对每种物资的急需程度和需求 量不同。(1) 你作为一名物资分配者,请制定分配原则并给出合理的分配方法。(2) 试给出一个符合题意的数值算例。二、模型假设1、对于每一种物资,它的数量一定,且在分配过程中是以份为单位的;2、灾民对获得一急需度可用某区间内的整型值表示;3、灾民对得到一份某一种物资的满意度等价于获得该份该种物资的急需度。4、灾民对某一物资的需求量用一整数来表示;5、对于每种物资的分配是相对独立的,即只要每种物资的分配达到最优,则总 体便最优

2、。三、符号定义论文中使用的符 号对应在程序 中用的符号表示意义NDim待分配人数nijXij第i个灾民实际分得的第j种物资的量mijXupij第i个灾民对j种物资的需求量XijValue第i个灾民对j种物资的急需度fj(nij)GetFitj所有灾民对所获得的第j种物资的满意度函数f(nij)所有灾民对所获得的所有物资的满意度函数NjGdsCnt第j种物资的数量X表示第i个人得到nij份第j种物资的满意度M物资种数TPNum在粒子群算法中粒子的个数Pbestpso算法中,粒子的个体极值Gbestpso算法中,粒子群的全局极值Xijt第i个人分到第t份第j种物资的的满意度#include std

3、afx.h#include #include #include #include using namespace std;int c1=2;/加速因子int c2=2;/加速因子double w=1;/惯性权重double Wmax=1;/最大惯性权重double Wmin=0.6;最小惯性权重int Kmax=110;/迭代次数/物资总数int GdsCnt;/粒子维数int const Dim=10;int const PNum=50;粒子个数int GBIndex=0;/最优粒子索引double a=0.6;适应度调整因子double b=0.5;适应度调整因子int XupDim;粒子

4、位置上界数组int XdownDim=0;/粒子位置下界数组int ValueDim;初始急需度数组int VmaxDim;/最大速度数组class PARTICLE;/申明粒子节点void Check(PARTICLE&, int);约束函数void Input(ifstream&);/输入变量void Initial();/初始化相关变量double GetFit(PARTICLE&);计算适应度void CalculateFit();/计算适应度void BirdsFly();/粒子飞翔void Run(ofstream&,int=2000); /运行函数微粒类class PARTICL

5、Epublic:intXDim;/微粒的坐标数组intXBestDim;/微粒的最好位置数组intVDim;/粒子速度数组double Fit;微粒适合度double FitBest;/微粒最好位置适合度;PARTICLE ParrPNum;/粒子数组intmain()/主函数/关联输入文件infGdsCnt;输入物资总数ofstream outf(out.txt);ifstream inf(data.txt);Input(inf);Initial();Run(outf,100);system(pause);return 0;void Check(PARTICLE& p, int count)

6、/参数:p 粒子对象,count 物资数量 srand(unsigned)time(NULL);int sum=0;for (int i=0;iXupi)p.Xi=Xupi;else if (p.XiVmaxi)p.Vi=Vmaxi;else if (p.Vicount) p.Xrand()%Dim-;sum=0;for (int i=0;iXupi)p.Xi=Xupi;else if (p.XiVmaxi)p.Vi=Vmaxi;else if (p.Vi0)p.Vi=0;sum+=p.Xi;void Input(ifstream& inf) /以 inf 为对象输入数据for (int i=0;iXupi;for (int i=0;iValuei;初始化数据GBIndex=0;srand(unsigned)time(NULL);/初始化随机函数发生器for (int i=0;iDim;i+)Vmaxi = (int)(Xupi-Xdowni)*0.035);for (int i=0;iPNum;i+)for (int j=0;jParrGBIndex.Fit)GBIndex=i;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号