• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: hopfield  

资源简介

利用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


评论

共有 条评论