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

📄 training.cpp

📁 hopfield神经网络求解TSP问题
💻 CPP
字号:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <time.h>
#include <iomanip>


void main()
{
	using namespace std;
	ofstream fout1;
	fout1.open("ourput.txt");
	if (fout1.fail())
	{
		exit(1);
		cout<<"cannot open file.";
	}
	fout1.setf(ios::showpoint);
	fout1.setf(ios::fixed);
	fout1.precision(5);
	int i,j,k,h,count=0;
	double cood[10][2],v[10][10],dis[10][10],u[10][10],deta_u[10][10];
	double a=800,b=800,c=200,d=500;
	double u0=0.01,u_init,deta_t=0.00001;
	double judge=0;
	double sum_vj=0,sum_vy=0,sum_xj=0,sum_dy=0;
    srand((unsigned)time(NULL));


	for (i=0;i<10;i++)
	{
		cood[i][0]=(rand()%100)/100.0;
		cood[i][1]=(rand()%100)/100.0;
	}
	//show the ten place coordinate
	for (i=0;i<10;i++)
	{
		fout1<<cood[i][0]<<" "<<cood[i][1]<<endl;
	}
	
	for (i=0;i<10;i++)
	{
		for (j=i;j<10;j++)
		{

			double distancesqu;
			distancesqu=(cood[i][0]-cood[j][0])*(cood[i][0]-cood[j][0])+(cood[i][1]-cood[j][1])*(cood[i][1]-cood[j][1]);
			dis[i][j]=sqrt(distancesqu);
			dis[j][i]=dis[i][j];
		}
	}
	
	//show the distance matrix
	fout1<<"the distance matrix"<<endl;
	for (i=0;i<10;i++)
	{
		for (j=0;j<10;j++)
		{
			fout1<<setw(10)<<dis[i][j];
		}
		fout1<<endl;
	}
	for (i=0;i<10;i++)
	{
		for (j=0;j<10;j++)
		{
			v[i][j]=0.0;//(rand()%500)/1000.0;
		}
	}
	
	//show the change place matrix 
	fout1<<"show the change place matrix"<<endl;
	for (i=0;i<10;i++)
	{
		for (j=0;j<10;j++)
		{
			fout1<<setw(10)<<v[i][j];
		}
		fout1<<endl;
	}
	
	
	//compute step
	u_init=0.5*u0*log(9.0);

	for (i=0;i<10;i++)
	{
		for (j=0;j<10;j++)
		{
			u[i][j]=u_init+(rand()%100-50)*u0/1000.0;
		}
	}
	
	
	do 
	{ 
		judge=0;
		for (i=0;i<10;i++)
		{
			for (j=0;j<10;j++)
			{
				v[i][j]=0.5*(1+tanh(u[i][j]/u0));
			}
		}
		
		for (i=0;i<10;i++)
		{			
			for (j=0;j<10;j++)
			{
				for (k=0;k<10;k++)
				{
					if (!(k==j))
					{
						sum_vj=sum_vj+v[i][k];
					}
				}
				for (k=0;k<10;k++)
				{
					if (!(k==i))
					{
						sum_vy=sum_vy+v[k][j];
					}
				}
				for (k=0;k<10;k++)
				{
					for (h=0;h<10;h++)
					{
							sum_xj=sum_xj+v[k][h];
					}
				}
				for (k=0;k<10;k++)
				{
					int add,sub,addk,subk;
					add=j+1;
					sub=j-1;
					addk=k;
					subk=k;

					if (add==10)
					{
						add=0;

					}
					if (sub==-1)
					{
						sub=9;
					}
					if (!(k==i))
					{
						sum_dy=sum_dy+dis[i][k]*(v[addk][add]+v[subk][sub]);
					}
				}			
				deta_u[i][j]=-u[i][j]-a*sum_vj-b*sum_vy-c*(sum_xj-13)-d*sum_dy;		
				sum_vj=0,sum_vy=0,sum_xj=0,sum_dy=0;
			}
		}
		for (i=0;i<10;i++)
		{
			for (j=0;j<10;j++)
			{
				u[i][j]=u[i][j]+deta_u[i][j]*deta_t;
			}
		}
		count=count+1;
		for (i=0;i<10;i++)
		{
			for (j=0;j<10;j++)
			{
				judge=judge+v[i][j];
			}
		}
	}
	while (count<2000);



	fout1<<"show the results"<<endl;
	fout1<<"the number of the step times:"<<count<<endl;
	for (i=0;i<10;i++)
	{
		for (j=0;j<10;j++)
		{
			fout1<<setw(10)<<v[i][j];
		}
		fout1<<endl;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -