• 大小: 47KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: 其他
  • 标签: 蛙跳算法  

资源简介

蛙跳算法解决多背包问题,此程序不是我写的,鉴于我当初找这个程序花时间,在这里供大家下载

资源截图

代码片段和文件信息

/*******************************************/
/*---Email:gysyf@163.com----*/
/*---QQ:82108212---*/
#include 
#include 
#include 
#include 



#define OUT_LOOP 1000 /*全局迭代次数*/
#define IN_LOOP 10 /*子群进化次数*/

#define object_NUM 100 /*物体个数*/
#define BAG_NUM 3 /*背包个数*/ 

#define FROG_NUM 100 /*全部青蛙个数(FROG_NUM=GROUP_NUM*COUNT)*/
#define GROUP_NUM 10 /*子群数*/
#define COUNT 10 /*每个子群内青蛙个数*/
#define Dmax 2 /*允许青蛙改变位置的范围[-Dmax,Dmax]*/

#define R1 (rand()%(BAG_NUM+1)-1) /*随机产生{-1012}*/
#define R2 (rand()%100/100.0)  /*随机产生的范围[01]*/

/*青蛙*/
typedef struct{
int a[object_NUM];
double fitness;   
}Frog;

/*适应值最差的青蛙;index为其分组内的下标(在对分组中最差的青蛙进行更新时需要使用)*/
typedef struct {
Frog frog;
int index;
}Worst;

Frog frogs[FROG_NUM];/*全部青蛙*/
Frog groupFrogs[GROUP_NUM][COUNT];/*分组后的青蛙*/
Frog Xb[GROUP_NUM];/*各个子群中个体最好的青蛙*/
Worst Xw[GROUP_NUM];/*各个子群中个体最差的青蛙*/
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};/*物体价值*/

const int Capacity[BAG_NUM]={152712271327};/*背包的限制重量,onst修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的*/



/*是否超出限制重量*/
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;
}
/*求青蛙的适应值*/
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]);
}
}

/*按照适应度降序对全部个体进行排序*/
void sort()
{
    int ij;
Frog temp;/*临时青蛙变量*/
for(i=1;i {
for(j=0;j {
if(frogs[j].fitness     {
temp=frogs[j];
frogs[j]=frogs[j+1];
frogs[j+1]=temp;
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      49058  2018-06-30 10:21  蛙跳算法.docx

     文件       6889  2018-05-10 15:53  sfla.cpp

----------- ---------  ---------- -----  ----

                55947                    2


评论

共有 条评论