资源简介
蛙跳算法解决多背包问题,此程序不是我写的,鉴于我当初找这个程序花时间,在这里供大家下载
代码片段和文件信息
/*******************************************/
/*---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
评论
共有 条评论