⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一个布局程序原码.txt

📁 一个布局程序的源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
							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 + -