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

📄 tsatsp---console.cpp

📁 开发环境:Visual C++ .net2003 功能:利用禁忌搜索思想求解TSP问题。
💻 CPP
字号:
// TSATSP---Console.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "WSTaboSearchAlogrithm.h"

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

typedef std::vector<PCHAR> CmdParaments;

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

	//Test1();

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

	return 0;
}

VOID Test1()
{
	WSTaboSearchAlogrithm l_TSA;
	l_TSA.Initial("51.txt", "51r.txt", 1, 0, 3000);
	l_TSA.RunTaboSearch();
}


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";
	PCHAR l_pOutFileName = "Result.txt";
	INT l_SecondTimes = 30;//默认10秒
	INT l_StepsNum = 0;

	INT l_TaboLen = 0;

	_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();
	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]), "-sn") == 0)
		{
			l_StepsNum = atoi(l_paras[i + 1]);
			if(l_StepsNum <= 0) l_StepsNum = 0;
			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]), "-tn") == 0)
		{
			l_SecondTimes = atoi(l_paras[i + 1]);
			if(l_SecondTimes < 0) l_SecondTimes = 0;
			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]), "-tl") == 0)
		{
			l_TaboLen = atoi(l_paras[i + 1]);
			if(l_TaboLen < 0) l_TaboLen = 0;
			l_paras.erase( l_paras.begin() + i, l_paras.begin() + i + 2);
			break ;
		}
	}
	
	_PareNum = l_paras.size();
	INT l_TaboType = 1;
	for(i = 0; i < _PareNum; i += 2)
	{
		if(strcmp(strlwr(l_paras[i]), "-tt") == 0)
		{
			l_TaboType = atoi(l_paras[i + 1]);
			if(l_TaboType <= 1) l_TaboType = 1;
			else l_TaboType = 2;
			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]);

	WSTaboSearchAlogrithm l_TSA;
	l_TSA.Initial(l_pInFileName, l_pOutFileName, l_TaboType, l_TaboLen, l_SecondTimes, l_StepsNum);
	l_TSA.RunTaboSearch();
	l_TSA.ShowBestRouteInfo();
}

VOID Help()
{
	//INT _MemberNum = 50, FLOAT _CrossProbability = 0.8, FLOAT _VarProbability = 0.05);
	printf("==================================================================\n");
	printf("* This is Tabo Search Alogrithm Deom help                        *\n");
	printf("* TSA.exe [-ifn FILENAME] [-ofn FILENAME] [-tl TABOTABLELEN]     *\n");
	printf("*         [-sn STEPSNUM]  [-tn  SECONDTIMES] [-tt TABOTYPE]      *\n");
	printf("* TSA.exe -h | /?                                                *\n");
	printf("* TSA.exe -gc [-ofn FILENAME] [-n CITYNUM]                       *\n");
	printf("==================================================================\n");
	printf("\n");
	printf("-ifn FILENAME:指定输入城市坐标的文件名。默认值:GAData.txt。\n");
	printf("          文件格式要求:第一行为城市数;以后各行是城市编号和城市坐标。\n");
	printf("\n");
	printf("-ofn FILENAME:指定输出结果的文件名。默认值:Result.txt。\n");
	printf("\n");
	printf("-tl TABOTABLELEN:指定禁忌表的长度,默认值:城市的个数n。\n");
	printf("\n");
	printf("-sn STEPSNUM:指定执行禁忌搜索的步数。默认值为0,表示按时间执行。\n");
	printf("\n");
	printf("-tn  SECONDTIMES:指定执行禁忌搜索的时间。默认值为30秒,若为0表示按执行步数执行。\n");
	printf("\n");
	printf("-tt TABOTYPE:禁忌类型:禁忌目标值:1;禁忌2-opt交换因子:2,默认为1。\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");
}

⌨️ 快捷键说明

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