📄 tsatsp---console.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 + -