已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
專業(yè)技能訓(xùn)練報(bào)告學(xué) 院: 計(jì)算機(jī)學(xué)院 課程名稱: C程序設(shè)計(jì)綜合實(shí)踐 完成時(shí)間:2015年 6月19日目 錄第1部分 實(shí)訓(xùn)題目與要求.11. 問題提出.22. 功能要求.23. 任務(wù)分工.3第2部分 設(shè)計(jì)實(shí)訓(xùn)題目功能.41. 總體設(shè)計(jì).42. 算法設(shè)計(jì).53. 數(shù)據(jù)結(jié)構(gòu).64. 程序代碼設(shè)計(jì).65. 測(cè)試與調(diào)試.12 第3部分 實(shí)訓(xùn)總結(jié).131.個(gè)人總結(jié).132.結(jié)束語(yǔ).13 附錄 A 程序清單.13 C程序設(shè)計(jì)綜合實(shí)踐評(píng)分表.30第1部分 實(shí)訓(xùn)題目與要求(1)問題提出用經(jīng)典蟻群算法求解旅行商問題旅行商問題(Traveling Salesman Problem,TSP)又譯為旅行推銷員問題、貨郎擔(dān)問題,簡(jiǎn)稱為TSP問題,是最基本的路線問題,該問題是在尋求單一旅行者由起點(diǎn)出發(fā),通過所有給定的需求點(diǎn)之后,最后再回到原點(diǎn)的最小路徑成本。本課題要求利用經(jīng)典蟻群算法求解旅行商問題。(2)功能要求重復(fù)顯示如下圖所示的主菜單,在主菜單中選擇任意一項(xiàng),均實(shí)現(xiàn)相應(yīng)功能。. 請(qǐng)輸入選項(xiàng)編號(hào)(03): .1建立城市信息文件 .2設(shè)定相關(guān)參數(shù) .3尋優(yōu)計(jì)算 .0退出系統(tǒng) . 如上圖用經(jīng)典蟻群算法求解旅行商問題主菜單在主菜單中選擇1,建立一個(gè)城市信息文件,用于存放城市的坐標(biāo)等數(shù)據(jù)。在主菜單中選擇2,可以設(shè)定蟻群算法相關(guān)的一些參數(shù),如蟻群中螞蟻的個(gè)數(shù),信息素?fù)]發(fā)系數(shù)等。在主菜單中選擇3,即可進(jìn)行TSP問題尋優(yōu)計(jì)算,要求追加本次設(shè)定的參數(shù)及最終計(jì)算結(jié)果到一個(gè)文本文件中。在主菜單中選擇0,顯示結(jié)束信息(如“感謝使用本軟件!已正常退出,按任意鍵結(jié)束!”),按任意鍵后,退出本系統(tǒng)。說明:可以根據(jù)實(shí)際情況適當(dāng)增減主菜單中的菜單項(xiàng),如增加一些創(chuàng)新功能項(xiàng)等。(3)任務(wù)分工本組有2人,我和傳昇。在剛開始,我們都一起查詢了許多資料,比如蟻群優(yōu)化【1】、蟻群算法原理及其應(yīng)用【2】等等,了解基本的運(yùn)行方式和主要函數(shù)。成員分工吳超益1. 主要編程蟻群的運(yùn)行核心函數(shù),如進(jìn)行輪盤選擇、城市距離、隨機(jī)抽取、更新環(huán)境信息素、/螞蟻進(jìn)行搜索、螞蟻尋優(yōu)等函數(shù)代碼。2. 整合倆人的分工的代碼,使其總代碼能更好的完成,實(shí)現(xiàn)功能。3. 修改、更改報(bào)告,上交工作結(jié)果。李傳昇1. 主要編譯蟻群的界面和其他復(fù)合函數(shù),比如主要界面、進(jìn)入選擇的系統(tǒng)選項(xiàng)、建立城市信息文件、查看相關(guān)參數(shù)等函數(shù)代碼。2. 撰寫城市信息文件的信息文本并測(cè)試程序。3. 負(fù)責(zé)制作、修改報(bào)告,上交工作結(jié)果。(4)實(shí)驗(yàn)?zāi)康?1.通過C語(yǔ)言綜合實(shí)踐,更加熟練鏈表、文件、循環(huán)、結(jié)構(gòu)體、函數(shù)、數(shù)組、選擇語(yǔ)、數(shù)組、順序的函數(shù)。 2.有助于學(xué)生了解群體智能(SI)計(jì)算,激發(fā)其學(xué)習(xí)計(jì)算機(jī)科學(xué)的興趣,為其進(jìn)一步深造打下一定基礎(chǔ)并提前開啟一道門徑,在此基礎(chǔ)上可以進(jìn)一步研究粒子群算法、遺傳算法、蛙跳算法、人工魚算法、野草算法、蜂群算法等。第2部分 設(shè)計(jì)實(shí)訓(xùn)題目功能(1) 總設(shè)計(jì)1. 首先打開軟件窗口將顯示主菜單內(nèi)容其中有4個(gè)選項(xiàng),分別是【0】 退出系統(tǒng)【1】 建立城市信息文件【2】 設(shè)定相關(guān)參數(shù)【3】 尋優(yōu)計(jì)算。2.在顯示的窗口中選擇【1】調(diào)用city_information_file(),進(jìn)入【建立城市信息,件】 ,在進(jìn)入時(shí),系統(tǒng)自動(dòng)讀取city.txt文件的城市信息,并把城市坐標(biāo)儲(chǔ)存在X,Y的兩個(gè)數(shù)組里。接下來可以選擇您想做的事【3】 建立城市坐標(biāo)信息【2】修改某個(gè)城市信息【1】查看城市坐標(biāo)信息【0】 返回主菜單 3.接下來返回主菜單后,您可以選擇【2】,調(diào)用Check_parameters()【查看相關(guān)參數(shù)】,下圖所示4.當(dāng)然,您可以在第二步后,直接選擇【3】(或者在第三步后選擇【3】),系統(tǒng)將調(diào)用fand_calculation()【尋優(yōu)計(jì)算】自動(dòng)進(jìn)行尋優(yōu)計(jì)算,計(jì)算出最短路徑長(zhǎng)度、最優(yōu)路徑,如圖所示,在【100】后面的601就是最短路徑長(zhǎng)度4.5.6. 最后會(huì)將相關(guān)參數(shù),最優(yōu)路徑保存在city_way.txt文本文件里。在接下下來會(huì)跳回主菜單,如果您覺得這不是最理想的數(shù)據(jù),您可以繼續(xù)選【3】,直到出現(xiàn)你自認(rèn)最合理的數(shù)據(jù)后,在主菜單選擇【0】退出系統(tǒng)。(2)算法設(shè)計(jì)1.main()函數(shù)2. city_information_file()(建立城市信息文件) 此函數(shù)能調(diào)用city.txt文件內(nèi)城市信息,將城市坐標(biāo)保存到X,Y的兩個(gè)數(shù)組,該函數(shù)還可以修改某個(gè)城市信息,查看城市信息、建立城市信息的功能。3.Check_parameters()(設(shè)定相關(guān)參數(shù))此函數(shù)是查詢蟻群優(yōu)化算法的設(shè)定的參數(shù),啟發(fā)因子、期望因子、信息素殘留參數(shù)、螞蟻數(shù)量ant 、迭代次數(shù)R、城市數(shù)目,由于防止相關(guān)參數(shù)設(shè)置不合理導(dǎo)致系統(tǒng)癱瘓或不能尋找到最優(yōu)解,系統(tǒng)已經(jīng)自動(dòng)設(shè)定相關(guān)的參數(shù)。4. fand_calculation()(尋優(yōu)算法) 此函數(shù)是該編程最核心的部分,實(shí)現(xiàn)用經(jīng)典蟻群算法解決旅行商問題的解法。在進(jìn)入fand_calculation(),是首先進(jìn)入CTsp:InitData(),將螞蟻?zhàn)顑?yōu)路徑長(zhǎng)度設(shè)為最大值,初始化環(huán)境信息素,計(jì)算城市與城市間的距離。隨后調(diào)用srand(nSeed)獲得一個(gè)隨機(jī)數(shù),決定螞蟻從哪個(gè)城市開始。接下來進(jìn)入CAnt:ChooseNextCity()選擇下一個(gè)城市,在進(jìn)入下個(gè)城市前涉及到一個(gè)經(jīng)典算法1,如下圖:在得到概率,進(jìn)入CAnt:Move()螞蟻在城市移動(dòng),進(jìn)入U(xiǎn)pdateTrial()進(jìn)行更新環(huán)境信息素,最新的環(huán)境信息素 = 留存的信息素 + 新留下的信息素,再進(jìn)行CAnt:ChooseNextCity()選擇下一個(gè)城市,如此反復(fù)進(jìn)行下去,到螞蟻訪問全部城市。SCAnt:Search()螞蟻搜索一次,在執(zhí)行SCAnt:Search()前CAnt:Init()(初始化螞蟻搜索前調(diào)用)。在進(jìn)行以上的步奏,直到迭代次數(shù)滿。進(jìn)入CTsp:Search()尋找最優(yōu)路徑的長(zhǎng)度,再返回fand_calculation()打印最優(yōu)路徑,返回主菜單。流程如下:(3) 數(shù)據(jù)結(jié)構(gòu)const double a=1.0; /啟發(fā)因子,信息素的重要程度const double b=2.0; /期望因子,城市間距離的重要程度const double ROU=0.5; /信息素殘留參數(shù)const int ant=40; /螞蟻數(shù)量const int R=100; /迭代次數(shù)const int N_CITY_COUNT=72; /城市數(shù)量const double DBQ=100.0; /總的信息素const double MAX=10e9; /一個(gè)標(biāo)志數(shù)double g_TrialN_CITY_COUNTN_CITY_COUNT; /城市間信息素,就是環(huán)境信息素double g_DistanceN_CITY_COUNTN_CITY_COUNT; /城市間距離int x10000;/城市橫坐標(biāo)int y10000;/城市縱坐標(biāo)void city_information_file()/建立城市信息文件.FILE *fp;char s10010,sel10; int i,n100,m100,g100,d,p;while(1) puts(ttt=);puts(ttt查看城市坐標(biāo)信息請(qǐng)按【1】);puts(ttt修改某個(gè)城市信息請(qǐng)按【2】);puts(ttt建立城市坐標(biāo)信息請(qǐng)按【3】);puts(ttt返回主菜單請(qǐng)按【0】!); puts(ttt=);printf(ttt選擇是:); if(fp=fopen(city.txt,r)=NULL) printf(找不到該文件!); exit(0); for(i=0;iN_CITY_COUNT;i+) fscanf(fp,%d%s%d%d,&gi,si,&ni,&mi); xi=ni;yi=mi; fclose(fp);scanf(%s,sel); if(!(strcmp(sel,1)=0|strcmp(sel,0)=0|strcmp(sel,2)=0|strcmp(sel,3)=0) system(CLS); printf(ttt對(duì)不起,您輸入錯(cuò)誤,請(qǐng)重新輸入: n); else if(sel0=1) system(CLS);printf(=n); printf(輸出的分別是城市序號(hào),城市名,X橫坐標(biāo)和Y縱坐標(biāo):n);printf(=n); for(i=0,p=1;iN_CITY_COUNT;i+,p+)if(p%3=0) printf(城市%d %s %d %dn,gi,si,ni,mi);else printf(城市%d %s %d %d ,gi,si,ni,mi);puts(n);system(pause);system(CLS);else if(sel0=2) fp=fopen(city.txt,w+);system(CLS);printf(=n); printf(輸出的分別是城市序號(hào),城市名,X橫坐標(biāo)和Y縱坐標(biāo):n);printf(=n); for(i=0,p=1;iN_CITY_COUNT;i+,p+)if(p%3=0) printf(城市%d %s %d %dn,gi,si,ni,mi);else printf(城市%d %s %d %d ,gi,si,ni,mi);puts(n);printf(ttt請(qǐng)輸入您想修改城市的編號(hào):);scanf(%d,&d);for(i=0;iN_CITY_COUNT;i+)if(i=d-1)puts(ttt您想修改原城市信息:);printf(ttt%d %s %d %dn,gi,si,ni,mi);printf(ttt請(qǐng)輸入新的城市名、橫坐標(biāo)和縱坐標(biāo):);scanf(%s%d%d,si,&ni,&mi); xi=ni;yi=mi;for(i=0;iN_CITY_COUNT;i+) fprintf(fp,%d %s %d %dn,gi,si,ni,mi);fclose(fp);getchar();system(CLS);else if(sel0=3) system(CLS);puts(=);printf(請(qǐng)依次輸入 %d 個(gè)城市名,橫坐標(biāo),縱坐標(biāo):n,N_CITY_COUNT);fp=fopen(city.txt,w+);for(i=0;iN_CITY_COUNT;i+)printf(請(qǐng)輸入第%d個(gè)城市信息:n,i+1);scanf(%s%d%d,si,&ni,&mi);xi=ni;yi=mi;for(i=0;iN_CITY_COUNT;i+) fprintf(fp,%d %s %d %dn,i+1,si,ni,mi); fclose(fp);system(pause);system(CLS); else system(CLS); break;void Check_parameters()/查看相關(guān)參數(shù). puts(nnnnn); puts(ttt); printf(ttt 啟發(fā)因子 : %.1fn,a); printf(ttt 期望因子 : %.1fn,b); printf(ttt 信息素殘留參數(shù) : %.1fn,ROU); printf(ttt 螞蟻數(shù)量ant : %dn,ant); printf(ttt 迭代次數(shù)R : %dn,R); printf(ttt 城市數(shù)目 :%dn,N_CITY_COUNT); puts(ttt); system(pause);system(CLS);void fand_calculation()/尋優(yōu)算法 FILE *fp; time_t tm; /用當(dāng)前時(shí)間點(diǎn)初始化隨機(jī)種子,防止每次運(yùn)行的結(jié)果都相同 time(&tm); unsigned int nSeed=(unsigned int)tm; srand(nSeed); int i; CTsp tsp; /開始搜索 tsp.InitData(); /初始化 tsp.Search(); /開始搜索 char cBuf128;if(fp=fopen(cit_way.txt,a+)=NULL)/把最佳路徑保存到city_way.txt文件里printf(找不到文本文件!n);fprintf(fp,相關(guān)參數(shù):n);fprintf(fp, 啟發(fā)因子 : %.1fn,a); fprintf(fp, 期望因子 : %.1fn,b); fprintf(fp, 信息素殘留參數(shù) : %.1fn,ROU); fprintf(fp, 螞蟻數(shù)量ant : %dn,ant); fprintf(fp, 迭代次數(shù)R : %dn,R); fprintf(fp, 城市數(shù)目 :%dn,N_CITY_COUNT);fprintf(fp,最佳路徑:n); printf(n最優(yōu)路徑是 :n); /輸出結(jié)果 for ( i=0;iN_CITY_COUNT;i+) sprintf(cBuf,%02d,tsp.m_cBestAnt.m_nPathi+1); if(i%10=0&i!=0)fprintf(fp,%dn,tsp.m_cBestAnt.m_nPathi+1);elsefprintf(fp,%d,tsp.m_cBestAnt.m_nPathi+1); if (i % 10 = 0) printf(n); printf(cBuf); fprintf(fp,n);putchar(n);putchar(n); putchar(n);puts(已經(jīng)把最優(yōu)路徑保存在cit_way.txt里);fclose(fp);system(pause);system(CLS);int main(void)/主調(diào)函數(shù),主要界面char sel10,w10;system(color 2A);system(color 2E);while(1)/循環(huán)選擇,直到選0退出循環(huán)printf(nnnnnn);printf(ttt*n);printf(ttt請(qǐng)輸入選項(xiàng)編號(hào)(03):n); printf(ttt*n); printf(ttt.1建立城市信息文件.n); printf(ttt.2設(shè)定相關(guān)參數(shù).n);printf(ttt.3尋優(yōu)計(jì)算.n); printf(ttt.0退出系統(tǒng) .n);printf(ttt*n);printf(ttt選擇是:); scanf(%s,sel);if(!(strcmp(sel,1)=0|strcmp(sel,2)=0|strcmp(sel,3)=0|strcmp(sel,0)=0)system(CLS);printf(ttt對(duì)不起,您輸入錯(cuò)誤,請(qǐng)重新輸入: n);continue;if(sel0=0)/退出的確定puts(ttt#);puts(ttt您確定要退出嗎?); puts(ttt確定請(qǐng)按1,否則請(qǐng)按其它鍵!);puts(ttt#);printf(ttt選擇是:);scanf(%s,w);if(strcmp(w,1)=0)printf(“感謝使用本軟件!已正常退出,按任意鍵結(jié)束!”n);break;else system(CLS);elseswitch(sel0)/進(jìn)入選擇的系統(tǒng)選項(xiàng) case 1: system(CLS);city_information_file();break;/建立城市信息文件. case 2: system(CLS);Check_parameters();break;/查看相關(guān)參數(shù). case 3: system(CLS);fand_calculation();break;/尋優(yōu)計(jì)算.return 0;完整程序請(qǐng)參見附錄A7. 測(cè)試與調(diào)試內(nèi)容:包括合法與非法的測(cè)試數(shù)據(jù)、預(yù)期結(jié)果、實(shí)測(cè)結(jié)果。要求按照如下表格形式。測(cè)試數(shù)據(jù)類型測(cè)試數(shù)據(jù)預(yù)期結(jié)果實(shí)測(cè)結(jié)果合法數(shù)據(jù)主界面顯示進(jìn)入界面,并顯示出內(nèi)容成功顯示出內(nèi)容,并可以進(jìn)一步執(zhí)行操作建立城市信息文件讀取文件內(nèi)容成功讀取文本文件城市信息,并可以進(jìn)行下一步修改序號(hào)3,城市名廣州,坐標(biāo)分別為52,64的城市信息進(jìn)入修改界面,輸入相關(guān)數(shù)據(jù),并保存在原文件里面成功修改城市信息,改為,城市名廣州,坐標(biāo)分別為64,52設(shè)定相關(guān)參數(shù)顯示相關(guān)參數(shù)成功顯示對(duì)應(yīng)的相關(guān)參數(shù),并可以進(jìn)行下一步尋優(yōu)算法系統(tǒng)自動(dòng)計(jì)算最優(yōu)路徑成功算出最優(yōu)路徑、最短路程,并保存在city_way.txt文件里非法數(shù)據(jù)進(jìn)入建立城市信息界面,選擇2修改城市信息,未正確輸入信息并強(qiáng)制關(guān)閉軟件city.txt文件內(nèi)的城市信息被完全刪除打開city.txt文件,里面沒有內(nèi)容進(jìn)入主界面選擇4不能進(jìn)入下一步系統(tǒng)提示錯(cuò)誤,并要求重新輸入進(jìn)入查詢相關(guān)參數(shù)后,選擇12312不能 進(jìn)行下一步系統(tǒng)提示錯(cuò)誤,并要求重新輸入第3部分 實(shí)訓(xùn)總結(jié)(1) 個(gè)人總結(jié):(吳超益)收獲:沒有嘗試就放棄永遠(yuǎn)不會(huì)成功。勇于挑戰(zhàn),就算輸了,也輸?shù)闹?,輸?shù)墓鈽s。學(xué)習(xí)到幾個(gè)新的編碼函數(shù)如iostream、time.h、cons等等,對(duì)Java,C+有初步的了解,學(xué)到NP難問題的初步知識(shí)。面對(duì):當(dāng)知道有C語(yǔ)言綜合實(shí)踐的時(shí)候,我原本只想選個(gè)比較簡(jiǎn)單的題目來做的。首先是完成題目以至于不會(huì)掛科,其次是熟練C語(yǔ)言的運(yùn)用,最后提升自己的編碼能力。畢竟C語(yǔ)言是學(xué)習(xí)其他電腦編碼(比如c+,c#,jave)的基礎(chǔ)。但是到老師公布題目等級(jí),看著大家都有選擇三級(jí)題目的意向,他們能完成三級(jí)的題目,為什么我不能呢?都是同個(gè)老師教的,都是同個(gè)教室,都是同樣的時(shí)間,他們能,我一樣能,而且我在這門科目付出的時(shí)間不比別人少。我毅然選擇了三級(jí)的蟻群優(yōu)化。在完成作業(yè)的過程中,困難接踵而至,資料缺乏,知識(shí)有限,時(shí)間有限等等問題困擾著我。有時(shí)候會(huì)后悔自己選擇了太難的題目,開始懷疑自己的能力,感覺個(gè)人能力的渺小。對(duì)自己的能力不能正確地認(rèn)識(shí)。而當(dāng)我克服種種困難,不足,終于成功編寫出代碼。 困難:不懂C+,Java等高級(jí)編程,沒有資料,對(duì)于蟻群基本了解匱乏,不懂蟻群的算法,時(shí)間有限。解決:向圖書館借C+,Jave書看,購(gòu)買蟻群優(yōu)化書,上網(wǎng)學(xué)習(xí)所需的知識(shí),好好利用時(shí)間(2) 結(jié)束語(yǔ)感謝我的隊(duì)友(李傳勝)共同克服困難完成這次作業(yè),感謝同班同學(xué)大力的支持,感謝師兄的點(diǎn)化,感謝老師的教導(dǎo)。謝謝您們!附錄A 程序清單#include#include#include #include #include const double a=1.0; /啟發(fā)因子,信息素的重要程度const double b=2.0; /期望因子,城市間距離的重要程度const double ROU=0.5; /信息素殘留參數(shù)const int ant=40; /螞蟻數(shù)量const int R=100; /迭代次數(shù)const int N_CITY_COUNT=72; /城市數(shù)量const double DBQ=100.0; /總的信息素const double MAX=10e9; /一個(gè)標(biāo)志數(shù)double g_TrialN_CITY_COUNTN_CITY_COUNT; /城市間信息素,就是環(huán)境信息素double g_DistanceN_CITY_COUNTN_CITY_COUNT; /城市間距離int x10000;/城市橫坐標(biāo)int y10000;/城市縱坐標(biāo)void city_information_file()/建立城市信息文件.FILE *fp;char s10010,sel10; int i,n100,m100,g100,d,p;while(1) puts(ttt=);puts(ttt查看城市坐標(biāo)信息請(qǐng)按【1】);puts(ttt修改某個(gè)城市信息請(qǐng)按【2】);puts(ttt建立城市坐標(biāo)信息請(qǐng)按【3】);puts(ttt返回主菜單請(qǐng)按【0】!); puts(ttt=);printf(ttt選擇是:); if(fp=fopen(city.txt,r)=NULL) printf(找不到該文件!); exit(0); for(i=0;iN_CITY_COUNT;i+) fscanf(fp,%d%s%d%d,&gi,si,&ni,&mi); xi=ni;yi=mi; fclose(fp);scanf(%s,sel); if(!(strcmp(sel,1)=0|strcmp(sel,0)=0|strcmp(sel,2)=0|strcmp(sel,3)=0) system(CLS); printf(ttt對(duì)不起,您輸入錯(cuò)誤,請(qǐng)重新輸入: n); else if(sel0=1) system(CLS);printf(=n); printf(輸出的分別是城市序號(hào),城市名,X橫坐標(biāo)和Y縱坐標(biāo):n);printf(=n); for(i=0,p=1;iN_CITY_COUNT;i+,p+)if(p%3=0) printf(城市%d %s %d %dn,gi,si,ni,mi);else printf(城市%d %s %d %d ,gi,si,ni,mi);puts(n);system(pause);system(CLS);else if(sel0=2) fp=fopen(city.txt,w+);system(CLS);printf(=n); printf(輸出的分別是城市序號(hào),城市名,X橫坐標(biāo)和Y縱坐標(biāo):n);printf(=n); for(i=0,p=1;iN_CITY_COUNT;i+,p+)if(p%3=0) printf(城市%d %s %d %dn,gi,si,ni,mi);else printf(城市%d %s %d %d ,gi,si,ni,mi);puts(n);printf(ttt請(qǐng)輸入您想修改城市的編號(hào):);scanf(%d,&d);for(i=0;iN_CITY_COUNT;i+)if(i=d-1)puts(ttt您想修改原城市信息:);printf(ttt%d %s %d %dn,gi,si,ni,mi);printf(ttt請(qǐng)輸入新的城市名、橫坐標(biāo)和縱坐標(biāo):);scanf(%s%d%d,si,&ni,&mi); xi=ni;yi=mi;for(i=0;iN_CITY_COUNT;i+) fprintf(fp,%d %s %d %dn,gi,si,ni,mi);fclose(fp);getchar();system(CLS);else if(sel0=3) system(CLS);puts(=);printf(請(qǐng)依次輸入 %d 個(gè)城市名,橫坐標(biāo),縱坐標(biāo):n,N_CITY_COUNT);fp=fopen(city.txt,w+);for(i=0;iN_CITY_COUNT;i+)printf(請(qǐng)輸入第%d個(gè)城市信息:n,i+1);scanf(%s%d%d,si,&ni,&mi);xi=ni;yi=mi;for(i=0;iN_CITY_COUNT;i+) fprintf(fp,%d %s %d %dn,i+1,si,ni,mi); fclose(fp);system(pause);system(CLS); else system(CLS); break;void Check_parameters()/查看相關(guān)參數(shù). puts(nnnnn); puts(ttt); printf(ttt 啟發(fā)因子 : %.1fn,a); printf(ttt 期望因子 : %.1fn,b); printf(ttt 信息素殘留參數(shù) : %.1fn,ROU); printf(ttt 螞蟻數(shù)量ant : %dn,ant); printf(ttt 迭代次數(shù)R : %dn,R); printf(ttt 城市數(shù)目 :%dn,N_CITY_COUNT); puts(ttt); system(pause);system(CLS);/返回指定范圍內(nèi)的隨機(jī)整數(shù)int rnd(int nLow,int nUpper) return nLow+(nUpper-nLow)*rand()/(RAND_MAX+1);/返回指定范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)double rnd(double dbLow,double dbUpper) double dbTemp=rand()/(double)RAND_MAX+1.0); return dbLow+dbTemp*(dbUpper-dbLow);/返回浮點(diǎn)數(shù)四舍五入取整后的浮點(diǎn)數(shù)double ROUND(double dbA) return (double)(int)(dbA+0.5);/定義螞蟻類class CAntpublic: CAnt(void); CAnt(void);public: int m_nPathN_CITY_COUNT; /螞蟻?zhàn)叩穆窂?double m_dbPathLength; /螞蟻?zhàn)哌^的路徑長(zhǎng)度 int m_nAllowedCityN_CITY_COUNT; /沒去過的城市 int m_nCurCityNo; /當(dāng)前所在城市編號(hào) int m_nMovedCityCount; /已經(jīng)去過的城市數(shù)量public: int ChooseNextCity(); /選擇下一個(gè)城市 void Init(); /初始化 void Move(); /螞蟻在城市間移動(dòng) void Search(); /搜索路徑 void CalPathLength(); /計(jì)算螞蟻?zhàn)哌^的路徑長(zhǎng)度;CAnt:CAnt(void)CAnt:CAnt(void)/初始化函數(shù),螞蟻搜索前調(diào)用void CAnt:Init() int i; for ( i=0;iN_CITY_COUNT;i+) m_nAllowedCityi=1; /設(shè)置全部城市為沒有去過 m_nPathi=0; /螞蟻?zhàn)叩穆窂饺吭O(shè)置為0 /螞蟻?zhàn)哌^的路徑長(zhǎng)度設(shè)置為0 m_dbPathLength=0.0; /隨機(jī)選擇一個(gè)出發(fā)城市 m_nCurCityNo=rnd(0,N_CITY_COUNT); /把出發(fā)城市保存入路徑數(shù)組中 m_nPath0=m_nCurCityNo; /標(biāo)識(shí)出發(fā)城市為已經(jīng)去過了 m_nAllowedCitym_nCurCityNo=0; /已經(jīng)去過的城市數(shù)量設(shè)置為1 m_nMovedCityCount=1; /選擇下一個(gè)城市,返回值 為城市編號(hào)int CAnt:ChooseNextCity() /計(jì)算當(dāng)前城市和沒去過的城市之間的信息素總和 int nSelectedCity=-1,i; double dbTotal=0.0; double probN_CITY_COUNT; /保存各個(gè)城市被選中的概率 for (i=0;i 0.0) /總的信息素值大于0 dbTemp=rnd(0.0,dbTotal); /取一個(gè)隨機(jī)數(shù) for ( i=0;iN_CITY_COUNT;i+) if (m_nAllowedCityi = 1) /城市沒
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未成年人思想道德教育的工作計(jì)劃
- 工作總結(jié)及計(jì)劃范文
- 2025教師校本研修工作計(jì)劃范文
- 暑期校本培訓(xùn)計(jì)劃
- 2025應(yīng)急預(yù)案演練計(jì)劃
- 下半年教科研工作計(jì)劃
- 監(jiān)理年度工作計(jì)劃集錦
- 《正弦電壓電流》課件
- 土地承包合同糾紛辯論詞
- 航空運(yùn)輸合同的法律關(guān)系
- 國(guó)際結(jié)算期末考試試卷及答案
- 如何贏得大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽智慧樹知到答案章節(jié)測(cè)試2023年哈爾濱工程大學(xué)
- 瞳孔觀察PPT演示課件
- 人工智能智慧樹知到答案章節(jié)測(cè)試2023年復(fù)旦大學(xué)
- 2023-2024學(xué)年貴州省遵義市小學(xué)語(yǔ)文 2023-2024學(xué)年三年級(jí)語(yǔ)文期末試卷期末自測(cè)模擬試題
- 統(tǒng)編版六年級(jí)下冊(cè)語(yǔ)文詞句段運(yùn)用及仿寫
- GB/T 18103-2022實(shí)木復(fù)合地板
- 地下礦山掘進(jìn)施工現(xiàn)場(chǎng)應(yīng)急處置方案
- 插花藝術(shù)形考大作業(yè)1119
- 2023年吉大考博英語(yǔ)真題
- GB/T 29240-2012信息安全技術(shù)終端計(jì)算機(jī)通用安全技術(shù)要求與測(cè)試評(píng)價(jià)方法
評(píng)論
0/150
提交評(píng)論