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

📄 ena---tsp.cpp

📁 开发环境:Visual C++ .net2003 功能介绍:神经网络算法实验;分Console版本和MFC版本;主要用来求解TSP问题。
💻 CPP
字号:
// ENA---TSP.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "WSTSPENA.h"
#include "WSTSP.h"
#include <math.h>
#include <vector>
using namespace std;

VOID Command(PCHAR _CmdString[], INT _PareNum);
VOID Help();

typedef std::vector<PCHAR> CmdParaments;

void Test1();
void Test2();

int _tmain(int argc, _TCHAR* argv[])
{

	if(argc == 1)
	{
		Help();
		getchar();
	}
	else Command(argv, argc);

	//Test1();
	return 0;
}

void Test1()
{
	WSTSPENA wsTSP;
	wsTSP.Initial("30.txt");
	wsTSP.RunENA();
}

void Test2()
{
	float p_DistSquare = 10;
	float p_KSquare = 10;
	int i;
	for(i = 0; i < 10000000; i++)
	{
		p_KSquare *= 0.99;
		printf("Test:%f\n",exp( -p_DistSquare / (2*p_KSquare)) );
	}
}




VOID Help()
{
	//INT _MemberNum = 50, FLOAT _CrossProbability = 0.8, FLOAT _VarProbability = 0.05);
	printf("==================================================================\n");
	printf("* This is Elastic TSP Alogrithm Deom help                        *\n");
	printf("* ENA.exe [-ifn FILENAME]                                        *\n");
	printf("* ENA.exe -h | /?                                                *\n");
	printf("* ENA.exe -gc [-ofn FILENAME] [-n CITYNUM]                       *\n");
	printf("==================================================================\n");
	printf("\n");
	printf("-ifn FILENAME:指定输入城市坐标的文件名。默认值:GAData.txt。\n");
	printf("          文件格式要求:第一行为城市数;以后各行是城市编号和城市坐标。\n");
	printf("\n");

	printf("-h: HELP,显示帮助信息。\n");
	printf("/?: HELP,显示帮助信息。\n");
	printf("\n");

	printf("-gc:随即生成城市坐标组,并输出到指定文件。\n");
	printf("-ofn FILENAME:指定输出文件名。默认值:GAData.txt。\n");
	printf("-n CITYNUM:设定城市数目。默认值:30。\n");
	printf("\n");
}

VOID Command(PCHAR _CmdString[], INT _PareNum)
{
	CmdParaments l_paras;
	l_paras.clear();

	INT i;
	//_CmdString[0]为程序名。
	for(i = 1; i < _PareNum; ++i)
	{
		l_paras.push_back(_CmdString[i]);
	}

	//检查有无帮助,先处理帮助信息
	_PareNum = l_paras.size();
	for(i = 0; i < _PareNum; ++i)
	{
		if(strcmp(l_paras[i], "/?") == 0 || strcmp(strlwr(l_paras[i]), "-h") == 0)
		{
			l_paras.clear();
			Help();
			return ;
		}
	}
	//检查是否是要求生成城市坐标文件
	for(i = 0; i < _PareNum; ++i)
	{
		if(strcmp(strlwr(l_paras[i]), "-gc") == 0)
		{
			l_paras.erase(l_paras.begin() + i);
			PCHAR l_pOutFileName = "GAData.txt";
			INT l_CityNum = 30;

			_PareNum = l_paras.size();
			/*if(_PareNum) printf("发现不可识别的参数表示。%d\n", _PareNum);*/
			if(_PareNum & 0x01) 
			{
				printf("发现不可识别的参数表示。\n");
				return;
			}

			/*for(i = 0; i < _PareNum; ++i)
			{
				printf("1====>%s \n", l_paras[i]);
			}*/

			for(i = 0; i < _PareNum; i += 2)
			{
				if(strcmp(strlwr(l_paras[i]), "-ofn") == 0)
				{					
					l_pOutFileName = l_paras[i + 1];					
					l_paras.erase( l_paras.begin() + i, l_paras.begin() + i + 2);
					break ;
				}
			}

			_PareNum = l_paras.size();
			for(i = 0; i < _PareNum; i += 2)
			{
				if(strcmp(strlwr(l_paras[i]), "-n") == 0)
				{					
					l_CityNum = atoi(l_paras[i + 1]);
					if(l_CityNum < 0) l_CityNum = 30;
					l_paras.erase( l_paras.begin() + i, l_paras.begin() + i + 2);
					break ;
				}
			}

			_PareNum = l_paras.size();
			if(_PareNum) printf("发现不可识别的参数表示:");
			for(i = 0; i < _PareNum; ++i) printf("%s ", l_paras[i]);
			WSTSP::GenCityInfoToFile(l_pOutFileName, l_CityNum);
			return ;
		}
	}

	//接下来处理程序的各个参数配置
	PCHAR l_pInFileName = "GAData.txt";

	_PareNum = l_paras.size();
	if(_PareNum & 0x01) 
	{
		printf("发现不可识别的参数表示。\n");
		return ;
	}
	
	for(i = 0; i < _PareNum; i += 2)
	{
		if(strcmp(strlwr(l_paras[i]), "-ifn") == 0)
		{
			l_pInFileName = l_paras[i + 1];
			l_paras.erase( l_paras.begin() + i, l_paras.begin() + i + 2);
			break ;
		}
	}

	
	_PareNum = l_paras.size();
	if(_PareNum) printf("发现不可识别的参数表示:");
	for(i = 0; i < _PareNum; ++i) printf("%s ", l_paras[i]);

	WSTSPENA wsTSP;
	wsTSP.Initial(l_pInFileName);
	wsTSP.RunENA();
	wsTSP.ShowResultRoute();
}

⌨️ 快捷键说明

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