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

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

?? anttsp.cpp

?? 蟻群算法求解TSP問題. 編譯環境:VC2005
?? CPP
字號:
#include <math.h>
#include <stdlib.h>
#include <fstream>
#include <time.h>
#include <stdio.h>
using namespace std;

const int iAntCount = 34;//螞蟻數量
const int iCityCount = 51;//城市數量
const int iItCount = 2000;//最大跌代次數
const double Q = 100;//每只螞蟻周游一遍留下的信息素總量
const double alpha = 1;//信息素濃度所起作業的程序
const double beta = 5;//期望值所起作用的程度
double rou = 0.5;//揮發系數
int besttour[iCityCount];//最優路徑列表
int count=0;//記錄連續多少代沒有產生更優的解
double  rnd(double low,double uper)//獲得隨機數, 范圍為 [low, uper]
{
	double p = (rand()/(double)RAND_MAX)*((uper)-(low))+(low);
	return p;
};

int rnd(int uper)	//返回[0,uper]之間的整數
{
	return (rand()%uper);
};
class GInfo {//tsp地圖信息,包含了信息素,城市距離,和信息素變化矩陣
public: 
	double m_dDeltTrial[iCityCount][iCityCount]; //信息素變化矩陣
	double m_dTrial[iCityCount][iCityCount]; //信息素
	double distance[iCityCount][iCityCount]; //城市距離
};
GInfo Map;	//地圖
class ant {	//螞蟻類
private:
	int ChooseNextCity();//選擇城市
	int m_iCityCount;	//已走過的城市個數
	int AllowedCity[iCityCount];//沒有走過的城市
public:
	void addcity(int city); //把城市放到已走過的路數組中
	int tabu[iCityCount];/*記錄螞蟻行走順序*/
	void Reset();  //重置
	void UpdateLength(); //更新路徑長度
	double m_dLength;	//路徑長度
	void mov();			//直到下一步
	ant();
	double AntProduct( int from, int to );	//螞蟻在from和to城市之間的路線上撒下的信息素
};
void ant::Reset()
{
	int i;
	m_dLength=0;

	for(i=0; i<iCityCount;i++) {
		AllowedCity[i]=1;
	}

	i=tabu[iCityCount-1];  //從終點城市返回
	m_iCityCount=0;
	addcity(i);
}
ant::ant()
{
	int i;
	m_dLength=0;
	m_iCityCount=0;

	for(i=0;i<iCityCount;i++) {
		AllowedCity[i]=1;/*一開始每個城市都可訪問*/
	}
}
void ant::addcity(int city)
{
	tabu[m_iCityCount]=city; //記錄city為走過的城市
	m_iCityCount++;
	AllowedCity[city]=0;
}
double ant::AntProduct(int from, int to )
{
	double p;
	p=pow((1.0/Map.distance[from][to]),beta)*pow((Map.m_dTrial[from][to]),alpha);	//轉移期望
	if( p<=0)p=rnd(0,1)*pow( (1.0 / Map.distance[from][to]), beta);  //如果沒有其他螞蟻走過,就按距離選擇
	return p;
}
int ant::ChooseNextCity()
{
	int i,to=-1;	//to為下一個要到的城市
	double hormone=0;	//信息總量
	int curCity=tabu[m_iCityCount-1];	//當前城市

	if(count<6)	//如果沒有產生最優解的代數不超過6,則斷續按信息素的濃度選擇城市
	{
		for (i=0;i<iCityCount;i++) {
			if((AllowedCity[i]==1)) {
				hormone += AntProduct(curCity,i);//計算信息總量
			}
		}

		if(hormone==0.0)
		{
			to=rnd(iCityCount);	//如果所有的城市都走完一遍,則隨意先一個城市
		}
		else
		{
			for(to=0;to<iCityCount;to++)
			{
				double p;
				if(AllowedCity[to]==1)
				{
					p=AntProduct(curCity,to)/hormone;
					if(rnd(0,1)<p)	//按轉移概率大小選擇下一個城市,同時也避免了局部最優解
						break;
				}
			}
		}
		if(to==iCityCount)
		{
			hormone=-1;
			for(i=0;i<iCityCount;i++)
				if(AllowedCity[i]==1)
				{
					if (hormone<AntProduct(curCity,i)) {
						hormone=AntProduct(curCity,i);	//如果上一步選擇失敗,則選擇具有最大信息量的城市
						to=i;
					}
				}
		}
	}
	
	if(count>=6)	//當連續6代都沒有產生更短的路徑,則
	{
		for ( i=0;i<iCityCount;i++) {
			if((AllowedCity[i]==1)) {
				to=i;
				count=0;
				rou=0.5;
				if(rnd(0.0,1.0)>0.5)	//隨機選擇一個還沒訪問的城市
				{
					break;
				}
			}
		}
	}
	return to;
}
void ant::UpdateLength()
{
	// Update the length of tour
	int i;
	for(i=0;i<iCityCount-1;i++) {
		m_dLength+=Map.distance[tabu[i]][tabu[i+1]];	//計算路徑長度
	}
	m_dLength+=Map.distance[tabu[iCityCount-1]][tabu[0]]; //加上第一個與最后一個城市之間的距離
}
void ant::mov()
{
	addcity(ChooseNextCity());
}
class AntProj
{
public:
	void UpdateTrial();	//更新信息素
	double m_dLength;	//記錄最佳路徑長度
	void initmap();		//初始化地圖
	ant ants[iAntCount];//蟻群
	void GetAnt();		//初始蟻群
	void StartSearch();	//搜索路徑
	AntProj();
	struct city {
		int num;//城市號
		int x; //城市坐標
		int y;
	}cc[iCityCount];
};
void AntProj::UpdateTrial()
{
	int i;
	int j;
	int from,to;
	for(i=0;i<iAntCount;i++) {
		for (j=0;j<iCityCount-1;j++) { 
			from=ants[i].tabu[j];
			to=ants[i].tabu[j+1];
			Map.m_dDeltTrial[from][to]+=Q/ants[i].m_dLength ;   //增加的信息量
			Map.m_dDeltTrial[to][from]=Map.m_dDeltTrial[from][to]; //兩個方向的信息量相等
		}
		from=ants[i].tabu[iCityCount-1];
		to=ants[i].tabu[0];
		Map.m_dDeltTrial[from][to]+=Q/ants[i].m_dLength ;	//加上起點和終點之間的信息量
		Map.m_dDeltTrial[to][from]=Map.m_dDeltTrial[from][to]; //兩個方向的信息量相等
	}

	for (i=0;i<iCityCount;i++) {
		for (j=0;j<iCityCount;j++) {
			Map.m_dTrial[i][j]=(rou*Map.m_dTrial[i][j]+Map.m_dDeltTrial[i][j] );  //計算新的信息量
			Map.m_dDeltTrial[i][j]=0;
		}
	}
}
void AntProj::initmap()
{
	int i;
	int j;

	for(i=0;i<iCityCount;i++) {
		for (j=0;j<iCityCount;j++) {
			Map.m_dTrial[i][j] = 1; //信息素初始化為1,信息素變化量初始化為0
			Map.m_dDeltTrial[i][j] = 0;
		}
	}
}
AntProj::AntProj()/*intialize pheromone, delta-pheromone, distance */
{
	initmap();	//初始化地圖
	m_dLength=10e9;

	ifstream in("eil51.tsp");/*打開測試文件 */

	for (int i=0;i<iCityCount;i++) {
		in>>cc[i].num>>cc[i].x>>cc[i].y; //調入城市數據
		besttour[i]=0;
	}
	int j;

	for(int i=0;i<iCityCount;i++) {
		for (j=0;j<iCityCount;j++) {//計算兩城市之間的距離
			Map.distance[i][j]=sqrt(pow((double)(cc[i].x-cc[j].x),2)+pow((double)(cc[i].y-cc[j].y),2));
		}
	}
}
void AntProj::GetAnt()
{
	int i=0;
	int city;
	/* 
	本句的作用就是以系統時鐘產生的隨機數作為srand的一個種子
	*/
	srand( (unsigned)time( NULL ));

	for ( i=0; i<iAntCount; i++) {/* 把一只螞蟻隨機地放在一個城市上 */
		city = rnd(iCityCount);
		ants[i].addcity(city);
	}
}
void AntProj::StartSearch()
{
	int max=0;//當前的代數
	int i;
	int j;
	double temp;

	FILE * outresult=fopen("result.txt","w+");
	fprintf(outresult," 代數   最短路徑\n");
	while (max<iItCount) {  
		for(i=0;i<iCityCount-1;i++)  { //總共前進iCityCount-1步遍歷完所有城市
			for (j=0;j<iAntCount;j++) {//所有的螞蟻都前進一步
				ants[j].mov(); 
			}
		}

		for(j=0;j<iAntCount;j++) {
			ants[j].UpdateLength ();	//更新螞蟻的路徑長度
		}
		int t,minant;

		temp=ants[0].m_dLength; //臨時的最優路徑長度
		minant=0;

		for(j=1;j<iAntCount;j++) {
			if (temp>ants[j].m_dLength) {
				temp=ants[j].m_dLength;
				minant=j;				//找出周游路徑最短的螞蟻
			}
		}
		if(temp<m_dLength){
			count=0;	
			rou+=0.1;	//如果產生了更短的路徑,則減慢信息素的揮發,獲得更多的啟發信息
			if(rou>=0.9)
				rou=0.9;
			m_dLength=temp;	//記錄更優的路徑長度
			for ( t=0;t<iCityCount;t++) {
				besttour[t]=ants[minant].tabu[t];//記錄周游路徑
			}
		}
		else
			count++;
		if(count>=2) //如果連續兩代都沒有產生更好的路徑,則加快信息素的揮發,減少信息素的作用
		{
			rou-=0.1;
			if(rou<=0.1)
				rou=0.1;
		}
		printf("%d : %f\n",max,m_dLength);
		fprintf(outresult,"  %d  :  %f\n",max,m_dLength);
		UpdateTrial(); //更新信息素
		for(j=0;j<iAntCount;j++) {
			ants[j].Reset();	//重置螞蟻的數據
		}
		max++;
	}

	printf("The shortest toure is : %f\n",m_dLength);	//輸出當代最小路徑值
	fprintf(outresult,"最短周游路徑為:%f\n",m_dLength);
	fprintf(outresult,"最優路徑為:\n");
	for ( int t=0;t<iCityCount;t++) {
		printf(" %d ",cc[besttour[t]]);	//輸出當代最代路徑
		fprintf(outresult," %d ",cc[besttour[t]]);
	}
	fclose(outresult);
}
int main()
{
	AntProj TSP; //聲明一個測試對象
	TSP.GetAnt();//初始化蟻群
	TSP.StartSearch();//尋找最短路徑
	printf("\n");

	char c;
	scanf("%c",&c);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情小说网站| 久久久久久久免费视频了| 91美女福利视频| 99久久亚洲一区二区三区青草| 国产91精品一区二区| 国产成人自拍在线| 成人性生交大片免费看中文 | 亚洲人成伊人成综合网小说| 日本一区二区三级电影在线观看| 国产视频在线观看一区二区三区| 久久综合久色欧美综合狠狠| 久久久影视传媒| 国产视频一区在线播放| 欧美激情一区二区在线| 亚洲日本电影在线| 亚洲成人激情综合网| 日韩精品91亚洲二区在线观看 | eeuss鲁一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 91在线云播放| 欧美日韩亚洲国产综合| 欧美一卡二卡在线| 国产调教视频一区| 亚洲三级在线观看| 日韩和欧美一区二区三区| 久久精品国产精品亚洲红杏| 国产精品亚洲成人| 91久久线看在观草草青青| 欧美三级日韩在线| 欧美精品一区二区三| 中文字幕第一区| 亚洲一二三四久久| 免费精品视频在线| 成人做爰69片免费看网站| 色综合天天做天天爱| 欧美日韩二区三区| 久久精品欧美日韩精品 | 丁香网亚洲国际| 欧洲精品一区二区| 精品日韩欧美一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲愉拍自拍另类高清精品| 久久超碰97人人做人人爱| 成人黄页在线观看| 91超碰这里只有精品国产| 欧美激情在线看| 五月天网站亚洲| 成人av在线看| 91麻豆精品91久久久久久清纯 | 久久精品国产免费看久久精品| 成人国产视频在线观看| 8v天堂国产在线一区二区| 国产精品久久三| 毛片av中文字幕一区二区| av亚洲精华国产精华| 日韩精品一区二区三区在线播放| 亚洲欧洲av色图| 精品综合久久久久久8888| www.亚洲色图.com| 日韩欧美不卡一区| 一区二区三区在线视频播放 | 色诱亚洲精品久久久久久| 日韩欧美在线影院| 一区二区三区中文在线观看| 国产麻豆精品视频| 欧美狂野另类xxxxoooo| 日韩美女久久久| 国产一区二区三区高清播放| 欧美二区在线观看| 一区二区三区在线免费播放 | 欧美一级理论片| 一区二区在线观看免费| 成人综合婷婷国产精品久久免费| 日韩一区二区精品葵司在线| 亚洲一区二区综合| 不卡的电影网站| 久久久噜噜噜久久人人看| 日本aⅴ精品一区二区三区| 91极品美女在线| 国产精品久久午夜| 国产91综合一区在线观看| 精品久久久久一区| 日本不卡视频在线观看| 欧美性大战久久| 亚洲另类春色国产| 99久久伊人网影院| 欧美国产激情一区二区三区蜜月| 另类小说图片综合网| 欧美精品黑人性xxxx| 亚洲精品免费一二三区| av一区二区久久| 国产精品电影一区二区| 波多野结衣一区二区三区 | 国产精品传媒入口麻豆| 国产jizzjizz一区二区| 国产午夜精品一区二区| 韩国女主播一区| 久久婷婷成人综合色| 精品中文字幕一区二区小辣椒| 日韩欧美国产wwwww| 国内精品久久久久影院色| 精品久久久久久久久久久久久久久| 免费在线看一区| 精品日韩一区二区三区 | 欧美一区二区三区视频在线| 午夜久久久久久电影| 欧美日韩亚洲另类| 奇米精品一区二区三区在线观看| 欧美一区三区四区| 麻豆精品新av中文字幕| 精品国产免费人成电影在线观看四季| 全国精品久久少妇| 亚洲精品在线三区| 国产精品一区二区久激情瑜伽| 久久精品日产第一区二区三区高清版| 国产精品一区二区在线看| 中文字幕不卡在线播放| 91小宝寻花一区二区三区| 尤物在线观看一区| 欧美群妇大交群中文字幕| 午夜在线成人av| 欧美zozozo| 国产风韵犹存在线视精品| 亚洲欧美综合另类在线卡通| 日本乱人伦aⅴ精品| 日韩精品电影在线| 久久丝袜美腿综合| 一本久道久久综合中文字幕| 性做久久久久久| 久久婷婷国产综合精品青草| 99精品热视频| 五月激情丁香一区二区三区| 久久网站热最新地址| 91麻豆免费看| 日本欧美在线观看| 久久精品一区二区三区av| 色综合天天综合| 免费在线视频一区| 中文字幕一区二区三中文字幕| 欧美做爰猛烈大尺度电影无法无天| 日本成人在线看| 国产精品视频yy9299一区| 欧美三级中文字幕| 国产激情精品久久久第一区二区 | 亚洲午夜激情av| 久久品道一品道久久精品| 91麻豆123| 狠狠色狠狠色合久久伊人| 中文字幕亚洲视频| 日韩丝袜情趣美女图片| 成人激情视频网站| 天天综合日日夜夜精品| 国产日产亚洲精品系列| 欧美老肥妇做.爰bbww视频| 国产成人8x视频一区二区| 天天做天天摸天天爽国产一区| 国产日韩欧美一区二区三区乱码 | 国产精品婷婷午夜在线观看| 欧美日韩免费观看一区二区三区 | 国内精品久久久久影院色| 亚洲黄色在线视频| 国产校园另类小说区| 欧美吻胸吃奶大尺度电影| 成人一区二区在线观看| 日本一区中文字幕| 樱花影视一区二区| 中文字幕二三区不卡| 日韩欧美一卡二卡| 在线视频你懂得一区| 懂色av噜噜一区二区三区av| 日本午夜一本久久久综合| 一区二区三区色| 国产精品视频一二| 亚洲精品在线网站| 欧美一区二区三区人| 在线免费精品视频| 欧美国产精品久久| 欧美视频一区二区三区四区| 蜜桃av一区二区| 欧美国产日韩在线观看| 日韩精品一区二区三区视频播放 | 欧美日韩激情在线| 91精品国产91久久综合桃花| 91麻豆福利精品推荐| 国产高清一区日本| 日本成人中文字幕在线视频 | 成人小视频在线| 极品瑜伽女神91| 青青草伊人久久| 午夜亚洲福利老司机| 自拍偷拍国产精品| 国产精品国产三级国产aⅴ入口| 久久久久久久综合色一本| 日韩欧美亚洲国产精品字幕久久久| 欧美亚洲综合一区| 91色婷婷久久久久合中文| 99免费精品在线观看| youjizz国产精品| 成人av在线网| 91视视频在线观看入口直接观看www |