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

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

?? ant_system_alogrithm.cpp

?? 用蟻群算法求解TSP問題,最大的特點是有詳細的中文注釋
?? CPP
字號:
// Ant_System_Alogrithm.cpp: implementation of the CAnt_System_Alogrithm class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ASA.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
#include "Ant_System_Alogrithm.h"
#include "GamblingPad.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CAnt_System_Alogrithm::CAnt_System_Alogrithm()
{

}

//功能:初始化環境和蟻群信息
void CAnt_System_Alogrithm::init()
{
   FILE  *fp;
   if((fp=fopen("el51.txt","r"))==NULL)
   {
	::AfxMessageBox("cannot open kroa100 file");
    exit(0);
   }
   int i,j,x,y;
   for(j=0; j<CITY_NUM; j++)
   {
      fscanf(fp,"%d%d%d",&i,&x,&y);
      citypos[i-1].x=x;
      citypos[i-1].y=y;
   }
   fclose(fp);
    
   //初始化城市距離dis_city[i][j],η[i][j],г[i][j]
   for(i=0; i<CITY_NUM-1; i++)
   {
	  dis_city[i][i] = 0;
	  yita[i][i]=1;
	  tao[i][i]=C+0.5;
      for(j=i+1; j<CITY_NUM; j++)
	  { 
	    	dis_city[i][j]  =(int)(  sqrt(    pow(citypos[i].x-citypos[j].x,2 ) 
				                             +pow(citypos[i].y-citypos[j].y, 2)  ) 	+0.5 
								   );
	        dis_city[j][i]  =dis_city[i][j];
			yita[i][j]=yita[j][i]=1.0/dis_city[i][j];
			tao [i][j]=tao [j][i]=C+0.5;
	  }
   }
   
   //初始化每只螞蟻信息
   ::srand( (unsigned)time( NULL ) );
   for (i=0; i<ANT_NUM; i++)
   {
	   Ant[i].len=0;      //當前累積長度為0
	   Ant[i].tailpos=0;  //路徑末尾指示器為0
	   Ant[i].curpos = rand()%CITY_NUM;   //當前位置隨機設定
	   //路徑信息為空,所有頂點都未訪問
	   for (j=0; j<CITY_NUM+1; j++)
	   {
		   Ant[i].path[j]=-1;
		   Ant[i].flag[j]=FALSE;
	   }
	   //將當前位置加入路徑信息
	   Ant[i].path[Ant[i].tailpos++]=Ant[i].curpos;
	   Ant[i].flag[Ant[i].curpos]=TRUE;
   }
   	bestresult.len=999999; //初始化最優解長度
}

//功能:執行蟻群算法
void CAnt_System_Alogrithm::run()
{
	int i,k;
	int nc;
	int minlen=10000000;
	int    NOofbestAnt =0;

	//反復執行NCMAX次訓練
	for (nc=0; nc<NCMAX+50; nc++)
	{
		//每只螞蟻都遍歷城市一遍
		for (k=0; k<ANT_NUM; k++) 
		{
     		findPath(k);
			if (Ant[k].len<minlen)
			{
				minlen=Ant[k].len;
                NOofbestAnt=k;
			}
		}

		//與最優解比較,更新最優解
		if (Ant[NOofbestAnt].len<bestresult.len) bestresult=Ant[NOofbestAnt];

		//更新信息素
        updateTao();

		//初始化每只螞蟻的信息,準備下一次循環
		for (k=0; k<ANT_NUM; k++)
		{
	        Ant[k].len=0;               //當前累積長度為0
	        Ant[k].tailpos=0;           //路徑末尾指示器為0
		    //Ant[k].curpos = rand()%CITY_NUM;   //當前位置隨機設定
			for (i=0; i<CITY_NUM; i++)  //訪問標志清空
				Ant[k].flag[i]=FALSE;
			
			//將當前位置加入路徑信息
			Ant[k].path[Ant[k].tailpos++]=Ant[k].curpos;
	        Ant[k].flag[Ant[k].curpos]=TRUE;
		}

	}//end of for (nc=0; nc<NCMAX; nc++)
}


void CAnt_System_Alogrithm::updateTao()
{
	int i,j,k;
	double temp;
	double tempdeltatao[ANT_NUM][CITY_NUM][CITY_NUM];
	double deltatao[CITY_NUM][CITY_NUM];
	//初始化tempdeltatao[k][i][j]
	for (k=0; k<ANT_NUM; k++)
		for (i=0; i<CITY_NUM; i++)
			for (j=0; j<CITY_NUM; j++)
				tempdeltatao[k][i][j]=0;

	//初始化deltatao[i][j]
	for (i=0; i<CITY_NUM; i++)
		for (j=0; j<CITY_NUM; j++)
			deltatao[i][j]=0;

	//計算tempdeltatao[k][i][j]
	for (k=0; k<ANT_NUM; k++)
	{
		for (int cnt=0; cnt<Ant[k].tailpos; cnt++)
		{
			temp=tempdeltatao[k][ Ant[k].path[cnt] ][ Ant[k].path[cnt+1] ]=Q/Ant[k].len;
		    tempdeltatao[k][ Ant[k].path[cnt+1] ][ Ant[k].path[cnt] ]=temp;
		}		
	}

	//計算delta г[i][j]
	for (i=0; i<CITY_NUM; i++)
		for (j=0; j<CITY_NUM; j++)
			for (k=0; k<ANT_NUM; k++)
				deltatao[i][j]+=tempdeltatao[k][i][j];

	//更新г[i][j]
	for (i=0; i<CITY_NUM; i++)
		for (j=0; j<CITY_NUM; j++)
			tao[i][j]=ROU*tao[i][j]+(1-ROU)*deltatao[i][j];
}

//功能:對第k只螞蟻所得路徑進行二次交叉
void CAnt_System_Alogrithm::intercross(int k)
{
	int i=1;
	int j=1;
	int temp;
	//隨機生成位置i,j
	while(TRUE)
	{
		i=rand()%(CITY_NUM-2)+1;
	    j=rand()%(CITY_NUM-2)+1;
		if (i>j)
		{
			temp=i;i=j;j=temp;
		}
		if (i+2<=j) break;
	}

    int formerlen,latterlen;
	formerlen = dis_city[Ant[k].path[i-1]][Ant[k].path[i]]+dis_city[Ant[k].path[i]][Ant[k].path[i+1]]
		       +dis_city[Ant[k].path[j-1]][Ant[k].path[j]]+dis_city[Ant[k].path[j]][Ant[k].path[j+1]];

	latterlen = dis_city[Ant[k].path[i-1]][Ant[k].path[j]]+dis_city[Ant[k].path[j]][Ant[k].path[i+1]]
		       +dis_city[Ant[k].path[j-1]][Ant[k].path[i]]+dis_city[Ant[k].path[i]][Ant[k].path[j+1]];
	if (latterlen<formerlen)
	{
		Ant[k].len=Ant[k].len-formerlen+latterlen;
		temp=Ant[k].path[i];
		Ant[k].path[i]=Ant[k].path[j];
		Ant[k].path[j]=temp;
	}
}

//功能:第i只螞蟻遍歷CITY_NUM個城市得到一條路徑
void CAnt_System_Alogrithm::findPath(int i)
{
	GamblingPad gmbpad;//將轉移概率放入賭盤
	int j;   //記錄下一個城市的序號
	for (int cnt=0; cnt<CITY_NUM-1; cnt++)//循環CITY_NUM-1次
	{
        getTransferProbability(i,gmbpad);	
		j = gmbpad.getCity();   //用賭盤法計算下一個城市
		//更新螞蟻路徑信息
	    Ant[i].flag[j]  =TRUE;                          //標記為已訪問過的城市
		Ant[i].len     += dis_city[Ant[i].curpos][j];   //累積走過的路徑長度
		Ant[i].curpos   =j;                             //當前位置移到j城市
		Ant[i].path[Ant[i].tailpos++]=j;                //將城市序號j納入螞蟻路徑
		gmbpad.citycnt=0;
		gmbpad.type=gmbpad.YUANSHIPRO;
	}

	//螞蟻的最后一步是回到原點
	Ant[i].path[Ant[i].tailpos] = Ant[i].path[0];
	Ant[i].len                 += dis_city[Ant[i].curpos][Ant[i].path[0]];
	Ant[i].curpos                  =Ant[i].path[0];

	//對所得路徑進行二次交叉
    intercross(i);
     
}

//功能:計算第i只螞蟻從當前位置到其余未訪問節點的轉移概率,結果放入賭盤
void CAnt_System_Alogrithm::getTransferProbability(int i,GamblingPad& gmbpad)
{
	int j;
	double total_tao_yita=0;
	double tao_yita[CITY_NUM]; 
	for (j=0; j<CITY_NUM; j++)
	{
		if (Ant[i].flag[j]==FALSE/*表示未訪問過*/)
		{
			tao_yita[gmbpad.citycnt] = tao[Ant[i].curpos][j]
				                       *pow(yita[Ant[i].curpos][j],BETA);
		    total_tao_yita += tao_yita[gmbpad.citycnt];
			gmbpad.city[gmbpad.citycnt]=j;  //記錄城市序號
			gmbpad.citycnt++;               //城市數加一
		}
	}

	for (j=0; j<gmbpad.citycnt; j++)
		gmbpad.pr[j]=tao_yita[j]/total_tao_yita;//得到去每個未訪問城市的轉移概率
}

//功能:顯示結果
void CAnt_System_Alogrithm::displayResult(CDC* pDC)
{
	CString str;
	CPoint  point(100,60);
	str.Format("最優長度=%d",bestresult.len);
	pDC->TextOut(0,0,str);
	pDC->TextOut(0,30,"路徑序列:");

	pDC->MoveTo(citypos[bestresult.path[0]].x*5,citypos[bestresult.path[0]].y*5);
	for (int i=0; i<=bestresult.tailpos; i++)
	{
		pDC->LineTo(citypos[bestresult.path[i]].x*5,citypos[bestresult.path[i]].y*5);
		point.x =100 + (i%10)*50; point.y = 60 + (i/10)*30;
		str.Format("%d",bestresult.path[i]);
		pDC->TextOut(point.x,point.y,str);
	}
}

CAnt_System_Alogrithm::~CAnt_System_Alogrithm()
{

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2024国产精品| 欧美伊人久久久久久午夜久久久久| 日韩三级电影网址| 男女性色大片免费观看一区二区| 日韩欧美国产wwwww| 国产麻豆精品在线| 成人欧美一区二区三区小说| 日本高清不卡一区| 日韩vs国产vs欧美| 久久精品网站免费观看| 99久久99久久久精品齐齐| 一区二区三区.www| 91麻豆精品国产综合久久久久久| 久久99精品国产麻豆不卡| 国产日韩欧美精品电影三级在线 | 日韩一区二区三区在线视频| 麻豆精品新av中文字幕| 国产精品久久久久影院老司| 91国内精品野花午夜精品| 日本欧美一区二区在线观看| 日本一区二区高清| 在线观看欧美精品| 激情综合色综合久久综合| 精品噜噜噜噜久久久久久久久试看| 美女看a上一区| 亚洲伦在线观看| 日韩欧美激情四射| 一本到高清视频免费精品| 蜜桃av一区二区在线观看| 国产精品剧情在线亚洲| 在线不卡中文字幕| 北条麻妃国产九九精品视频| 日日骚欧美日韩| ㊣最新国产の精品bt伙计久久| 亚洲欧美偷拍三级| 国产一区二区三区四区五区美女 | 国产老肥熟一区二区三区| 亚洲乱码一区二区三区在线观看| 91精品中文字幕一区二区三区| 国产黄色精品网站| 日韩中文欧美在线| 亚洲日本成人在线观看| 久久综合成人精品亚洲另类欧美| 在线日韩一区二区| 成人av在线播放网址| 免费久久99精品国产| 亚洲国产日产av| 亚洲天堂av一区| 国产清纯白嫩初高生在线观看91 | 91精品国产黑色紧身裤美女| 成人av电影免费在线播放| 久久精品国产精品亚洲红杏| 亚洲成人精品一区| 亚洲美女一区二区三区| 国产精品网站在线播放| 久久影院午夜论| 日韩一区二区中文字幕| 欧美欧美午夜aⅴ在线观看| 91麻豆国产自产在线观看| 国产成人综合在线观看| 久久精品久久99精品久久| 三级久久三级久久久| 亚洲午夜免费福利视频| 一区二区三区四区蜜桃| 亚洲欧洲韩国日本视频| 国产精品国产三级国产aⅴ中文| 欧美精品一区二区在线观看| 欧美本精品男人aⅴ天堂| 7777精品伊人久久久大香线蕉的 | 日韩欧美123| 91精品视频网| 欧美久久久一区| 欧美日韩一级二级| 在线观看av不卡| 欧美在线免费播放| 欧美性大战久久久久久久蜜臀 | 成人av电影在线网| 99热99精品| 99re成人精品视频| 色婷婷av一区二区三区之一色屋| 不卡的电影网站| 91色porny| 欧美三级日韩三级| 欧美肥妇bbw| 日韩精品一区二区三区老鸭窝| 日韩精品中午字幕| 精品国产成人在线影院 | 国产精品一区二区久久不卡| 国产盗摄精品一区二区三区在线| 成人国产精品视频| 色成人在线视频| 欧美精品日日鲁夜夜添| 日韩欧美精品三级| 中文字幕乱码日本亚洲一区二区| 自拍偷拍亚洲综合| 亚洲成人av电影| 另类小说欧美激情| 福利电影一区二区| 91久久免费观看| 欧美一级国产精品| 欧美国产综合一区二区| 一区二区三区四区蜜桃| 麻豆免费看一区二区三区| 丰满少妇久久久久久久| 日本久久一区二区| 日韩亚洲欧美综合| 国产精品日韩成人| 亚洲第一会所有码转帖| 蜜臀a∨国产成人精品| 豆国产96在线|亚洲| 欧美视频一区在线观看| 久久视频一区二区| 亚洲一区二区三区激情| 国产呦萝稀缺另类资源| 91国产福利在线| 久久婷婷国产综合精品青草| 夜夜亚洲天天久久| 国产精一品亚洲二区在线视频| 91一区二区三区在线观看| 欧美一区二区三区影视| 成人欧美一区二区三区小说| 麻豆精品视频在线观看免费| 91色九色蝌蚪| 久久欧美一区二区| 亚洲成a人片综合在线| 成人动漫在线一区| 日韩欧美你懂的| 亚洲成人资源网| 成人av免费在线观看| 日韩免费福利电影在线观看| 亚洲狠狠丁香婷婷综合久久久| 国产一区二区视频在线播放| 欧美日韩一区二区在线视频| 国产精品久久久久久亚洲毛片| 麻豆中文一区二区| 欧美色视频在线| 亚洲欧洲日韩在线| 国产乱人伦偷精品视频免下载| 欧美日韩国产精选| 一区二区三区小说| 成人深夜福利app| 久久精品一区二区三区av| 日本亚洲视频在线| 欧美精品一二三| 亚洲一区二区三区四区在线| 91小视频免费看| 国产精品日韩成人| 懂色av一区二区三区免费观看| 日韩情涩欧美日韩视频| 五月天精品一区二区三区| 色又黄又爽网站www久久| 国产精品免费丝袜| 国产iv一区二区三区| 国产亚洲精久久久久久| 国内精品伊人久久久久av一坑 | 欧美不卡一区二区三区| 日韩精品高清不卡| 欧美日韩色一区| 亚洲不卡av一区二区三区| 91成人在线精品| 成人欧美一区二区三区| 成人av电影在线| 中文字幕佐山爱一区二区免费| fc2成人免费人成在线观看播放 | 精品99久久久久久| 精品一区二区在线播放| 日韩午夜在线影院| 久久99精品国产麻豆婷婷| 欧美精品一区二区三区蜜桃视频 | 日韩电影免费一区| 日韩欧美一二三四区| 麻豆91在线观看| 91精品国产色综合久久ai换脸| 亚洲高清三级视频| 777色狠狠一区二区三区| 天堂av在线一区| 日韩免费电影一区| 国内成人自拍视频| 欧美国产日韩a欧美在线观看| 成人午夜视频网站| 亚洲欧美日韩久久精品| 在线观看av一区| 美女在线一区二区| 久久免费午夜影院| av亚洲精华国产精华| 伊人婷婷欧美激情| 欧美日韩国产三级| 国模大尺度一区二区三区| 国产精品视频免费| 欧美三级电影在线看| 久久国产麻豆精品| 中文字幕免费不卡在线| 在线免费观看日本欧美| 三级欧美在线一区| 日本一区二区三区电影| 欧美中文字幕一区二区三区 | 日韩精品电影在线| 国产亚洲成aⅴ人片在线观看| 日本高清不卡视频| 美女视频黄久久|