车辆调度路径优化
这个代码怎么改成用C#来编
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#include<float.h>
#include<time.h>
#include<graphics.h>
#include<bios.h>
#include<alloc.h>
#define maxpop 51
#define maxstring 51
struct pp{unsigned char chrom[maxstring];
float x;
};
struct pp oldpop,bestpop,lbestpop,tabupop[maxpop];/*各种解*/
unsigned int popsize,lchrom1,lchrom2,lchrom,gen,maxgen,bestgen,ltabu;
unsigned int KK;
float pw,xold,xnew,xbest;
float x1[maxstring],y[maxstring];
float dd[maxstring][maxstring],qq[maxstring],qvehicle,dmax;
float vv[maxstring];
FILE *fp;
void initdata();
void initpop();
float decode();
void vehicle();
int hillclimb();
main()
{ unsigned int k,j,tt;
char fname[20];
float ttt;
clrscr();
if(!(fp=fopen("ts01.txt","w+")))
{printf("Cannot open file!\n");
exit(1);
}
randomize();
initdata();
initpop();
bestgen=0;
hillclimb(oldpop.chrom);
vehicle(bestpop.chrom);
fprintf(fp,"*******This is the best solution:**************\n");
fprintf(fp," The shortest route length is:%f\n",bestpop.x);
fprintf(fp," The shortest route is:\n");
for(k=0;k<lchrom;k++)
{
for(j=1;j<=KK;j++)
if(k==vv[j])fprintf(fp,"\n");
fprintf(fp,"%5d",bestpop.chrom[k]);
}
fprintf(fp,"\n");
fprintf(fp," bestgen=%4d\n",bestgen);
printf("********This is the best solution:***************\n");
printf(" The shortest route length is:%f \n",bestpop.x);
printf(" The shortest route is:\n");
for(k=0;k<lchrom;k++)
{
for(j=1;j<=KK;j++)
if(k==vv[j])printf("\n");
printf("%5d",bestpop.chrom[k]);
}
printf("\n");
printf(" bestgen=%4d\n",bestgen);
ttt=clock()/18.2;
tt=ttt/60;
fprintf(fp,"Run clock=%2d:%2d:%7.4f",tt/60,tt%60,ttt-tt*60);
fprintf(fp,"\n");
printf("Run clock=%2d:%2d:%7.4f",tt/60,tt%60,ttt-tt*60);
printf("\n");
fclose(fp);
getch();
exit(0);
}
/*the end of main*/
/*init data*/
void initdata()
{
unsigned int ch,i,j,k;
clrscr();
maxgen=400;
popsize=40;
lchrom1=20;
lchrom2=5;
lchrom=lchrom1;
ltabu=5;
pw=300.0;
x1[0]=14.5;y[0]=13.0;qq[0]=0.0;
x1[1]=12.8;y[1]=8.5;qq[1]=0.1;
x1[2]=18.4;y[2]=3.4;qq[2]=0.4;
x1[3]=15.4;y[3]=16.6;qq[3]=1.2;
x1[4]=18.9;y[4]=15.2;qq[4]=1.5;
x1[5]=15.5;y[5]=11.6;qq[5]=0.8;
x1[6]=3.9;y[6]=10.6;qq[6]=1.3;
x1[7]=10.6;y[7]=7.6;qq[7]=1.7;
x1[8]=8.6;y[8]=8.4;qq[8]=0.6;
x1[9]=12.5;y[9]=2.1;qq[9]=1.2;
x1[10]=13.8;y[10]=15.2;qq[10]=0.4;
x1[11]=6.7;y[11]=16.9;qq[11]=0.9;
x1[12]=14.8;y[12]=7.6;qq[12]=1.3;
x1[13]=1.8;y[13]=8.7;qq[13]=1.3;
x1[14]=17.1;y[14]=11.0;qq[14]=1.9;
x1[15]=7.4;y[15]=1.0;qq[15]=1.7;
x1[16]=0.2;y[16]=2.8;qq[16]=1.1;
x1[17]=11.9;y[17]=19.8;qq[17]=1.5;
x1[18]=13.2;y[18]=15.1;qq[18]=1.6;
x1[19]=6.4;y[19]=5.6;qq[19]=1.7;
x1[20]=9.6;y[20]=14.8;qq[20]=1.5;
for(i=0;i<=20;i++)
{
for(j=0;j<=20;j++)
{
dd[i][j]=sqrt((x1[i]-x1[j])*(x1[i]-x1[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
qvehicle=8.0;
dmax=50.0;
}
/*initpop()*/
void initpop()
{
unsigned char j1;
unsigned int K,k1,k,m,i1,i2,j,i,j2,j3,j4,p5[maxstring];
randomize();
for(k=0;k<lchrom;k++)p5[k]=k+1;
K=lchrom;
for(k=0;k<lchrom;k++)
{
k1=random(K);
if(k<lchrom-1)
{ oldpop.chrom[k]=p5[k1];
for(m=k1;m<K-1;m++)
{
p5[m]=p5[m+1];
}
K=K-1;
}
else
{
oldpop.chrom[k]=p5[0];
}
}
oldpop.x=(float)decode(oldpop.chrom);
xbest=oldpop.x;
xold=oldpop.x;
for(i1=0;i1<ltabu;i1++)
{
for(i2=0;i2<lchrom;i2++)tabupop[i1].chrom[i2]=0;
}
}
/*decode()*/
float decode(unsigned char *pp)
{
int j,k,ffljs; /*ffljs解中的非法路径数*/
float ddd,q,d,s;
ffljs=0;
ddd=0;
k=1;
d=dd[0][pp[0]];
q=qq[pp[0]];
for(j=1;j<lchrom;j++)
{
q=q+qq[pp[j]];
d=d+dd[pp[j]][pp[j-1]];
if(q>qvehicle||d+dd[pp[j]][0]>dmax)
{
k=k+1;
ddd=ddd+d-dd[pp[j]][pp[j-1]]+dd[pp[j-1]][0];
d=dd[0][pp[j]];
q=qq[pp[j]];
}
}
ddd=ddd+d+dd[pp[lchrom-1]][0];
ffljs=k-lchrom2;
if(ffljs<0)ffljs=0;
ddd=ddd+ffljs*pw;
return ddd;
}
/*vehicle()*/
void vehicle(unsigned char *pp)
{
int j,k;
float q,d,s;
k=1;
vv[k]=1;
d=dd[0][pp[0]];
q=qq[pp[0]];
for(j=1;j<lchrom;j++)
{
q=q+qq[pp[j]];
d=d+dd[pp[j]][pp[j-1]];
if(q>qvehicle||d+dd[pp[j]][0]>dmax)
{
k=k+1;
vv[k]=vv[k-1]+1;
d=dd[0][pp[j]];
q=qq[pp[j]];
}
else
{
vv[k]=vv[k]+1;
}
}
KK=k;
}
/*hillclimb()*/
int hillclimb(unsigned char *parent)
{
int i,j,k,k1,k2,k3,i1,i2;
unsigned char *ppp;
int flag1,flag2;
for(i=0;i<=maxgen;i++)
{
xold=100000.0;
for(k=0;k<popsize;k++)
{
for(j=0;j<lchrom;j++) ppp[j]=parent[j];
k1=random(lchrom);
pp:k2=random(lchrom);
if(k1==k2) goto pp;
ppp[k1]=parent[k2];
ppp[k2]=parent[k1];
flag1=1;
i1=0;
while(flag1==1&&i1<ltabu)
{
flag2=1;
i2=0;
while(flag2==1&&i2<lchrom)
{
if(ppp[i2]!=tabupop[i1].chrom[i2]) flag2=0;
i2=i2+1;
}
if(flag2==1) flag1=0;
i1=i1+1;
}
if(flag1==1)
{
xnew=(float)decode(ppp);
if(xnew<xbest)
{
xbest=xnew;
for(j=0;j<lchrom;j++)bestpop.chrom[j]=ppp[j];
bestpop.x=xnew;
bestgen=i;
}
if(xnew<xold)
{
xold=xnew;
for(j=0;j<lchrom;j++)bestpop.chrom[j]=ppp[j];
}
}
}
for(j=0;j<lchrom;j++)parent[j]=lbestpop.chrom[j];
for(i1=1;i1<ltabu;i1++)
{
for(i2=0;i2<lchrom;i2++)
tabupop[i1-1].chrom[i2]=tabupop[i1].chrom[i2];
}
for(i2=0;i2<lchrom;i2++)
tabupop[ltabu-1].chrom[i2]=lbestpop.chrom[i2];
fprintf(fp,"The solution of gen=%6d is:%f\n",i,xbest);
printf("The solution of gen=%6d is:%f\n",i,xbest);
}
return 1;
}
这个代码谁能帮我转化成用C#来编,麻烦大家帮我转一下