人工鱼群算法C++代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
using namespace std;
#define NETSIZE 100
#define DIM 10
#define POPSIZE 100
#define VISUAL 10
double cp[14][2]={16.47,96.10,16.47,94.44,20.09,92.54,22.39,93.37,25.23,
97.24,22.00,96.05,20.47,97.02,17.20,96.29,16.30,97.38,14.05,98.12,16.53,97.38,21.52,95.59,19.41,97.13,20.09,92.55};
double Path[NETSIZE][NETSIZE];
void InitPath()
{
for(int i=0;i
}
class Artificial_fish
{
public:
Artificial_fish();
//float prey();
void updateneiborflag(Artificial_fish *Pointer);
// float follow();
// float swarm();
void evaluate();
void ShuiJi();
void display();
void display1();
int fish[DIM];
bool neiborflag[POPSIZE];
double fitness;
};
Artificial_fish::Artificial_fish()
{
this->ShuiJi();
for(int flag=0;flag
}
void Artificial_fish::ShuiJi()
{
int i,num;
bool *tag=new bool[DIM];
for(i=0;i
while(--i>=0)
{
do{
num=rand()%DIM;
}while(tag[num]);
fish[i]=num;
tag[num]=true;
}
delete []tag;
}
void Artificial_fish::display()
{
for(int i=0;i
cout<
cout<
}
void Artificial_fish::display1()
{
for(int j=0;j
cout<
cout<
void Artificial_fish::updateneiborflag(Artificial_fish * Pointer)
{
for(int flag=0;flag
for(int n=0;n
int distance=0;
for(int i=0;i
if(this->fish[i]!=(Pointer+n)->fish[i])
distance++;
}
if(distance<=VISUAL&&distance!=0)
{
neiborflag[n]=true;
}
}
}
void Artificial_fish::evaluate()//i条鱼状态变量,edge是边长度矩阵,返回一个回路的真实长度
{
fitness=0;
for(int m=0;m
fitness+=Path[this->fish[0]][this->fish[DIM-1]];
}
void main()
{
srand((unsigned)time(NULL)); //初始化鱼群随机产生的
InitPath();
Artificial_fish a[POPSIZE];
int i;
for(i=0;i
a[i].evaluate();
cout<<"The "<
(a+i)->display();
}
for(i=0;i
(a+i)->updateneiborflag(a);
(a+i)->display1();
}
}