亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sacode.cpp

?? 模擬退火算法 模擬退火算法(Simulated Annealing,簡稱SA算法)是模擬加熱熔化的金屬的退火過程
?? CPP
字號:
#include <StdAfx.h>
#include <math.h>
#include <algorithm>
using std::random_shuffle;
using std::swap;

/*********************************************************
	InitialSA()——模擬退火算法的初始化
	1. 根據直角坐標生成城市距離矩陣
	2. 計算初始溫度
*********************************************************/
void InitialSA()
{
	if( FileType == 1 )
	{
		CityNumber = vecCitys.size();
	
		vecCityDistances.clear();
		std::vector<SYCity>::iterator iter_from, iter_to;
		for( iter_from=vecCitys.begin();iter_from!=vecCitys.end();iter_from++ )
		{
			for( iter_to=vecCitys.begin();iter_to!=vecCitys.end();iter_to++ )
			{
				SYCityDistance tmp_citydistance;
				CountCityDistance( *iter_from, *iter_to, tmp_citydistance );

				vecCityDistances.push_back( tmp_citydistance );
			}
		}
	}
	else if( FileType == 2 )
	{
		vecCitys.clear();

		int nRow = -1;
		int ncityindex;
		CString strcityname;
		std::vector<SYCityDistance>::iterator iter_dis;
		for( iter_dis=vecCityDistances.begin();iter_dis!=vecCityDistances.end();iter_dis++ )
		{
			if( nRow < 0 )
				nRow = iter_dis->m_nFromCity;

			if( iter_dis->m_nFromCity == nRow )
			{
				ncityindex = iter_dis->m_nToCity;
				strcityname.Format("城市 %d",ncityindex);

				SYCity tmpCity;
				tmpCity.m_strName = strcityname;
				tmpCity.m_nIndex = ncityindex;
				tmpCity.m_Coordinate.m_fcodx = 0.0;
				tmpCity.m_Coordinate.m_fcody = 0.0;
				vecCitys.push_back( tmpCity );
			}
			else
				break;
		}
		CityNumber = vecCitys.size();
	}	
	
	double fMaxCityDistance = 0.0;
	double fMinCityDistance = 100000.0;
	double fCityDistance = 0.0;
	std::vector<SYCityDistance>::iterator iter_dis;
	for( iter_dis=vecCityDistances.begin();iter_dis!=vecCityDistances.end();iter_dis++ )
	{
		fCityDistance = iter_dis->m_fDistance;

		if( fCityDistance > fMaxCityDistance )
			fMaxCityDistance = fCityDistance;

		if( fCityDistance < fMinCityDistance )
			fMinCityDistance = fCityDistance;
	}

	int rate = 20;
	InitialTemperature = CountInitialTemperatureMaxMin( fMaxCityDistance, fMinCityDistance, rate );
	NowTemperature = InitialTemperature;
	NowExternalIterNumber = 0;
	NowInnerIterNumber = 0;
}

/*********************************************************
	ClearSA()——清空殘留數據
*********************************************************/
void ClearSA()
{
	vecCitys.clear();
	vecCityDistances.clear();
	CityNumber = 0;
	InitialTemperature = 0.0;
	NowTemperature = 0.0;
	NowExternalIterNumber = 0;
	NowInnerIterNumber = 0;
}

/*********************************************************
	CountCityDistance()——計算城市之間的距離
	輸入參數: 1、FromCity			源城市引用
			   2、ToCity			目標城市引用
			   3、CityDistance		城市距離利用,返回值
	返回值:   源城市與目標城市之間的距離,double型
*********************************************************/
double CountCityDistance( SYCity &FromCity, SYCity &ToCity, SYCityDistance &CityDistance )
{
	CityDistance.m_nFromCity = FromCity.m_nIndex;
	CityDistance.m_nToCity = ToCity.m_nIndex;

	CityDistance.m_fDistance = sqrt( (FromCity.m_Coordinate.m_fcodx-ToCity.m_Coordinate.m_fcodx)*(FromCity.m_Coordinate.m_fcodx-ToCity.m_Coordinate.m_fcodx) +
									 (FromCity.m_Coordinate.m_fcody-ToCity.m_Coordinate.m_fcody)*(FromCity.m_Coordinate.m_fcody-ToCity.m_Coordinate.m_fcody) );

	return CityDistance.m_fDistance;

}

/*********************************************************
	CountInitialTemperatureMaxMin()——計算起始溫度
	輸入參數: 1、maxdis	城市之間的最大距離
			   2、mindis	城市之間的最小距離
			   3、rate		比例系數
	返回值:   起始溫度,double型
	計算方法參見《現代優化計算方法》(邢文訓等編著) p117 
*********************************************************/
double CountInitialTemperatureMaxMin( double maxdis, double mindis, int rate )
{
	return( rate*( CityNumber*maxdis - CityNumber*mindis ) );
}

/*********************************************************
	CreateCityRouter()——生成城市行走路徑
	輸入參數: 1、CityRouter	城市行走路徑的vector引用,返回值
	返回值:   空
	注:生成1->2->3->......->n的城市行走順序,作為算法初值
*********************************************************/
void CreateCityRouter( CityRouterDef &CityRouter )
{
	for( int i=1;i<=CityNumber;i++ )
		CityRouter.push_back( i );

//	random_shuffle(CityRouter.begin(), CityRouter.end()); 
}

/*********************************************************
	CreateCityRouter2opt()——從某行走路徑的鄰域中隨機選擇一個新的行走路徑,鄰域映射為2-opt
	輸入參數: 1、preCityRouter		原先行走路徑的vector引用
			   2、CityRouter		新的行走路徑的vector引用,返回值
	返回值:   空
*********************************************************/
void CreateCityRouter2opt( CityRouterDef &preCityRouter, CityRouterDef &CityRouter )
{
	int swapA, swapB;
	CityRouter = preCityRouter;

	while(1)
	{
		swapA = (rand()%CityNumber)-1;
		if( swapA >= 0 )
			break;
	}

	while(1)
	{
		swapB = (rand()%CityNumber)-1;
		if( swapA != swapB && swapB >= 0 )
		{
			int tmp = CityRouter[swapA];
			CityRouter[swapA] = CityRouter[swapB];
			CityRouter[swapB] = tmp;
			break;
		}
	}
}

/*********************************************************
	CountTotalDistance()——根據給定路徑計算該路徑對應的總路程
	輸入參數: 1、CityRouter		給定行走路徑的vector引用
	返回值:   總路程,double型
*********************************************************/
double CountTotalDistance( CityRouterDef &CityRouter )
{
	if( CityRouter.size() != CityNumber )
		return 0.0;

	double totaldis = 0.0;
	for( int i=1;i<CityNumber;i++ )
	{
		totaldis += FindCityDistance( CityRouter[i-1], CityRouter[i] );
	}
	totaldis += FindCityDistance( CityRouter[CityNumber-1], CityRouter[0] );
	return totaldis;
}

/*********************************************************
	FindCityDistance()——根據兩城市的索引獲得兩城市之間的路程
	輸入參數: 1、FromCityIndex		源城市的索引
			   2、ToCityIndex		目標城市的索引
	返回值:   兩城市之間的路程,double型
*********************************************************/
double FindCityDistance( int FromCityIndex, int ToCityIndex )
{
	int nIndex = (FromCityIndex-1)*CityNumber+(ToCityIndex-1);

	std::vector<SYCityDistance>::iterator iter_citydis;
	iter_citydis = vecCityDistances.begin()+nIndex;

	if( iter_citydis->m_nFromCity == FromCityIndex &&
		iter_citydis->m_nToCity == ToCityIndex )
		return( iter_citydis->m_fDistance );
	else
		return( 0.0 );
}

/*********************************************************
	CountDownTemperature()——計算外層循環的下降后的溫度
	輸入參數: 1、nowtemp		當前溫度
			   2、DownMode		下降方式,保留
	返回值:   下降后的溫度,double型
	注:		溫度下降方式 T(k+1) = K*T(k),K=0.95溫度下降方式 T(k+1) = K*T(k),K=0.95
*********************************************************/
double CountDownTemperature( double nowtemp, int DownMode )
{
	return( 0.95*nowtemp );
}

/*********************************************************
	JudgeOverInnerLoop()——判斷是否結束某一溫度下的內層循環
	輸入參數: 1、JudgeMode		判斷方式,保留
	返回值:   是否結束標志位,BOOL型
	注:		某一溫度下的循環次數是固定的,即城市個數的三次方
*********************************************************/
BOOL JudgeOverInnerLoop( int JudgeMode )
{
	if( NowInnerIterNumber >= CityNumber*CityNumber*CityNumber )  //*CityNumber)
		return TRUE;
	else
		return FALSE;
}

/*********************************************************
	JudgeOverExternalLoop()——判斷是否結束模擬退火算法
	輸入參數: 1、JudgeMode		判斷方式,保留
	返回值:   是否結束標志位,BOOL型
	注:		使用“零度法”的判斷方式,T(k)<= 0.01,結束計算
*********************************************************/
BOOL JudgeOverExternalLoop( int JudgeMode )
{
	if( NowTemperature <= 0.01 )		//InitialTemperature*0.001 )
		return TRUE;
	else
		return FALSE;
}

/*********************************************************
	FormRouterString()——根據行走路徑生成路徑字符串,供顯示使用
	輸入參數: 1、CityRouter		給定行走路徑的引用
	返回值:   行走路徑的顯示字符串
*********************************************************/
CString FormRouterString( SYRouter &CityRouter )
{
	CString strTemp, strValue;

	strTemp = "路徑 ";
	
	std::vector<int>::iterator iter_cityindex;
	for( iter_cityindex=CityRouter.m_CityRouter.begin();
		 iter_cityindex!=CityRouter.m_CityRouter.end();
		 iter_cityindex++ )
	{
		strValue.Format("%d",*iter_cityindex);
		strTemp += strValue;

		if( iter_cityindex+1 == CityRouter.m_CityRouter.end() )
			strTemp += " ";
		else
			strTemp +=" ";
	}

	strTemp += "  ";
	strTemp += "總路程 ";
	strValue.Format("%10.4f",CityRouter.m_fTotalDistance);
	strTemp += strValue;
	return strTemp;
}

/*********************************************************
	GetCoordinatebyCityIndex()——根據城市索引獲取城市坐標
	輸入參數: 1、cityindex				城市索引
			   2、coordx				城市X坐標
			   3、coordy				城市Y坐標
	返回值:  空 
*********************************************************/
void GetCoordinatebyCityIndex( int cityindex, double &coordx, double &coordy )
{
	coordx = 0.0;
	coordy = 0.0;

	if( cityindex > 0 && cityindex <= CityNumber )
	{
		std::vector<SYCity>::iterator iter_city;
		iter_city = vecCitys.begin()+cityindex-1;

		if( iter_city->m_nIndex == cityindex )
		{
			coordx = iter_city->m_Coordinate.m_fcodx;
			coordy = iter_city->m_Coordinate.m_fcody;
		}
	}
}

/*********************************************************
	GetRouterFileString()——獲得指定路徑的城市坐標字符串
	輸入參數:	1、CityRouter			城市路徑索引 
				2、strTemp				城市坐標字符串
	返回值:  空 
*********************************************************/
void GetRouterFileString( SYRouter &CityRouter, CString &strTemp )
{
	strTemp.Empty();

	CString strValue;
	std::vector<int>::iterator iter_city;
	double coordx, coordy;
	for( iter_city=CityRouter.m_CityRouter.begin();
		 iter_city!=CityRouter.m_CityRouter.end();
		 iter_city++ )
	{
		GetCoordinatebyCityIndex( *iter_city, coordx, coordy );
		strValue.Format("%.4f %.4f\n",coordx, coordy );
		strTemp += strValue;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品一区二区| 国产一区二区视频在线| 久久久国产精品麻豆| 日本久久一区二区三区| 久久国产精品99精品国产 | 成人va在线观看| 日本不卡一二三| 亚洲乱码国产乱码精品精98午夜 | 亚洲人成在线播放网站岛国| 日韩精品中文字幕在线不卡尤物| 99国产一区二区三精品乱码| 日韩**一区毛片| 一区二区三区精品久久久| 国产婷婷色一区二区三区| 91精品国产手机| 欧美三级三级三级| 91麻豆自制传媒国产之光| 国产a级毛片一区| 激情成人午夜视频| 蜜桃一区二区三区在线| 亚洲成人你懂的| 一区二区三区自拍| 日韩美女精品在线| 国产精品无人区| 亚洲精品一区二区三区香蕉| 91精品国产综合久久香蕉的特点| 欧美性猛交xxxx乱大交退制版 | 色成年激情久久综合| 不卡欧美aaaaa| 成人性生交大片免费看在线播放 | 蜜臀久久99精品久久久久久9| 亚洲一区二区在线观看视频| 亚洲欧美电影院| 中文字幕一区二区三区色视频| 国产午夜精品在线观看| 精品对白一区国产伦| 三级在线观看一区二区| 悠悠色在线精品| 亚洲欧美成人一区二区三区| 亚洲美女屁股眼交3| 亚洲欧美另类图片小说| 亚洲另类一区二区| 一区二区三区国产精品| 一区二区成人在线观看| 亚洲第一二三四区| 午夜不卡av在线| 日韩电影免费在线| 秋霞国产午夜精品免费视频| 精品中文字幕一区二区小辣椒| 久久国产乱子精品免费女| 国产精品白丝jk白祙喷水网站| 国产精品18久久久久久久久| www.日韩av| 色国产综合视频| 91 com成人网| 精品第一国产综合精品aⅴ| 久久久噜噜噜久久中文字幕色伊伊| 久久综合视频网| 久久久www免费人成精品| 欧美激情在线一区二区三区| 亚洲人亚洲人成电影网站色| 亚洲综合在线五月| 亚洲成a人在线观看| 裸体在线国模精品偷拍| 高清在线不卡av| 99久久伊人网影院| 欧美日韩的一区二区| 精品国产麻豆免费人成网站| 国产清纯美女被跳蛋高潮一区二区久久w| 国产亚洲欧美日韩日本| 最新国产の精品合集bt伙计| 午夜精品免费在线观看| 国产制服丝袜一区| 日本韩国精品在线| 日韩丝袜美女视频| 国产精品欧美久久久久一区二区| 亚洲电影欧美电影有声小说| 精品亚洲国内自在自线福利| av在线不卡免费看| 欧美一区二区三区视频免费| 久久久国产一区二区三区四区小说| 中文字幕字幕中文在线中不卡视频| 亚洲图片欧美综合| 国产精品自拍一区| 欧美亚洲禁片免费| 国产欧美日韩另类视频免费观看| 亚洲综合色自拍一区| 国产精品99久久久久久有的能看 | 国产一区二区三区四区五区入口| 成人app网站| 欧美一二三四区在线| 亚洲色图19p| 黑人巨大精品欧美一区| 在线影院国内精品| 国产区在线观看成人精品| 全国精品久久少妇| 色婷婷av久久久久久久| 2022国产精品视频| 亚洲v中文字幕| 成人av网在线| 精品av综合导航| 午夜精品一区在线观看| av不卡免费电影| 欧美精品一区二区三区蜜臀| 亚洲黄色片在线观看| 国产成人免费av在线| 欧美一区二区视频在线观看2020 | 国产精品超碰97尤物18| 麻豆成人久久精品二区三区小说| 色婷婷综合久久久久中文一区二区| 精品动漫一区二区三区在线观看| 亚洲va欧美va天堂v国产综合| av电影天堂一区二区在线| 精品毛片乱码1区2区3区| 亚洲午夜激情av| 成人av网址在线| 国产视频一区二区三区在线观看| 日韩**一区毛片| 欧美日韩精品三区| 亚洲自拍偷拍九九九| 色综合天天综合网国产成人综合天| 国产偷国产偷亚洲高清人白洁| 麻豆视频一区二区| 欧美丰满美乳xxx高潮www| 亚洲一区二区在线观看视频| 色菇凉天天综合网| 亚洲最大成人综合| 欧美在线不卡视频| 洋洋av久久久久久久一区| 91碰在线视频| 亚洲日穴在线视频| 91在线porny国产在线看| 综合分类小说区另类春色亚洲小说欧美 | 美女mm1313爽爽久久久蜜臀| 欧美精品久久天天躁| 亚洲国产三级在线| 欧美日韩一级黄| 天天综合天天综合色| 欧美日本视频在线| 日韩高清电影一区| 日韩视频一区在线观看| 久久国产精品99久久久久久老狼| 日韩欧美中文字幕一区| 久久精品国产色蜜蜜麻豆| 久久综合九色综合欧美就去吻| 另类综合日韩欧美亚洲| 精品国产百合女同互慰| 国产精品18久久久久| 中文字幕第一区第二区| www.爱久久.com| 亚洲综合一区二区| 欧美肥胖老妇做爰| 裸体在线国模精品偷拍| 国产日产精品1区| 99视频在线精品| 亚洲一区二区三区四区五区中文 | 国产精品一区不卡| 中文字幕一区视频| 欧美视频在线播放| 日韩av中文字幕一区二区| 久久久久久久久久久电影| 成人高清视频在线观看| 亚洲女人的天堂| 51精品视频一区二区三区| 狠狠色综合色综合网络| 亚洲丝袜美腿综合| 欧美精选午夜久久久乱码6080| 男女男精品视频| 国产精品久久网站| 欧美喷潮久久久xxxxx| 韩国成人福利片在线播放| 亚洲色大成网站www久久九九| 在线播放/欧美激情| 国产乱子轮精品视频| 亚洲人成网站影音先锋播放| 91精品国产综合久久久蜜臀图片| 国产精品资源站在线| 亚洲美女淫视频| 精品成人免费观看| 欧美在线视频不卡| 国内精品久久久久影院薰衣草| 最新欧美精品一区二区三区| 911精品国产一区二区在线| 成人黄色网址在线观看| 免费成人你懂的| 亚洲欧美日韩精品久久久久| 欧美成人一区二区三区| 91美女片黄在线| 国模冰冰炮一区二区| 亚洲午夜免费福利视频| 久久久国际精品| 欧美精品一二三四| 99久久久国产精品| 精品亚洲aⅴ乱码一区二区三区| 亚洲色图另类专区| 久久久久久久久免费| 在线成人高清不卡| 99国产精品国产精品久久| 精品在线免费观看| 午夜精品久久久久久|