資源簡介
利用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++ 讀者寫著問題 源代碼
- 下一篇:單片機課程設計教程
評論
共有 條評論