关于网友提出的“ 求大神赐教!为什么运行后不出结果?”问题疑问,本网通过在网上对“ 求大神赐教!为什么运行后不出结果?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 求大神赐教!为什么运行后不出结果?
描述: #include
#include
#include
#include
#include"iostream.h"
#define CLOCKS_PER_SEC ((clock_t)1000)
#define P_num 80 //粒子数目
#define dim 8 //粒子维数
#define low 1 //搜索域范围
#define high 8
#define iter_num 200
#define V_max 2 //速度范围
#define c1 2
#define c2 2
#define w 0.5
#define alp 1
int Deb=0;
int Fin=8192;
int iter;
int available;
int particle[P_num][dim]; //个体集合
int particle_loc_best[P_num][dim]; //每个个体局部最优向量
double particle_loc_fit[P_num]; //个体的局部最优适应度,有局部最优向量计算而来
int particle_glo_best[dim]; //全局最优向量
double gfit; //全局最优适应度,有全局最优向量计算而来
int particle_v[P_num][dim]; //记录每个个体的当前代速度向量
double particle_fit[P_num];
double particle_value[P_num];
void GenerateInitial(void);
void CalculateFitnessValue(void);
void OutputTextReport(void);
void FindPbestAndGbest(void);
void renew_particle();
void renew_var();
void main()
{
clock_t start, end;
start = clock();
available=rand()%2;
if(available==1)
{
iter=0;
GenerateInitial();
CalculateFitnessValue();
FindPbestAndGbest();
cout<<"gfit="<<>
while(iter<>
{
iter++;
renew_var();
renew_particle();
CalculateFitnessValue();
FindPbestAndGbest();
OutputTextReport();
cout<<"gfit="<<>
}
}
end = clock();
cout<<"Run time: "<<(double)(end - start) / CLOCKS_PER_SEC<<"S"<<>
}
void GenerateInitial(void)
{
int i,j,k,x,sum;
for(i=0;i<>
{
for(j=0;j<>
{
x=rand()%8+1;
particle[i][j]=x;
for(k=0;k<>
{
if(particle[i][k]==particle[i][j])
{
j--;
break;
}
}
}
sum=particle[i][0]*pow(2.0,3)+particle[i][1]*pow(2.0,2)+particle[i][2]*2+particle[i][3]+particle[i][4]*pow(2.0,3)+particle[i][5]*pow(2.0,2)+particle[i][6]*2+particle[i][7];
while(sum>Fin)
{
for(j=0;j<>
{
x=rand()%8+1;
particle[i][j]=x;
for(k=0;k<>
{
if(particle[i][k]==particle[i][j])
{
j--;
break;
}
}
}
sum=particle[i][0]*pow(2.0,3)+particle[i][1]*pow(2.0,2)+particle[i][2]*2+particle[i][3]+particle[i][4]*pow(2.0,3)+particle[i][5]*pow(2,2)+particle[i][6]*2+particle[i][7];
}
}
for(i=0;i<>
{
for(j=0;j<>
{
particle_v[i][j]=rand()%5-2;
}
}
}
void CalculateFitnessValue(void)
{
double temp1,temp2,x1,x2;
int i;
for(i=0;i<>
{
if(particle_fit[i]>Fin)
break;
else
{
temp1=particle[i][0]*pow(2,3)+particle[i][1]*4+particle[i][2]*2+1;
temp2=particle[i][4]*pow(2,3)+particle[i][5]*4+particle[i][6]*2+1;
x1=4.096*temp1/1023.0-0.048;
x2=4.096*temp2/1023.0-0.048;
particle_value[i] = temp1+temp2;
particle_fit[i] = 1/(x1+x2);
}
}
}
void FindPbestAndGbest()
{
int i,j,a,b,p,q;
if(iter==0)
{
for(i=0;i<>
{
for(j=0;j<>
{
particle_loc_best[i][j] = particle[i][j];
}
particle_loc_fit[i] = particle_fit[i];
}
gfit = particle_loc_fit[0];
j=0;
for(i=1; i<>
{
if(particle_loc_fit[i]>gfit)
{
gfit = particle_loc_fit[i];
j = i;
}
}
for(i=0; i<>
{
particle_glo_best[i] = particle_loc_best[j][i];
}
}
else
{
for(a=0;a<>
{
if(particle_fit[a] > particle_loc_fit[a])
{
particle_loc_fit[a]=particle_fit[a];
for(b=0;b<>
{
particle_loc_best[a][b] = particle[a][b];
}
}
}
for(p=0,q=-1;p<>
{
if(particle_loc_fit[p]>gfit)
{
gfit = particle_loc_fit[p];
q = p;
}
}
if(q != -1)
{
for(p=0; p<>
{
particle_glo_best[p] = particle_loc_best[q][p];
}
}
}
}
void renew_particle()
{
int i,j,k;
for(i=0; i<>
{
for(j=0; j<>
{
particle[i][j] += alp*particle_v[i][j];
if(particle[i][j] > high)
{
particle[i][j] = high;
}
if(particle[i][j] < low)
{
particle[i][j] = low;
}
for(k=0;k<>
{
if(particle[i][k]==particle[i][j])
{
j--;
break;
}
}
}
}
}
void renew_var()
{
int t,i,j;
t=rand()%11;
double l;
l=t/10.0;
for(i=0; i<>
{
for(j=0; j<>
{
particle_v[i][j]=w*particle_v[i][j]+c1*l*(particle_loc_best[i][j]-particle[i][j])+c2*l*(particle_glo_best[j]-particle[i][j]);
if(particle_v[i][j] > V_max)
{
particle_v[i][j] = V_max;
}
if(particle_v[i][j] < -V_max)
{
particle_v[i][j] = -V_max;
}
}
}
}
void OutputTextReport(void)
{
int i;
cout<<"iter="<<>
for(i=0;i<>
cout<<>
cout<<>
}
以上介绍了“ 求大神赐教!为什么运行后不出结果?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3714798.html