最大最小蟻群演算法
❶ 蟻群演算法求函數的最小值
未定義函數或變數 'max_global'。
出錯 ant_main_program (line 107)
if max_local(i_ger) > max_global(i_ger-1)
怎麼解決
❷ 如何用蟻群演算法來計算固定時間內走更多的城市且路程最短
概念:蟻群演算法(ant colony optimization,ACO),又稱螞蟻演算法,是一種用來在圖中尋找優化路徑的機率型演算法.它由Marco Dorigo於1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行為.蟻群演算法是一種模擬進化演算法,初步的研究表明該演算法具有許多優良的性質.針對PID控制器參數優化設計問題,將蟻群演算法設計的結果與遺傳演算法設計的結果進行了比較,數值模擬結果表明,蟻群演算法具有一種新的模擬進化優化方法的有效性和應用價值
其原理:為什麼小小的螞蟻能夠找到食物?他們具有智能么?設想,如果我們要為螞蟻設計一個人工智慧的程序,那麼這個程序要多麼復雜呢?首先,你要讓螞蟻能夠避開障礙物,就必須根據適當的地形給它編進指令讓他們能夠巧妙的避開障礙物,其次,要讓螞蟻找到食物,就需要讓他們遍歷空間上的所有點;再次,如果要讓螞蟻找到最短的路徑,那麼需要計算所有可能的路徑並且比較它們的大小,而且更重要的是,你要小心翼翼的編程,因為程序的錯誤也許會讓你前功盡棄.這是多麼不可思議的程序!太復雜了,恐怕沒人能夠完成這樣繁瑣冗餘的程序
應用范圍:螞蟻觀察到的范圍是一個方格世界,螞蟻有一個參數為速度半徑(一般是3),那麼它能觀察到的范圍就是3*3個方格世界,並且能移動的距離也在這個范圍之內
引申:跟著螞蟻的蹤跡,你找到了什麼?通過上面的原理敘述和實際操作,我們不難發現螞蟻之所以具有智能行為,完全歸功於它的簡單行為規則,而這些規則綜合起來具有下面兩個方面的特點:1、多樣性 2、正反饋 多樣性保證了螞蟻在覓食的時候不置走進死胡同而無限循環,正反饋機制則保證了相對優良的信息能夠被保存下來.我們可以把多樣性看成是一種創造能力,而正反饋是一種學習強化能力.正反饋的力量也可以比喻成權威的意見,而多樣性是打破權威體現的創造性,正是這兩點小心翼翼的巧妙結合才使得智能行為涌現出來了.引申來講,大自然的進化,社會的進步、人類的創新實際上都離不開這兩樣東西,多樣性保證了系統的創新能力,正反饋保證了優良特性能夠得到強化,兩者要恰到好處的結合.如果多樣性過剩,也就是系統過於活躍,這相當於螞蟻會過多的隨機運動,它就會陷入混沌狀態;而相反,多樣性不夠,正反饋機制過強,那麼系統就好比一潭死水.這在蟻群中來講就表現為,螞蟻的行為過於僵硬,當環境變化了,螞蟻群仍然不能適當的調整.既然復雜性、智能行為是根據底層規則涌現的,既然底層規則具有多樣性和正反饋特點,那麼也許你會問這些規則是哪裡來的?多樣性和正反饋又是哪裡來的?我本人的意見:規則來源於大自然的進化.而大自然的進化根據剛才講的也體現為多樣性和正反饋的巧妙結合.而這樣的巧妙結合又是為什麼呢?為什麼在你眼前呈現的世界是如此栩栩如生呢?答案在於環境造就了這一切,之所以你看到栩栩如生的世界,是因為那些不能夠適應環境的多樣性與正反饋的結合都已經死掉了,被環境淘汰了!蟻群演算法的實現 下面的程序開始運行之後,螞蟻們開始從窩里出動了,尋找食物;他們會順著屏幕爬滿整個畫面,直到找到食物再返回窩.其中,『F』點表示食物,『H』表示窩,白色塊表示障礙物,『+』就是螞蟻了.
❸ 蟻群演算法的概念,最好能舉例說明一些蟻群演算法適用於哪些問題!
概念:蟻群演算法(ant colony optimization, ACO),又稱螞蟻演算法,是一種用來在圖中尋找優化路徑的機率型演算法。它由Marco Dorigo於1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行為。蟻群演算法是一種模擬進化演算法,初步的研究表明該演算法具有許多優良的性質.針對PID控制器參數優化設計問題,將蟻群演算法設計的結果與遺傳演算法設計的結果進行了比較,數值模擬結果表明,蟻群演算法具有一種新的模擬進化優化方法的有效性和應用價值
其原理:為什麼小小的螞蟻能夠找到食物?他們具有智能么?設想,如果我們要為螞蟻設計一個人工智慧的程序,那麼這個程序要多麼復雜呢?首先,你要讓螞蟻能夠避開障礙物,就必須根據適當的地形給它編進指令讓他們能夠巧妙的避開障礙物,其次,要讓螞蟻找到食物,就需要讓他們遍歷空間上的所有點;再次,如果要讓螞蟻找到最短的路徑,那麼需要計算所有可能的路徑並且比較它們的大小,而且更重要的是,你要小心翼翼的編程,因為程序的錯誤也許會讓你前功盡棄。這是多麼不可思議的程序!太復雜了,恐怕沒人能夠完成這樣繁瑣冗餘的程序
應用范圍:螞蟻觀察到的范圍是一個方格世界,螞蟻有一個參數為速度半徑(一般是3),那麼它能觀察到的范圍就是3*3個方格世界,並且能移動的距離也在這個范圍之內
引申:跟著螞蟻的蹤跡,你找到了什麼?通過上面的原理敘述和實際操作,我們不難發現螞蟻之所以具有智能行為,完全歸功於它的簡單行為規則,而這些規則綜合起來具有下面兩個方面的特點: 1、多樣性 2、正反饋 多樣性保證了螞蟻在覓食的時候不置走進死胡同而無限循環,正反饋機制則保證了相對優良的信息能夠被保存下來。我們可以把多樣性看成是一種創造能力,而正反饋是一種學習強化能力。正反饋的力量也可以比喻成權威的意見,而多樣性是打破權威體現的創造性,正是這兩點小心翼翼的巧妙結合才使得智能行為涌現出來了。 引申來講,大自然的進化,社會的進步、人類的創新實際上都離不開這兩樣東西,多樣性保證了系統的創新能力,正反饋保證了優良特性能夠得到強化,兩者要恰到好處的結合。如果多樣性過剩,也就是系統過於活躍,這相當於螞蟻會過多的隨機運動,它就會陷入混沌狀態;而相反,多樣性不夠,正反饋機制過強,那麼系統就好比一潭死水。這在蟻群中來講就表現為,螞蟻的行為過於僵硬,當環境變化了,螞蟻群仍然不能適當的調整。 既然復雜性、智能行為是根據底層規則涌現的,既然底層規則具有多樣性和正反饋特點,那麼也許你會問這些規則是哪裡來的?多樣性和正反饋又是哪裡來的?我本人的意見:規則來源於大自然的進化。而大自然的進化根據剛才講的也體現為多樣性和正反饋的巧妙結合。而這樣的巧妙結合又是為什麼呢?為什麼在你眼前呈現的世界是如此栩栩如生呢?答案在於環境造就了這一切,之所以你看到栩栩如生的世界,是因為那些不能夠適應環境的多樣性與正反饋的結合都已經死掉了,被環境淘汰了! 蟻群演算法的實現 下面的程序開始運行之後,螞蟻們開始從窩里出動了,尋找食物;他們會順著屏幕爬滿整個畫面,直到找到食物再返回窩。 其中,『F』點表示食物,『H』表示窩,白色塊表示障礙物,『+』就是螞蟻了。
具體參考http://ke..com/view/539346.htm
希望對你有幫助,謝謝。
❹ 求一份用matlab蟻群演算法求3元函數最小值或最大值的源碼
給你一個二元函數的,自己看著加一個變數應該就差不多了。
可以直接運行,效果還是挺好的。簡單的函數肯定沒什麼問題,遇到很麻煩的函數就不保證結果了。
❺ 蟻群演算法信息素初始化怎麼選擇大小
主要是根據經驗值來設置,經驗值來源於N多相關問題中的科研人員的實驗數據。
通過試錯法求出,根據實驗結果的優劣做出選擇。
❻ 求帶注釋的蟻群演算法
Sorry,沒有注釋!
放不下,網站上有!
下面就是實現如此復雜性的七條簡單規則:
1、范圍:
螞蟻觀察到的范圍是一個方格世界,螞蟻有一個參數為速度半徑(一般是3),那麼它能觀察到的范圍就是33個方格世界,並且能移動的距離也在這個范圍之內。
2、環境:
螞蟻所在的環境是一個虛擬的世界,其中有障礙物,有別的螞蟻,還有信息素,信息素有兩種,一種是找到食物的螞蟻灑下的食物信息素,一種是找到窩的螞蟻灑下的窩的信息素。每個螞蟻都僅僅能感知它范圍內的環境信息。環境以一定的速率讓信息素消失。
3、覓食規則:
在每隻螞蟻能感知的范圍內尋找是否有食物,如果有就直接過去。否則看是否有信息素,並且比較在能感知的范圍內哪一點的信息素最多,這樣,它就朝信息素多的地方走,並且每隻螞蟻多會以小概率犯錯誤,從而並不是往信息素最多的點移動。螞蟻找窩的規則和上面一樣,只不過它對窩的信息素做出反應,而對食物信息素沒反應。
4、移動規則:
每隻螞蟻都朝向信息素最多的方向移,並且,當周圍沒有信息素指引的時候,螞蟻會按照自己原來運動的方向慣性的運動下去,並且,在運動的方向有一個隨機的小的擾動。為了防止螞蟻原地轉圈,它會記住最近剛走過了哪些點,如果發現要走的下一點已經在最近走過了,它就會盡量避開。
5、避障規則:
如果螞蟻要移動的方向有障礙物擋住,它會隨機的選擇另一個方向,並且有信息素指引的話,它會按照覓食的規則行為。
7、播撒信息素規則:
每隻螞蟻在剛找到食物或者窩的時候撒發的信息素最多,並隨著它走遠的距離,播撒的信息素越來越少。
下面的程序開始運行之後,螞蟻們開始從窩里出動了,尋找食物;他們會順著屏幕爬滿整個畫面,直到找到食物再返回窩。
其中,『F』點表示食物,『H』表示窩,白色塊表示障礙物,『+』就是螞蟻了。
參數說明:
最大信息素:螞蟻在一開始擁有的信息素總量,越大表示程序在較長一段時間能夠存在信息素。信息素消減的速度:隨著時間的流逝,已經存在於世界上的信息素會消減,這個數值越大,那麼消減的越快。
錯誤概率表示這個螞蟻不往信息素最大的區域走的概率,越大則表示這個螞蟻越有創新性。
速度半徑表示螞蟻一次能走的最大長度,也表示這個螞蟻的感知范圍。
記憶能力表示螞蟻能記住多少個剛剛走過點的坐標,這個值避免了螞蟻在本地打轉,停滯不前。而這個值越大那麼整個系統運行速度就慢,越小則螞蟻越容易原地轉圈。
源代碼如下:
ant.c
#define SPACE 0×20
#define ESC 0×1b
#define ANT_CHAR_EMPTY 『+』
#define ANT_CHAR_FOOD 153
#define HOME_CHAR 『H』
#define FOOD_CHAR 『F』
#define FOOD_CHAR2 『f』
#define FOOD_HOME_COLOR 12
#define BLOCK_CHAR 177
#define MAX_ANT 50
#define INI_SPEED 3
#define MAXX 80
#define MAXY 23
#define MAX_FOOD 10000
#define TARGET_FOOD 200
#define MAX_SMELL 5000
#define SMELL_DROP_RATE 0.05
#define ANT_ERROR_RATE 0.02
#define ANT_EYESHOT 3
#define SMELL_GONE_SPEED 50
#define SMELL_GONE_RATE 0.05
#define TRACE_REMEMBER 50
#define MAX_BLOCK 100
#define NULL 0
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define SMELL_TYPE_FOOD 0
#define SMELL_TYPE_HOME 1
#include 「stdio.h」
#include 「conio.h」
#include 「dos.h」
#include 「stdlib.h」
#include 「dos.h」
#include 「process.h」
#include 「ctype.h」
#include 「math.h」
void WorldInitial(void);
void BlockInitial(void);
void CreatBlock(void);
void SaveBlock(void);
void LoadBlock(void);
void HomeFoodInitial(void);
void AntInitial(void);
void WorldChange(void);
void AntMove(void);
void AntOneStep(void);
void DealKey(char key);
void ClearSmellDisp(void);
void DispSmell(int type);
int AntNextDir(int xxx,int yyy,int ddir);
int GetMaxSmell(int type,int xxx,int yyy,int ddir);
int IsTrace(int xxx,int yyy);
int MaxLocation(int num1,int num2,int num3);
int CanGo(int xxx,int yyy,int ddir);
int JudgeCanGo(int xxx,int yyy);
int TurnLeft(int ddir);
int TurnRight(int ddir);
int TurnBack(int ddir);
int MainTimer(void);
char WaitForKey(int secnum);
void DispPlayTime(void);
int TimeUse(void);
void HideCur(void);
void ResetCur(void);
—————
struct HomeStruct
{
int xxx,yyy;
int amount;
int TargetFood;
}home;
struct FoodStruct
{
int xxx,yyy;
int amount;
}food;
struct AntStruct
{
int xxx,yyy;
int dir;
int speed;
int SpeedTimer;
int food;
int SmellAmount[2];
int tracex[TRACE_REMEMBER];
int tracey[TRACE_REMEMBER];
int TracePtr;
int IQ;
}ant[MAX_ANT];
int AntNow;
int timer10ms;
struct time starttime,endtime;
int Smell[2][MAXX+1][MAXY+1];
int block[MAXX+1][MAXY+1];
int SmellGoneTimer;
int SmellDispFlag;
int CanFindFood;
int HardtoFindPath;
—– Main ——–
void main(void)
{
char KeyPress;
int tu;
clrscr();
HideCur();
WorldInitial();
do
{
timer10ms = MainTimer();
if(timer10ms) AntMove();
if(timer10ms) WorldChange();
tu = TimeUse();
if(tu=60&&!CanFindFood)
{
gotoxy(1,MAXY+1);
printf(「Can not find food, maybe a block world.」);
WaitForKey(10);
WorldInitial();
}
if(tu=180&&home.amount100&&!HardtoFindPath)
{
gotoxy(1,MAXY+1);
printf(「God! it is so difficult to find a path.」);
if(WaitForKey(10)==0×0d) WorldInitial();
else
{
HardtoFindPath = 1;
gotoxy(1,MAXY+1);
printf(」 「);
}
}
if(home.amount=home.TargetFood)
{
gettime(&endtime);
KeyPress = WaitForKey(60);
DispPlayTime();
WaitForKey(10);
WorldInitial();
}
else if(kbhit())
{
KeyPress = getch();
DealKey(KeyPress);
}
else KeyPress = NULL;
}
while(KeyPress!=ESC);
gettime(&endtime);
DispPlayTime();
WaitForKey(10);
clrscr();
ResetCur();
}
❼ 蟻群演算法的執行結果一定收斂與全局最優解嗎
什麼是啟發式演算法轉自:p://blog.csdn.net/aris_zzy/archive/2006/05/27/757156.aspx引言:解決實際的問題,要建模型,在求解。求解要選擇演算法,只有我們對各種演算法的優缺點都很熟悉後才能根據實際問題選出有效的演算法。但是對各種演算法都了如指掌是不現實的,但多知道一些,會使你的選擇集更大,找出最好演算法的概率越大。現在研一,要開題了些點文獻綜述,願與大家分享。大自然是神奇的,它造就了很多巧妙的手段和運行機制。受大自然的啟發,人們從大自然的運行規律中找到了許多解決實際問題的方法。對於那些受大自然的運行規律或者面向具體問題的經驗、規則啟發出來的方法,人們常常稱之為啟發式演算法(Heuristic Algorithm)。現在的啟發式演算法也不是全部來自然的規律,也有來自人類積累的工作經驗。啟發式演算法的發展:啟發式演算法的計算量都比較大,所以啟發式演算法伴隨著計算機技術的發展,取得了巨大的成就。40年代:由於實際需要,提出了啟發式演算法(快速有效)。50年代:逐步繁榮,其中 貪婪演算法和局部搜索 等到人們的關注。60年代: 反思,發現以前提出的啟發式演算法速度很快,但是解得質量不能保證,而且對大規 模的問題仍然無能為力(收斂速度慢)。啟發式演算法的不足和如何解決方法:(水平有限 僅僅提出6點)啟發式演算法目前缺乏統一、完整的理論體系。很難解決! 啟發式演算法的提出就是根據經驗提出,沒有什麼堅實的理論基礎。由於NP理論,啟發式演算法就解得全局最優性無法保證。等NP?=P有結果了再說吧,不知道這個世紀能不能行。各種啟發式演算法都有個自優點如何,完美結合。如果你沒有實際經驗,你就別去干這個,相結合就要做大量嘗試,或許會有意外的收獲。啟發式演算法中的參數對演算法的效果起著至關重要的作用,如何有效設置參數。還是那句話,這是經驗活但還要悟性,只有try again………..啟發演算法缺乏有效的迭代停止條件。還是經驗,迭代次數100不行,就200,還不行就1000…………還不行估計就是演算法有問題,或者你把它用錯地方了………..啟發式演算法收斂速度的研究等。你會發現,沒有完美的東西,要快你就要付出代價,就是越快你得到的解也就遠差。其中(4)集中反映了超啟發式演算法的克服局部最優的能力。雖然人們研究對啟發式演算法的研究將近50年,但它還有很多不足:1.啟發式演算法目前缺乏統一、完整的理論體系。2.由於NP理論,各種啟發式演算法都不可避免的遭遇到局部最優的問題,如何判斷3.各種啟發式演算法都有個自優點如何,完美結合。4.啟發式演算法中的參數對演算法的效果起著至關重要的作用,如何有效設置參數。5.啟發演算法缺乏有效的迭代停止條件。6.啟發式演算法收斂速度的研究等。70年代:計算復雜性理論的提出,NP問題。許多實際問題不可能在合理的時間范圍內找到全局最優解。發現貪婪演算法和局部搜索演算法速度快,但解不好的原因主要是他們只是在局部的區域內找解,等到的解沒有全局最優性。 由此必須引入新的搜索機制和策略……….. Holland的遺傳演算法出現了(Genetic Algorithm)再次引發了人們研究啟發式演算法的 興趣。80年代以後: 模擬退火演算法(Simulated Annealing Algorithm),人工神經網路(Artificial Neural Network),禁忌搜索(Tabu Search)相繼出現。 最近比較熱或剛熱過去的:演化演算法(Evolutionary Algorithm), 蟻群演算法(Ant Algorithms), 擬人擬物演算法,量子演算法等。各個演算法的思想這就不再詳細給出(以後會給出一些,關注我的blog) ,為什麼要引出啟發式演算法,因為NP問題,一般的經典演算法是無法求解,或求解時間過長,我們無法接受。這里要說明的是:啟發式演算法得到的解只是近似最優解(近似到什麼程度,只有根據具體問題才能給出). 二十一世紀的最大的數學難題NP?=P,如果NP=P啟發式演算法就不在有存在的意義。 優勝劣汰是大自然的普遍規律,它主要通過選擇和變異來實現。選擇是優化的基本思想,變異(多樣化)是隨機搜索或非確定搜索的基本思想。「優勝劣汰」是演算法搜索的核心,根據「優勝劣汰」策略的不同,可以獲得不
❽ 蟻群演算法QoS組播路由問題求助
1.."優先權"和"IP優先"的關系是什麼?
優先權"和"IP優先"都是QOS的控制過程。
對同一流中的不同數據包發送處理的過程簡單來講
情況一
在設備能夠完全輕松的處理數據包是
QOS的功能並不明顯
情況二
在設備不能線型處理時
QOS開始發揮作用IP優先順序,在隊列里把數據包分為0,1,2,3.。個級別
進行優先處理7為最高
情況三
在情況二無法應對的時候
在不能入站(進入隊列)就存在抖動緩沖區里,緩沖區滿了,丟棄包
這里還沒有用到「優先順序」
優先順序發揮作用是用在語音等低延遲的數據包中。
比如說網路MP3試聽。。語音包對網路的要求很高。。在聽MP3是經常會有
緩沖0%的時候,這是就用到優先順序,發生這一情況的原因是抖動緩沖區中的
為空也就是沒有。只能等待數據進入空的緩沖區里,優先順序高的先進。
2.IP服務類型里,"最大可靠性","最大吞吐量","最小延遲"
Tos這個服務說實話,已經過時了,大多應用程序不支持。建議配置正常服務就好了。
Tos是一般針對網路控制服務來說的,像telnet ftp,icmp,dns,snmp來講的
因為比如telnet要求最低延遲,因為它是傳輸數量少的交換數據
ftp要求最大吞吐量,因為傳輸大量的數據,snmp要求最大可靠性
3.最後一行802.1p的優先權又是指什麼?
傳統地講,802.1p優先順序(也叫Cos)是針對交換機的,ip優先順序針對路由器的。想一些功能高的交換機支持
802.1p優先順序也支持IP優先。
拓撲圖有交換機 路由器就都配置。
4.要保證qq和msn語音視頻聊天的通暢,目標地址或埠應該怎麼設?
只是理論,
拓撲圖不知道。。。目的埠就是要進行標記的設備(),把數據包進行標記
轉發數據後,其他的設備實行QOS機制就可以了。、
vpn好弄 隧道兩頭就可以。。現在不好說
埠qq msn都有固定的埠號。。細節PASS
5.要設置bt,迅雷,電驢的優先順序為最低,該怎麼設置.
ip優先順序0 802.1q 0 tos 正常 優先順序低
❾ 我想問用MATLAB基本蟻群演算法求解TSP問題為什麼和用LINGO求TSP得出的結果那麼大,
如果不限制城市數量,需要找到自適應的演算法參數。
如果可以找到自適應演算法參數的情況下,或者說能得到與城市數量相關的參數設置函數,不限定城市數量應該也是可以的。
❿ 蟻群演算法中轉移概率是怎麼用的.不同的螞蟻為什麼會選擇不同的路徑
因為不同路徑的信息素和啟發信息不同,所以向每條路徑轉移的概率也不同;
具體實現可以運用輪盤賭選擇,轉移概率越大的路徑就會有更多的螞蟻選擇.。
Prime 演算法和 Kruskal 演算法都是用來求加權連通簡單圖中權和最小的支撐樹(即最小樹)的,Prime演算法的時間復雜度為O(n^2) (n 為頂點數),Kruskal 演算法的時間復雜度為 O(eln(e)) (e為邊數),這兩種演算法都是多項式時間演算法,也就是說,最小樹問題已經有了有效演算法去求解,屬於P問題。
Dijkstra 演算法求解的是加權連通簡單圖中一個頂點到其它每個頂點的具有最小權和的有向路,最簡單版本的時間復雜度是O(n^2),也是多項式時間演算法。
而蟻群演算法是一種近似演算法,它不是用來解決已存在精確有效演算法的問題的,而是用來解決至今沒有找到精確的有效演算法的問題的,比如旅行商問題(TSP)。
旅行商問題也可以說是求「最短路徑」,但它是求一個完全圖的最小哈密頓圈,這個問題至今未找到多項式時間演算法,屬於NPC問題,也就是說,當問題規模稍大一點,現有的精確演算法的運算量就會急劇增加。
文中的某些觀點引自知乎大神余幸恩,感謝幫忙!~