粒子群算法C++版.docx

上传人:b****5 文档编号:3236223 上传时间:2022-11-20 格式:DOCX 页数:11 大小:16.31KB
下载 相关 举报
粒子群算法C++版.docx_第1页
第1页 / 共11页
粒子群算法C++版.docx_第2页
第2页 / 共11页
粒子群算法C++版.docx_第3页
第3页 / 共11页
粒子群算法C++版.docx_第4页
第4页 / 共11页
粒子群算法C++版.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

粒子群算法C++版.docx

《粒子群算法C++版.docx》由会员分享,可在线阅读,更多相关《粒子群算法C++版.docx(11页珍藏版)》请在冰豆网上搜索。

粒子群算法C++版.docx

粒子群算法C++版

//#pragmawarning(disable:

4786)

//#pragmacomment(linker,"/STACK:

16777216")

//HEAD

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

typedeflonglongLL;

constdoubleMAX_VAL=(double)1e18;

constintMAX_GEN=30;///最大迭代次数

constintMAX_SCALE=3000;///最大种群规模

constintMAX_CITY=20+2;///最大城市数

constdoubleW_VAL=0.729;///

structSO{

intx,y;

SO(){}

SO(intx,inty):

x(x),y(y){}

};

structPoint{

doublex,y;

Point(){}

Point(intx,inty):

x(x),y(y){};

voidread()

{

scanf("%lf%lf",&x,&y);

}

};

inlineintrandomI(intx){returnrand()%x;}

inlinedoublerandomD(){return(double)rand()/RAND_MAX;}

inlinedoublegetDist(Pointa,Pointb)

{

returnsqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));

}

structPSO{

doublew;

intscale;

intcityNum;

intnowGen;///当前代数

intmaxGen;///迭代次数

intbestNum;

intbestGen;///最佳出现代数

doubledist[MAX_CITY][MAX_CITY];

intoPop[MAX_SCALE][MAX_CITY];///粒子群

doublefitness[MAX_SCALE];///种群适应度,表示种群中各个个体的适应度

vectorlistV[MAX_SCALE];///每科粒子的初始交换序列

intPd[MAX_SCALE][MAX_CITY];///一颗粒子历代中出现最好的解,

doublevPd[MAX_SCALE];///解的评价值

intPgd[MAX_CITY];///整个粒子群经历过的的最好的解,每个粒子都能记住自己搜索到的最好解

doublevPgd;///最好的解的评价值

PSO(){}

PSO(ints,intc,intmG,doubleww,doubled[MAX_CITY][MAX_CITY])

{

scale=s;

cityNum=c;

maxGen=mG;

w=ww;

for(inti=0;i

for(intj=0;j

dist[i][j]=d[i][j];

}

voidcopyArray(doublea[],doubleb[],intn)

{

for(inti=0;i

}

voidcopyArray(inta[],intb[],intn)

{

for(inti=0;i

}

voidinit()

{

nowGen=0;

for(inti=0;i

{

for(intj=0;j

{

intx=randomI(cityNum);

intr;

for(r=0;r

{

if(x==oPop[i][r])break;

}

if(r==j)

{

oPop[i][j]=x;

//cout<

j++;

}

}

//cout<

}

for(inti=0;i

{

//cout<

"<

intvn=randomI(cityNum)+1;

for(intj=0;j

{

intx=randomI(cityNum);

inty=randomI(cityNum);

while(x==y)y=randomI(cityNum);

SOso(x,y);

listV[i].push_back(so);

//cout<

}

//cout<

}

getFitness();

for(inti=0;i

{

vPd[i]=fitness[i];

copyArray(Pd[i],oPop[i],cityNum);

}

bestNum=0;

vPgd=fitness[0];

bestGen=0;

for(inti=0;ifitness[i])

{

vPgd=fitness[i];

bestNum=i;

}

copyArray(Pgd,oPop[bestNum],cityNum);

}

doublegetVal(intx)

{

doubleret=0;

for(inti=0;i

{

intxx=oPop[x][i%cityNum];

intyy=oPop[x][(i+1)%cityNum];

ret+=dist[xx][yy];

}

returnret;

}

voidgetFitness()

{

for(inti=0;i

fitness[i]=getVal(i);

}

voidUpdateVal()

{

intj=0;

doublevj=fitness[0];

for(inti=0;i

{

if(vPd[i]>fitness[i])

{

vPd[i]=fitness[i];

copyArray(Pd[i],oPop[i],cityNum);///?

?

?

}

if(vj>fitness[i])

{

vj=fitness[i];

j=i;

}

}

if(vj

{

bestGen=nowGen;///

bestNum=j;///

vPgd=vj;

copyArray(Pgd,oPop[j],cityNum);

}

}

voidchangeTo(inta[],vectorv)///

{

intvn=v.size();

for(inti=0;i

{

intx=v[i].x,y=v[i].y;

swap(a[x],a[y]);

}

}

vectorminus(inta[],intb[])///

{

intc[MAX_CITY],d[MAX_CITY];

for(inti=0;i

for(inti=0;i

vectorv;

SOs;

for(inti=0;i

{

if(d[i]!

=a[i])

{

s.x=i,s.y=c[a[i]];

swap(d[s.x],d[s.y]);

v.push_back(s);

}

}

returnv;

}

voidaddTo(vector&v,vectora,intvn)

{

for(inti=0;i

v.push_back(a[i]);

}

///Vii=wVi+ra(Pid-Xid)+rb(Pgd-Xid)

voidevolution()

{

for(intig=0;ig

{

nowGen=ig+1;///nowGen

for(intis=0;is

{

if(is==bestNum)continue;

vectorv;

v.clear();

intlvn=w*listV[is].size();

addTo(v,listV[is],lvn);

vectora=minus(Pd[is],oPop[is]);

intan=randomD()*a.size();

addTo(v,a,an);

vectorb=minus(Pgd,oPop[is]);

intbn=randomD()*b.size();

addTo(v,b,bn);

listV[is]=v;

changeTo(oPop[is],listV[is]);

//cout<

}

getFitness();

UpdateVal();

}

}

voidsolve()

{

init();

evolution();

printf("answer%lf:

\n",vPgd);

printf("solution\n");

for(inti=0;i

{

if(i)printf("");

printf("%d\n",Pgd[i]);

}

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

当前位置:首页 > 小学教育 > 英语

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

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