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

📄 tsp.cpp

📁 很好的遗传面算法 欢迎大家下载
💻 CPP
字号:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <time.h>
#include <stdlib.h>
#include "def.h"
#include "TSP.h"
//static DISTANCE dist[_CITY_AMOUNT][_CITY_AMOUNT];

char strFilename[100];

void funLoadData(DISTANCE distance[_CITY_AMOUNT][_CITY_AMOUNT]);

void main()
{
	string str = strFilename;
	int nPos;
	clock_t start, finish;

	n=0;	
	cout << "     |=========用鼠标拖入TSP文件,按回车键。=======|" << endl ;

	gets(strFilename);
	nPos = str.find("\\");
	while (nPos != -1) {
		str = str.substr(0,nPos) + "\\" + str.substr(nPos) ;
		nPos = str.find("\\",nPos+2);
	}
	if (str.find("\"") != -1) 
	{
		str = str.substr(1,str.length()-2);
	}
	cout << strFilename << endl;
	printf("输入进化代数:");
	scanf("%d",&_TIMES);
	
	start=clock();
	
	DISTANCE distance[_CITY_AMOUNT][_CITY_AMOUNT];
	funLoadData(distance);

	Csga<_CONTAINER, _CONTAINER_P> CUnit((DISTANCE *)distance);     //初始化

	//开始遗传算法
	if(!CUnit.fnCreateRandomGene())                                 //产生随机的基因
	{
		exit(0);
	}
	//	 CUnit.funSortDist();

	//循环基因编译,杂交,淘汰过程
	CUnit.fnEvalAll();
	for ( int i = 0; i < _TIMES; ++i )
	{
		CUnit.fnDispProbability();
		CUnit.fnGeneAberrance();                                 //基因变异
		CUnit.fnDispProbability();
		CUnit.fnGeneMix();                                         //基因杂交

		CUnit.fnEvalAll();    

		//每隔_DISP_INTERVAL显示一次结果
		if ( (i+1)%_DISP_INTERVAL == 0 || i == 0)
		{
			cout << "第" << i+1 << "代" << std::endl;
			CUnit.fnDispProbability();
			CUnit.fnDispHistoryMin();
		}
	}

	CUnit.fnOutputFile();

	finish=clock();
	float nTime=(float)(finish-start)/CLOCKS_PER_SEC;
	cout << endl << "OK ! It took " << nTime << " seconds." << endl;
	
	getchar();
}


/*从文件中读取数据*/
void funLoadData(DISTANCE distance[_CITY_AMOUNT][_CITY_AMOUNT])
{
	FILE *fp;
	int i=0,j;
	char sTemp[64];

//	if (!(fp = fopen("TSP_china30.txt","r"))) return;
//	if (!(fp = fopen("NODES.txt","r"))) return;
	if (!(fp = fopen(strFilename,"r"))) return;
	
	while (i<3) 
	{
		fgets(szTspInfo[i++],1024,fp);
//		fgets(sTemp,1024,fp);
//		strcpy(szTspInfo[i++],sTemp);
	}

	fscanf(fp,"%s",sTemp);
	fscanf(fp,"%d",&n);
	i = 0;
	while (i++<5) 
	{
		fgets(sTemp,1024,fp);
	}
	for (i=0;i<n;i++)
	{
		for (j=0;j<n;j++)
		{
			fscanf(fp,"%s",sTemp);
			distance[i][j] = atoi(sTemp);
		} //for (j=0;j<n;j++)
	} //for (i=0;i<n;i++)
}

⌨️ 快捷键说明

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