tsp2problem.cpp

来自「遗传算法vc++语言版源程序,台湾大学编写。」· C++ 代码 · 共 79 行

CPP
79
字号
#include "TSP2Problem.h"
#include "CommonUtility.h"
#include <fstream>

using namespace std;

//#include "GA1DArraySolution.h"

TSP2Problem::TSP2Problem()
{
	m_Road.clear();
	m_Road.push_back(ROAD(0, 1, 5));
	m_Road.push_back(ROAD(0, 2, 5));
	m_Road.push_back(ROAD(1, 2, 5));
	m_Road.push_back(ROAD(1, 3, 5));
	m_Road.push_back(ROAD(1, 4, 6));
	m_Road.push_back(ROAD(2, 3, 7));
	m_Road.push_back(ROAD(2, 5, 5));
	m_Road.push_back(ROAD(3, 4, 2));
	m_Road.push_back(ROAD(3, 6, 6));
	m_Road.push_back(ROAD(4, 6, 6));
	m_Road.push_back(ROAD(3, 7, 7));
	m_Road.push_back(ROAD(5, 7, 6));
	m_Road.push_back(ROAD(6, 7, 3));
	m_Road.push_back(ROAD(2, 7, 10));
	m_problemDim = 8;
}
TSP2Problem::TSP2Problem(const TSP2Problem& src)
{
//	if(src == NULL) return;
	this->m_Road = src.m_Road;
	m_problemDim = src.m_problemDim;
}
double TSP2Problem::GetResult(void* parm)
{
	//GA1DArraySolution *sol = static_cast<GA1DArraySolution*>(parm);
	vector<double>	*pArray = static_cast<vector<double>*>(parm);
	double dist = 0.0;
	double temp;
	for(size_t a=0;a<(*pArray).size()-1;a++)
	{
		int c1 = (*pArray)[a];
		int c2 = (*pArray)[a+1];
		temp = Distance(c1, c2);
		if(temp<0)
		{
			dist = 0;
			for(size_t i=0;i<m_Road.size();i++)
				dist += m_Road[i].dist;
			return dist;
		}
		dist += temp;
	}
	return dist;
}

void TSP2Problem::LogHeader(ostream& os)
{
	os << "Travelling Salesman Problem 2 Configuration:\n";
	os << "Number of Cities:\t" << "8";
	os << "Distance of Cities:\n";
	os << "\ta\tb\tdistance\n";
	for(int i=0;i<(int)m_Road.size();i++)
		os << "\t" << m_Road[i].c1 << "\t" << m_Road[i].c2 << "\t" << m_Road[i].dist << endl;
	os << endl;
}

void TSP2Problem::GetExternalData(void* input)
{
	vector<vector<double > > *tar = (vector<vector<double > > *)input;
	tar->resize(m_problemDim);
	for(size_t i=0;i<tar->size();i++)
	{
		(*tar)[i].resize(m_problemDim);
		for(size_t j=0;j<(*tar)[i].size();j++)
			(*tar)[i][j] = Distance(i, j);
	}
}

⌨️ 快捷键说明

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