资源简介
利用hopfield解决经典TSP问题,C语言描述
代码片段和文件信息
#include
#include
#include
#include
#define N 10
#define NN N*N
#define G(x) ((1.0+tanh(x/u0))/2.0) //threshold function
void scities(); //select city position
void sinit(); //select initial neural states
void cstates(); //caculate neural states
void dstates(); //display neural states
int recheck();
int m=15;
int tmaa;
float v[100]v1[14000]u[100]dd[100]t[100]xx[10]yy[10]efsub=0.00001;
double a=0.5b=0.5c=0.2d=0.5u0=0.02h=0.01l[100]pi=3.1415926;
FILE *fp*fopen();
main()
{
int ijinpeng;
float f1;
fp=fopen(“result.dat““w“);
i=0;
f1=0-0.07;
do{
i++;
f1+=sub;
v1[i]=G(f1);
}while((v1[i]<=0.999) && (i<=13999));
scities();
for(i=1;i<=50;i++)
{
tm=0;
aa=i*10;
printf(“%d“i);
sinit();
f=0;
do
{
cstates();
if(fabs(e-f)<1e-20)
break;
f=e;
}while(tm<1000);
dstates();
}
// scanf(“%s“);
}
void scities()
{
int ij;
double h[N]owoo;
//get the coordinate of cities using random data
//cites coordinates given by Hopfield-Tank
xx[0]=0.4;
yy[0]=0.4493;
xx[1]=0.2493;
yy[1]=0.1463;
xx[2]=0.1707;
yy[2]=0.2293;
xx[3]=0.2293;
yy[3]=0.7610;
xx[4]=0.5171;
yy[4]=0.9414;
xx[5]=0.8732;
yy[5]=0.6536;
xx[6]=0.6878;
yy[6]=0.5219;
xx[7]=0.8488;
yy[7]=0.3609;
xx[8]=0.6683;
yy[8]=0.2536;
xx[9]=0.6195;
yy[9]=0.2643;
for(i=0;i {
for(j=0;j {
if(i==j)
continue;
dd[i*N+j]=hypot(xx[i]-xx[j]yy[i]-yy[j]);
}
}
//caculate initial bias
for(i=0;i {
o=(yy[i]-0.5)/(xx[i]-0.5);
h[i]=atan(o);
oo=hypot(xx[i]-0.5yy[i]-0.5);
for(j=0;j {
w=h[i]+(j-1)*2*pi/(float)N;
l[i*N+j]=cos(w)*oo;
}
}
}
void sinit()
{
int iji1;
float u00=0-u0*log(N-1)/2.0;
//get initial neuron‘s state
for (i=0;i t[0]=(rand())/(float)32767;
for(i=aa;i t[i-aa]=(rand())/(float)32767;
for(i=0;i {
u[i]=u00+0.001*(t[i]*2-1)+0.002*l[i];
i1=(int)(u[i]*100000.0+0.5)+7000;
if(i1>13908) v[i]=v1[13908];
if(i1<=1) v[i]=v1[1];
if(i1>1 && i1<=13908)
v[i]=v1[i1];
}
}
void cstates()
{
int i1ijqxryx0y0z0;
float zke1z1;
e=0;
k=0;
for(i=0;i for(j=0;j k+=v[i*N+j];
//caculate energy function
e=0;
for(x=0;x {
x0=x*N;
for(i=0;i {
if(i==j) continue;
e+=v[x0+i]*v[x0+j];
}
}
for(i=0;i for(x=0;x {
x0=x*N;
for(y=0;y {
if(x==y) continue;
e+=v[x0+i]*v[y*N+i];
}
}
for(x=0;x {
x0=x*N;
for(y=0;y {
if(y==x) continue;
y0=y*N;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5374 2010-05-16 10:11 hopfield\hopfield.c
文件 3423 2010-05-16 10:05 hopfield\hopfield.dsp
文件 541 2010-05-16 10:59 hopfield\hopfield.dsw
目录 0 2010-05-16 11:00 hopfield
----------- --------- ---------- ----- ----
9338 4
- 上一篇:操作系统 课程设计 C++ 读者写着问题 源代码
- 下一篇:单片机课程设计教程
评论
共有 条评论