當前位置:首頁 » 操作系統 » 蟻群演算法旅行商問題

蟻群演算法旅行商問題

發布時間: 2022-08-19 09:08:13

㈠ 蟻群演算法解決TSP問題,最優解是多少,參數如何選擇

概念:蟻群演算法(ant colony optimization, ACO),又稱螞蟻演算法,是一種用來在圖中尋找優化路徑的機率型演算法。它由Marco Dorigo於1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行為。蟻群演算法是一種模擬進化演算法,初步的研究表明該演算法具有許多優良的性質.針對PID控制器參數優化設計問題,將蟻群演算法設計的結果與遺傳演算法設計的結果進行了比較,數值模擬結果表明,蟻群演算法具有一種新的模擬進化優化方法的有效性和應用價值

其原理:為什麼小小的螞蟻能夠找到食物?他們具有智能么?設想,如果我們要為螞蟻設計一個人工智慧的程序,那麼這個程序要多麼復雜呢?首先,你要讓螞蟻能夠避開障礙物,就必須根據適當的地形給它編進指令讓他們能夠巧妙的避開障礙物,其次,要讓螞蟻找到食物,就需要讓他們遍歷空間上的所有點;再次,如果要讓螞蟻找到最短的路徑,那麼需要計算所有可能的路徑並且比較它們的大小,而且更重要的是,你要小心翼翼的編程,因為程序的錯誤也許會讓你前功盡棄。這是多麼不可思議的程序!太復雜了,恐怕沒人能夠完成這樣繁瑣冗餘的程序

應用范圍:螞蟻觀察到的范圍是一個方格世界,螞蟻有一個參數為速度半徑(一般是3),那麼它能觀察到的范圍就是3*3個方格世界,並且能移動的距離也在這個范圍之內

引申:跟著螞蟻的蹤跡,你找到了什麼?通過上面的原理敘述和實際操作,我們不難發現螞蟻之所以具有智能行為,完全歸功於它的簡單行為規則,而這些規則綜合起來具有下面兩個方面的特點: 1、多樣性 2、正反饋 多樣性保證了螞蟻在覓食的時候不置走進死胡同而無限循環,正反饋機制則保證了相對優良的信息能夠被保存下來。我們可以把多樣性看成是一種創造能力,而正反饋是一種學習強化能力。正反饋的力量也可以比喻成權威的意見,而多樣性是打破權威體現的創造性,正是這兩點小心翼翼的巧妙結合才使得智能行為涌現出來了。 引申來講,大自然的進化,社會的進步、人類的創新實際上都離不開這兩樣東西,多樣性保證了系統的創新能力,正反饋保證了優良特性能夠得到強化,兩者要恰到好處的結合。如果多樣性過剩,也就是系統過於活躍,這相當於螞蟻會過多的隨機運動,它就會陷入混沌狀態;而相反,多樣性不夠,正反饋機制過強,那麼系統就好比一潭死水。這在蟻群中來講就表現為,螞蟻的行為過於僵硬,當環境變化了,螞蟻群仍然不能適當的調整。 既然復雜性、智能行為是根據底層規則涌現的,既然底層規則具有多樣性和正反饋特點,那麼也許你會問這些規則是哪裡來的?多樣性和正反饋又是哪裡來的?我本人的意見:規則來源於大自然的進化。而大自然的進化根據剛才講的也體現為多樣性和正反饋的巧妙結合。而這樣的巧妙結合又是為什麼呢?為什麼在你眼前呈現的世界是如此栩栩如生呢?答案在於環境造就了這一切,之所以你看到栩栩如生的世界,是因為那些不能夠適應環境的多樣性與正反饋的結合都已經死掉了,被環境淘汰了! 蟻群演算法的實現 下面的程序開始運行之後,螞蟻們開始從窩里出動了,尋找食物;他們會順著屏幕爬滿整個畫面,直到找到食物再返回窩。 其中,『F』點表示食物,『H』表示窩,白色塊表示障礙物,『+』就是螞蟻了。

具體參考http://ke..com/view/539346.htm
希望對你有幫助,謝謝。

㈡ TSP是什麼意思啊

TSP即旅行商問題,即TSP問題(Traveling Salesman Problem)又譯為旅行推銷員問題、貨郎擔問題,是數學領域中著名問題之一。

假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最後要回到原來出發的城市,路徑的選擇目標是要求得的路徑路程為所有路徑之中的最小值。

TSP問題是一個組合優化問題。該問題可以被證明具有NPC計算復雜性。因此,任何能使該問題的求解得以簡化的方法,都將受到高度的評價和關注。

(2)蟻群演算法旅行商問題擴展閱讀:

描述

TSP問題作為圖論問題可以用無向加權圖來對TSP建模,則城市是圖的頂點,道路是圖的邊,道路的距離就是該邊的長度。它是起點和終點都在一個特定頂點,訪問每個頂點恰好一次的最小化問題。通常,該模型是一個完全圖(即每對頂點由一條邊連接)。

如果兩個城市之間不存在路徑,則增加一條非常長的邊就可以完成圖,而不影響計算最優迴路。

TSP問題非對稱和對稱,在對稱TSP問題中,兩座城市之間來回的距離是相等的,形成一個無向圖。這種對稱性將解的數量減少了一半。

㈢ Ubuntu系統下由gcc編譯的C語言利用蟻群演算法計算tsp(旅行商問題)的詳解和注釋

買本書看看去。

你這個只是所有代碼里的一個開頭,我只能解釋這兩句話,解釋了你又不滿意。
我只能叫你去買本書看。

㈣ 在尋優求解過程中,有蟻群演算法和遺傳演算法,用哪種方法更能通俗易懂,容易讓人明白

說實話,這兩種方法都是智能仿生演算法,都比普通的演算法要稍微復雜一些。我不知道你要解決什麼尋優問題,但我推薦你還是用遺傳演算法吧。遺傳演算法應用比蟻群演算法要廣泛,了解的人也較多。蟻群演算法更適合解決尋路問題、旅行商問題等。

㈤ 急!!求圖論中旅行商問題概述以及分析

用個大型演算法吧,什麼神經網路呀,蟻群演算法呀,這就是亮點,還有問題考慮實際點,三個人好好商量一下,一商量問題就好解決了,加油

㈥ 遺傳演算法和蟻群演算法在求解TSP問題上的對比分析

【原創】比遺傳演算法性能更好:蟻群演算法TSP(旅行商問題)通用matlab程序
聲明:本程序為本人原創,在研學論壇首次發表,本人保留一切權利,僅供學習交流用,如轉載請註明原作者!

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)
%%=========================================================================
%% ACATSP.m
%% Ant Colony Algorithm for Traveling Salesman Problem
%% ChengAihua,PLA Information Engineering University,ZhengZhou,China
%% Email:[email protected]
%% All rights reserved
%%-------------------------------------------------------------------------
%% 主要符號說明
%% C n個城市的坐標,n×2的矩陣
%% NC_max 最大迭代次數
%% m 螞蟻個數
%% Alpha 表徵信息素重要程度的參數
%% Beta 表徵啟發式因子重要程度的參數
%% Rho 信息素蒸發系數
%% Q 信息素增加強度系數
%% R_best 各代最佳路線
%% L_best 各代最佳路線的長度
%%=========================================================================

%%第一步:變數初始化
n=size(C,1);%n表示問題的規模(城市個數)
D=zeros(n,n);%D表示完全圖的賦權鄰接矩陣
for i=1:n
for j=1:n
if i~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
else
D(i,j)=eps;
end
D(j,i)=D(i,j);
end
end
Eta=1./D;%Eta為啟發因子,這里設為距離的倒數
Tau=ones(n,n);%Tau為信息素矩陣
Tabu=zeros(m,n);%存儲並記錄路徑的生成
NC=1;%迭代計數器
R_best=zeros(NC_max,n);%各代最佳路線
L_best=inf.*ones(NC_max,1);%各代最佳路線的長度
L_ave=zeros(NC_max,1);%各代路線的平均長度

while NC<=NC_max%停止條件之一:達到最大迭代次數
%%第二步:將m只螞蟻放到n個城市上
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';

%%第三步:m只螞蟻按概率函數選擇下一座城市,完成各自的周遊
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));%已訪問的城市
J=zeros(1,(n-j+1));%待訪問的城市
P=J;%待訪問城市的選擇概率分布
Jc=1;
for k=1:n
if length(find(visited==k))==0
J(Jc)=k;
Jc=Jc+1;
end
end
%下面計算待選城市的概率分布
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%按概率原則選取下一個城市
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end

%%第四步:記錄本次迭代最佳路線
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:);
L_ave(NC)=mean(L);
NC=NC+1

%%第五步:更新信息素
Delta_Tau=zeros(n,n);
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;

%%第六步:禁忌表清零
Tabu=zeros(m,n);
end

%%第七步:輸出結果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:)
Shortest_Length=L_best(Pos(1))
subplot(1,2,1)
DrawRoute(C,Shortest_Route)
subplot(1,2,2)
plot(L_best)
hold on
plot(L_ave)

function DrawRoute(C,R)
%%=========================================================================
%% DrawRoute.m
%% 畫路線圖的子函數
%%-------------------------------------------------------------------------
%% C Coordinate 節點坐標,由一個N×2的矩陣存儲
%% R Route 路線
%%=========================================================================

N=length(R);
scatter(C(:,1),C(:,2));
hold on
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])
hold on
for ii=2:N
plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])
hold on
end

設置初始參數如下:
m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
31城市坐標為:
1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 1970
2562 1756
2788 1491
2381 1676
1332 695
3715 1678
3918 2179
4061 2370
3780 2212
3676 2578
4029 2838
4263 2931
3429 1908
3507 2367
3394 2643
3439 3201
2935 3240
3140 3550
2545 2357
2778 2826
2370 2975

運行後得到15602的巡遊路徑,

㈦ 關於蟻群演算法的問題

第一種情況,如果都是從統一城市出發,並且按照最大概率就沒有意義了,此時不應該按照最大概率,應該是隨機概率。
第二個問題,應該是隨機選擇

㈧ 蟻群演算法中不同路徑信息素不應該相同嗎

因為不同路徑的信息素和啟發信息不同,所以向每條路徑轉移的概率也不同;
具體實現可以運用輪盤賭選擇,轉移概率越大的路徑就會有更多的螞蟻選擇.。
Prime 演算法和 Kruskal 演算法都是用來求加權連通簡單圖中權和最小的支撐樹(即最小樹)的,Prime演算法的時間復雜度為O(n^2) (n 為頂點數),Kruskal 演算法的時間復雜度為 O(eln(e)) (e為邊數),這兩種演算法都是多項式時間演算法,也就是說,最小樹問題已經有了有效演算法去求解,屬於P問題。
Dijkstra 演算法求解的是加權連通簡單圖中一個頂點到其它每個頂點的具有最小權和的有向路,最簡單版本的時間復雜度是O(n^2),也是多項式時間演算法。
而蟻群演算法是一種近似演算法,它不是用來解決已存在精確有效演算法的問題的,而是用來解決至今沒有找到精確的有效演算法的問題的,比如旅行商問題(TSP)。
旅行商問題也可以說是求逗最短路徑地,但它是求一個完全圖的最小哈密頓圈,這個問題至今未找到多項式時間演算法,屬於NPC問題,也就是說,當問題規模稍大一點,現有的精確演算法的運算量就會急劇增加。
文中的某些觀點引自知乎大神余幸恩,感謝幫忙!~

㈨ 蟻群演算法做tsp問題與vrp的代碼有什麼不同

、旅行商問題(Traveling Salesman Problem, TSP) 這個問題字面上的理解是:有一個推銷員,要到n個城市推銷商品,他要找出一個包含所有n個城市的具有最短路程的環路。 TSP的歷史很久,最早的描述是1759年歐拉研究的騎士周遊問題,即對於國際象...

㈩ 蟻群演算法中轉移概率是怎麼用的.不同的螞蟻為什麼會選擇不同的路徑

因為不同路徑的信息素和啟發信息不同,所以向每條路徑轉移的概率也不同。
具體實現可以運用輪盤賭選擇,轉移概率越大的路徑就會有更多的螞蟻選擇。

熱點內容
c語言單元測驗 發布:2025-01-19 07:58:56 瀏覽:990
c語言貪吃蛇源代碼 發布:2025-01-19 07:58:53 瀏覽:879
c語言char數組長度 發布:2025-01-19 07:46:23 瀏覽:10
淘寶如何清理緩存垃圾 發布:2025-01-19 07:42:07 瀏覽:438
電腦輸入密碼階段如何改語言 發布:2025-01-19 07:42:05 瀏覽:786
存儲器國產率 發布:2025-01-19 07:04:36 瀏覽:567
銳程cc藍鯨版選什麼配置 發布:2025-01-19 06:56:28 瀏覽:169
城鎮居民醫保卡的原始密碼是多少 發布:2025-01-19 06:55:54 瀏覽:788
wifi密碼如何修改密碼 發布:2025-01-19 06:39:06 瀏覽:962
sqlserver認證 發布:2025-01-19 06:34:30 瀏覽:815