📄 ena---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 + -