




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、說(shuō)明:信息素權(quán)重,路徑權(quán)重和信息素蒸發(fā)率對(duì)最后的結(jié)果影響很大,需要微調(diào)。 目前發(fā)現(xiàn)2 / 5 / 0.5 能達(dá)到稍微讓人滿意的效果。本程序離完美的ACO還差很遠(yuǎn),僅供參考。 本蟻群算法為AS算法。 用法: 1.new一個(gè)對(duì)象 ACOforTSP tsp = new ACPforTSP(tsp數(shù)據(jù)文件名,迭代次數(shù),螞蟻數(shù)量,信息素權(quán)重,路徑權(quán)重,信息素蒸發(fā)率); 2.用go()方法運(yùn)行 tsp.go(); ACOforTSP.java _ import java.io.File; import static java.lang.Math.pow; import static java.lang.
2、Math.sqrt; import static java.lang.Math.random; import java.util.HashMap; import java.io.FileReader; import java.io.BufferedReader; /* * * author dvdface */ public class ACOforTSP /城市的距離表 private double distance; /距離的倒數(shù)表 private double heuristic; /啟發(fā)信息表 private double pheromone; /權(quán)重 private int alph
3、a, beta; /迭代的次數(shù) private int iterationTimes; /螞蟻的數(shù)量 private int numbersOfAnt; /蒸發(fā)率 private double rate; ACOforTSP (String file, int iterationTimes, int numbersOfAnt, int alpha, int beta, double rate) /加載文件 this.initializeData(file); /初始化參數(shù) this.iterationTimes = iterationTimes; /設(shè)置螞蟻數(shù)量 this.numbersOfA
4、nt = numbersOfAnt; /設(shè)置權(quán)重 this.alpha = alpha; this.beta = beta; /設(shè)置蒸發(fā)率 this.rate = rate; private void initializeData(String filename) /定義內(nèi)部類 class City int no; double x; double y; City(int no, double x, double y) this.no = no; this.x = x; this.y = y; private double getDistance(City city) return sqrt(
5、pow(x - city.x), 2) + pow(y - city.y), 2); try /定義HashMap保存讀取的坐標(biāo)信息 HashMap<Integer, City> map = new HashMap<Integer, City>(); /讀取文件 BufferedReader reader = new BufferedReader(new FileReader(new File(filename); for (String str = reader.readLine(); str != null; str = reader.readLine() /將讀到
6、的信息保存入HashMap if (str.matches("(0-9+)(s*)(0-9+)(.?)(0-9*)(s*)(0-9+)(.?)(0-9*)") String data = str.split("(s+)"); City city = new City(Integer.parseInt(data0), Double.parseDouble(data1), Double.parseDouble(data2); map.put(city.no, city); /分配距離矩陣存儲(chǔ)空間 distance = new doublemap.size()
7、 + 1map.size() + 1; /分配距離倒數(shù)矩陣存儲(chǔ)空間 heuristic = new doublemap.size() + 1map.size() + 1; /分配信息素矩陣存儲(chǔ)空間 pheromone = new doublemap.size() + 1map.size() + 1; for (int i = 1; i < map.size() + 1; i+) for (int j = 1; j < map.size() + 1; j+) /計(jì)算城市間的距離,并存入距離矩陣 distanceij = map.get(i).getDistance(map.get(j
8、); /計(jì)算距離倒數(shù),并存入距離倒數(shù)矩陣 heuristicij = 1 / distanceij; /初始化信息素矩陣 pheromoneij = 1; catch (Exception exception) System.out.println("初始化數(shù)據(jù)失敗!"); class Ant /已訪問(wèn)城市列表 private boolean visited; /訪問(wèn)順序表 private int tour; /已訪問(wèn)城市的個(gè)數(shù) private int n; /總的距離 private double total; Ant() /給訪問(wèn)順序表分配空間 tour = new i
9、ntdistance.length+1; /已存入城市數(shù)量為n,剛開(kāi)始為0 n = 0; /將起始城市1,放入訪問(wèn)結(jié)點(diǎn)順序表第一項(xiàng) tour+n = 1; /給已訪問(wèn)城市結(jié)點(diǎn)分配空間 visited = new booleandistance.length; /第一個(gè)城市為出發(fā)城市,設(shè)置為已訪問(wèn) visitedtourn = true; private int chooseCity() /用來(lái)random的隨機(jī)數(shù) double m = 0; /獲得當(dāng)前所在的城市號(hào)放入j,如果和j相鄰的城市沒(méi)有被訪問(wèn),那么加入m for (int i = 1, j = tourn; i < pheromo
10、ne.length; i+) if (!visitedi) m += pow(pheromoneji, alpha) * pow(heuristicji, beta); /保存隨機(jī)到的數(shù) double p = m * random(); /尋找被隨機(jī)到的城市 double k = 0; /保存找到的城市 int q = 0; for (int i = 1, j = tourn; k < p; i+) if (!visitedi) k += pow(pheromoneji, alpha) * pow(heuristicji, beta); q = i; return q; private
11、void constructSolution () while (n != (distance.length-1) ) /選取下一個(gè)城市 int p = chooseCity(); /計(jì)算總的距離 total += distancetournp; /將選取到的城市放入已訪問(wèn)列表 tour+n = p; /將選取到的城市標(biāo)記為已訪問(wèn) visitedp = true; /回到起點(diǎn) total += distancetour1tourn; /將起點(diǎn)加入訪問(wèn)順序表的最后 tour+n = tour1; private void releasePheromone() /釋放信息素的大小 double t
12、 = 1/total; /釋放信息素 for (int i=1;i<tour.length-1;i+) pheromonetouritouri+1 += t; pheromonetouri+1touri += t; public void go() /保存最好的路徑和路徑長(zhǎng)度 double bestTotal = Double.MAX_VALUE; int bestTour = new intdistance.length+1; /新建螞蟻數(shù)組,用來(lái)引用所創(chuàng)建的螞蟻 Ant ant = new AntnumbersOfAnt; /進(jìn)行iterationTimes次迭代 while (it
13、erationTimes != 0) /初始化新的一批螞蟻(這里用構(gòu)造新的螞蟻代替重置螞蟻狀態(tài)) for (int i=0; i<numbersOfAnt; i+) anti = new Ant(); /進(jìn)行一次迭代(即讓所有的螞蟻構(gòu)建一條路徑) for (int i=0; i<numbersOfAnt; i+) anti.constructSolution(); /如果螞蟻構(gòu)建的路徑長(zhǎng)度比上次最好的還好,那么保存這個(gè)長(zhǎng)度和它所走的路徑 if (anti.total<bestTotal) bestTotal = anti.total; System.arraycopy(ant
14、i.tour, 1, bestTour, 1, bestTour.length-1); /蒸發(fā)信息素 evaporatePheromone(); /釋放信息素 for (int i=0; i<numbersOfAnt; i+) anti.releasePheromone(); /報(bào)告本次迭代的信息 System.out.format("本次為倒數(shù)第%d次迭代,當(dāng)前最優(yōu)路徑長(zhǎng)度為%10.2fn",iterationTimes,bestTotal); /迭代總數(shù)減去1,進(jìn)行下次迭代 iterationTimes-; /輸出最好的路徑長(zhǎng)度 System.out.format("得到的最優(yōu)的路徑長(zhǎng)度為:%10.2fn",bestTotal); /輸出最好的路徑 System.out.println("最優(yōu)路徑如下:"); for
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司組織考試活動(dòng)方案
- 公司新員工打卡活動(dòng)方案
- 2025年網(wǎng)絡(luò)安全工程師考試試題及答案
- 2025年心理素質(zhì)與情商訓(xùn)練考試試題及答案
- 2025年水利工程師資格考試試題及答案
- 2025年交通工程專業(yè)知識(shí)考試試題及答案
- 2025年國(guó)際法與人權(quán)保障方法考試試題及答案
- 關(guān)于烏鎮(zhèn)導(dǎo)游詞
- 2024年度浙江省二級(jí)造價(jià)工程師之土建建設(shè)工程計(jì)量與計(jì)價(jià)實(shí)務(wù)題庫(kù)練習(xí)試卷A卷附答案
- 2024年度浙江省二級(jí)造價(jià)工程師之土建建設(shè)工程計(jì)量與計(jì)價(jià)實(shí)務(wù)高分通關(guān)題庫(kù)A4可打印版
- 2025年江蘇瑞海投資控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 醫(yī)療廢物應(yīng)急處理流程與方案
- 簡(jiǎn)陽(yáng)市2024-2025學(xué)年數(shù)學(xué)五下期末統(tǒng)考試題含答案
- 體檢中心投訴處理流程
- 2025山西焦煤集團(tuán)公司招聘高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年中國(guó)東方航空股份有限公司招聘筆試參考題庫(kù)含答案解析
- 畜牧飼養(yǎng)行業(yè)安全生產(chǎn)培訓(xùn)
- 《水龍頭知識(shí)培訓(xùn)》課件
- (八省聯(lián)考)河南省2025年高考綜合改革適應(yīng)性演練 化學(xué)試卷合集(含答案逐題解析)
- 用戶體驗(yàn)量化評(píng)估-洞察分析
- 農(nóng)場(chǎng)租賃合同范本:養(yǎng)殖場(chǎng)租賃
評(píng)論
0/150
提交評(píng)論