資源簡(jiǎn)介
蛙跳算法解決多背包問題,此程序不是我寫的,鑒于我當(dāng)初找這個(gè)程序花時(shí)間,在這里供大家下載

代碼片段和文件信息
/*******************************************/
/*---Email:gysyf@163.com----*/
/*---QQ:82108212---*/
#include?
#include?
#include?
#include?
#define?OUT_LOOP?1000?/*全局迭代次數(shù)*/
#define?IN_LOOP?10?/*子群進(jìn)化次數(shù)*/
#define?object_NUM?100?/*物體個(gè)數(shù)*/
#define?BAG_NUM?3?/*背包個(gè)數(shù)*/?
#define?FROG_NUM?100?/*全部青蛙個(gè)數(shù)(FROG_NUM=GROUP_NUM*COUNT)*/
#define?GROUP_NUM?10?/*子群數(shù)*/
#define?COUNT?10?/*每個(gè)子群內(nèi)青蛙個(gè)數(shù)*/
#define?Dmax?2?/*允許青蛙改變位置的范圍[-Dmax,Dmax]*/
#define?R1?(rand()%(BAG_NUM+1)-1)?/*隨機(jī)產(chǎn)生{-1012}*/
#define?R2?(rand()%100/100.0)??/*隨機(jī)產(chǎn)生的范圍[01]*/
/*青蛙*/
typedef?struct{
int?a[object_NUM];
double?fitness;???
}Frog;
/*適應(yīng)值最差的青蛙;index為其分組內(nèi)的下標(biāo)(在對(duì)分組中最差的青蛙進(jìn)行更新時(shí)需要使用)*/
typedef?struct?{
Frog?frog;
int?index;
}Worst;
Frog?frogs[FROG_NUM];/*全部青蛙*/
Frog?groupFrogs[GROUP_NUM][COUNT];/*分組后的青蛙*/
Frog?Xb[GROUP_NUM];/*各個(gè)子群中個(gè)體最好的青蛙*/
Worst?Xw[GROUP_NUM];/*各個(gè)子群中個(gè)體最差的青蛙*/
Frog?Xg;/*全局中最好的青蛙*/
int?Weight[object_NUM]={4134697862581619527
9129221184771696735
3227341534762372329
1690884064469070693
29845666314426371829
3339477732124707797
866155553150416677
57534592122613062
1024489529174964868
815318027284871013};?/*物體重量*/
int?Value[object_NUM]={467500724358464145827491942436
604153382716895726538912299894811333664711868644757
8597417783584210694264880572935010154862395484037630843932353882541115658930306
386745728295735122906367675745215072443019133728738390975858894630168591655359
537483413508362021199484734999938788467893483421617514};/*物體價(jià)值*/
const?int?Capacity[BAG_NUM]={152712271327};/*背包的限制重量,onst修飾的數(shù)據(jù)類型是指常類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌?/
/*是否超出限制重量*/
bool?isOverWeight(Frog?frog)
{
int?ij;
int?index;
double?tempWeight[BAG_NUM]={0};
????for(i=0;iject_NUM;i++)
{
if(frog.a[i]!=-1)
{
????????index=frog.a[i];
????????tempWeight[index]+=Weight[i];
}
}
????for(j=0;j {
????if(tempWeight[j]>Capacity[j])
{
???return?true;
}
}
return?false;
}
/*求青蛙的適應(yīng)值*/
double?getFitness(Frog?frog)
{
int?i;
double?tempValue=0;
if(isOverWeight(frog))
{
????return?0;
}
else
{
????for(i=0;iject_NUM;i++)
{
????if(frog.a[i]!=-1)
????{
????????????tempValue+=Value[i];
????}
}
return?tempValue;
}
}
/*初始化青蛙*/
void?init()
{
????int?ij;
srand((int)time(0));
????for(i=0;i {
????for(j=0;jject_NUM;j++)
????{
????frogs[i].a[j]=R1;
????}
????frogs[i].fitness=getFitness(frogs[i]);
}
}
/*按照適應(yīng)度降序?qū)θ總€(gè)體進(jìn)行排序*/
void?sort()
{
????int?ij;
Frog?temp;/*臨時(shí)青蛙變量*/
for(i=1;i {
for(j=0;j {
if(frogs[j].fitness ????{
temp=frogs[j];
frogs[j]=frogs[j+1];
frogs[j+1]=temp;
????}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????49058??2018-06-30?10:21??蛙跳算法.docx
?????文件???????6889??2018-05-10?15:53??sfla.cpp
-----------?---------??----------?-----??----
????????????????55947????????????????????2
評(píng)論
共有 條評(píng)論