📄 一个布局程序原码.txt
字号:
n[i-1][1]=-v[j-1][1];
n[i-1][2]=xp[j-1][4];
n[i-1][3]=xp[j-1][5];
n[i-1][4]= v[j-1][0];
n[i-1][5]= v[j-1][1];
n[i-1][6]=-xp[j-1][4];
n[i-1][7]=-xp[j-1][5];
num=1;
goto Label01;
}
}
}
else
{
l++;
if(l<=4)
goto Label00;
else
goto end;
}
}
end :continue;
}
//printf("flag=%d",flag);
return(flag);
}
void esiso(double *p0,double p[100][20],int N,int n,double *mm,double *aa,int tt,int pace,int seed,double e)
{ //*p0为初始不干涉布局,**p为由*p0经程序geninittt.cpp得到的同构不干涉布局;
//k为进化代数,dd,dc分别为从1-size中选取的两个数,flag控制是第几个分量
int k=0,i,j,h=0,rr=512,dd,dc,flag;//rr=52
double llx,lly,ll,xx,xx1,xx2,STA,INT,WAI;
double f(double x[]);
double CT=1.0,TV=0.1,r=512;//初始温度CT,温度下降速率TV
double wai1,wai2,stabl1,stabl2,hzj1[15],hzj2[15];//控制输出的变量
// double *p[100];//每个p[i]指向xx[i][]
double sigma=4,sigma2=0.8; //邻域半径sigma,角度搜索步长sigma2
const double alpha=0.265; //交叉系数
const double c=0.6,cc=0.6,ccc=0.4; //压缩因子
const double wa=1,wb=10; //惩罚系数:wa--静不平衡量前系数,wb--不干涉量前系数
const double pi=3.1415926;
tt=10000;
// const int GP=5;
double v,pm,xl,zt;
int d1;
FILE *fp;
if((fp=fopen("F:\\GANNLayout\\5G\\isolayout1\\outisolay5513.txt","w"))==NULL)
{
printf("cannot open this file.\n");
exit(0);
}
int *dgl=new int[seed];
double *ztfb=new double[n];
double *a=new double[seed*n];
for(j=0;j<seed;j++)
{
WAI=waibl(p[j],aa,N);
INT=interfer(p[j],aa,N);
STA=stabl(p[j],mm,N);
*(p[j]+3*N)=WAI+wa*pow(max((STA-e)/(3/pow(STA,2)),STA-e),2)+wb*INT;//30,5
}
paixu(p,seed,3*N);
fprintf(fp,"\n@@第%d代结果:",k);
printf("\n不干涉量为:%f",interfer(p[0],aa,N));
printf("\n外包罗的值为:%f",waibl(p[0],aa,N));
printf("\n静不平衡量为:%f",stabl(p[0],mm,N));
fprintf(fp,"\n五个图元的形心横坐标分别为:%f %f %f %f %f",*(p[0]+0),*(p[0]+3),*(p[0]+6),*(p[0]+9),*(p[0]+12));
fprintf(fp,"\n五个图元的形心纵坐标分别为:%f %f %f %f %f",*(p[0]+1),*(p[0]+4),*(p[0]+7),*(p[0]+10),*(p[0]+13));
fprintf(fp,"\n五个图元的角度分别为:%f %f %f %f %f",*(p[0]+2),*(p[0]+5),*(p[0]+8),*(p[0]+11),*(p[0]+14));
getchar();
wai1=waibl(p[0],aa,N);
stabl1=stabl(p[0],mm,N);
for(j=0;j<15;j++)
hzj1[j]=*(p[0]+j);
//先不进行升序排列
do
{
i=0;//产生新个体的计数器
do
{
//间单代数杂交
rr=rand();
evenls(0,seed-1,&rr,dgl,2); //*按等概率分布选取两个数
dd=dgl[0];
dc=dgl[1];
for(j=0;j<3*N;j++)
*(p[seed+i]+j)=alpha**(p[dd]+j)+(1-alpha)**(p[dc]+j);//(*(p[dd]+j)+*(p[dc]+j))/2;
for(j=0;j<3*N;j++)
{
ztfb[j]=ztRand(0,1*evenxl1(0.05,1));//x(i)=x(i)+U(i),U(i)=Ni(0,tao*deta(i)),计算表明这里用(0.05,1)之间服从均匀分布的随机数作为步长偏差比其他方法有效
p[seed+i][j]+=ztfb[j];
}
//变异后处理@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
for(j=0;j<3*N;j++)
{
if(j%3==2)//对方向角进行边界处理
{
do
{
if(*(p[seed+i]+j)<0)
*(p[seed+i]+j)=-*(p[seed+i]+j);//或=0;
else if (*(p[seed+i]+j)>pi)
*(p[seed+i]+j)=2*pi-*(p[seed+i]+j);//或=pi;
}while((*(p[seed+i]+j)<0)||(*(p[seed+i]+j)>pi));
//—————————————————————————希望通过对角度的调整,使图元不干涉
INT=interfer(p[seed+i],aa,N);
if(INT!=0)
{
*(p[seed+i]+j)+=sigma2;
if(*(p[seed+i]+j)>=pi)
{
*(p[seed+i]+j)-=sigma2/2;
if(*(p[seed+i]+j)>=pi)
*(p[seed+i]+j)-=sigma2/2;
INT=interfer(p[seed+i],aa,N);
if(INT!=0)
*(p[seed+i]+j)-=sigma2/2;
}
INT=interfer(p[seed+i],aa,N);
if(INT!=0)
{
*(p[seed+i]+j)-=sigma2/2;
INT=interfer(p[seed+i],aa,N);
if(INT!=0)
*(p[seed+i]+j)-=sigma2/2;
}
}
//———————————————————————————————————————
}
else if(j%3==0)//对横坐标
{
do
{
// printf("\n横^^^");//getchar();
llx=*(p[seed+i]+j)-p0[j];
lly=*(p[seed+i]+j+1)-p0[j+1];
// printf("\nllx=%lf",llx);
ll=sqrt(pow(llx,2)+pow(lly,2));//计算新点和给出的那个初始布局中对应的图元的形心之间的距离
// printf("\nll=%lf",ll);
xx1=sigma*llx/ll+p0[j];//中,*(p[seed+i]+j)-p0[j]为横坐标之距
xx2=sigma*lly/ll+p0[j+1];
if(ll>sigma)
{
*(p[seed+i]+j)=2*xx1-*(p[seed+i]+j);//xx1;
*(p[seed+i]+j+1)=2*xx2-*(p[seed+i]+j+1);//xx2;
}
}while(ll>sigma);
}
else
{
llx=*(p[seed+i]+j-1)-p0[j-1];
lly=*(p[seed+i]+j)-p0[j];
ll=sqrt(pow(llx,2)+pow(lly,2));
xx1=sigma*llx/ll+p0[j-1];
xx2=sigma*lly/ll+p0[j];
do
{
if(ll>sigma)
{
*(p[seed+i]+j-1)=2*xx1-*(p[seed+i]+j-1);
*(p[seed+i]+j)=2*xx2-*(p[seed+i]+j);
}
}while(ll>sigma);
}
}
i++;
}while(i<pace);
for(j=seed;j<seed+pace;j++)
{
WAI=waibl(p[j],aa,N);
INT=interfer(p[j],aa,N);
STA=stabl(p[j],mm,N);
*(p[j]+3*N)=WAI+wa*pow(max((STA-e)/(3/pow(STA,2)),STA-e),2)+wb*INT;//30,5
}
paixu(p,pace+seed,3*N);//对函数值进行排序 for(j=0;j<pace+seed;j++)
CT=CT*TV;
k++;
printf("\nk=%d",k);
if(interfer(p[0],aa,N)==0)
{
printf("\n第%d代结果:",k);
printf("\n外包罗的值为:%f",waibl(p[0],aa,N));
printf("\n不干涉量为:%f",interfer(p[0],aa,N));
printf("\n静不平衡量为:%f",stabl(p[0],mm,N));
wai2=waibl(p[0],aa,N);
stabl2=stabl(p[0],mm,N);
for(j=0;j<15;j++)
hzj2[j]=*(p[0]+j);
if(wai1>wai2)
{
wai1=wai2;
stabl1=stabl2;
for(j=0;j<15;j++)
hzj1[j]=hzj2[j];
fprintf(fp,"\n****************************************");
fprintf(fp,"\n第%d代结果:",k);
fprintf(fp,"\n外包罗的值为:%f",waibl(p[0],aa,N));
fprintf(fp,"\n不干涉量为:%f",interfer(p[0],aa,N));
fprintf(fp,"\n静不平衡量为:%f",stabl(p[0],mm,N));
fprintf(fp,"\n五个图元的形心横坐标分别为:%f %f %f %f %f",hzj1[0],hzj1[3],hzj1[6],hzj1[9],hzj1[12]);
fprintf(fp,"\n五个图元的形心纵坐标分别为:%f %f %f %f %f",hzj1[1],hzj1[4],hzj1[7],hzj1[10],hzj1[13]);
fprintf(fp,"\n五个图元的角度分别为:%f %f %f %f %f",hzj1[2],hzj1[5],hzj1[8],hzj1[11],hzj1[14]);
}
}
}while(k<tt);
fprintf(fp,"\n\n有关参数:初始温度%f,温度下降速率%f,邻域半径%f,交叉系数%f,压缩因子%f %f %f,静不平衡量系数%f,不干涉量系数%f",CT,TV,sigma,alpha,c,cc,ccc,wa,wb);
fclose(fp);
delete[]dgl;
delete[] ztfb;
delete[] a;
return;
}
FILE *fp;
void main()
{
int i,j;
int N,tt,pace,seed,n;
double m[20],a[20];
double e;
double f0[20],f[100][20];
time_t p1,p2;
time(&p1);
//从已知文件库读取数据.
//tt为进化时限,pace为产生中间种群执行的步数,seed为初始种群规模,n为变量个数 ,e为最大静不变量,m[N]为图元的质量,a[2*N]为图元的边长
//lower[3]变量下限,upper[3]变量上限
if((fp=fopen("F
:\\GANNLayout\\5G\\isolayout1\\isolayout55.txt","r"))==NULL)
{
printf("cannot open this file.\n");
exit(0);
}
printf("\n 布局问题的初始数据为:");
fscanf(fp,"%d",&N);
printf("\n N=%d",N);
fscanf(fp,"%d",&tt);
printf("\n tt=%d",tt);
fscanf(fp,"%d",&pace);
printf("\n pace=%d",pace);
fscanf(fp,"%d",&seed);
printf("\n seed=%d",seed);
fscanf(fp,"%d",&n);
printf("\n n=%d",n);
for(i=0;i<N;i++)
{
fscanf(fp,"%lf",&m[i]);
printf("\nm[%d]=%f",i,m[i]);
}
for(i=0;i<2*N;i++)
{
fscanf(fp,"%lf",&a[i]);
printf("\na[%d]=%f",i,a[i]);
}
fscanf(fp,"%lf",&e);
printf("\n e=%lf",e);
for(i=0;i<3*N;i+=3)
{
fscanf(fp,"%lf",&f0[i]);
printf("\nf0[%d]=%lf",i,f0[i]);
}
for(i=1;i<3*N;i+=3)
{
fscanf(fp,"%lf",&f0[i]);
printf("\nf0[%d]=%lf",i,f0[i]);
}
for(i=2;i<3*N;i+=3)
{
fscanf(fp,"%lf",&f0[i]);
printf("\nf0[%d]=%lf",i,f0[i]);
}
for(i=0;i<seed;i++)
{
for(j=0;j<3*N;j+=3)
{
fscanf(fp,"%lf",&f[i][j]);
printf("\nf[%d][%d]=%lf",i,j,f[i][j]);
}
for(j=1;j<3*N;j+=3)
{
fscanf(fp,"%lf",&f[i][j]);
printf("\nf[%d][%d]=%lf",i,j,f[i][j]);
}
for(j=2;j<3*N;j+=3)
{
fscanf(fp,"%lf",&f[i][j]);
printf("\nf[%d][%d]=%lf",i,j,f[i][j]);
}
}
fclose(fp) ;
esiso(f0,f,N,n,m,a,tt,pace,seed,e);
time(&p2);
printf("\n程序运行时间%ld",p2 - p1);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -