启发式算法在最优化问题求解中的应用与实践
最優(yōu)化問題廣泛的存在于社會生產(chǎn)活動當中,我們一直努力尋求更高效、更準確的解決方式來應(yīng)對這類問題。通常,最優(yōu)化問題可以表述為一種數(shù)學規(guī)劃的形式,對于變量在可行域中的不同組合進行搜索,以得到目標函數(shù)的最優(yōu)值。在解決常規(guī)的最優(yōu)化問題時,有多種解決方案,如梯度下降法,拉格朗日乘數(shù)法等。然而,有一類最優(yōu)化問題卻是人類目前難以逾越的門檻,即NP完全問題(Non-deterministicPolynomial)。本文介紹了最優(yōu)化問題的常見應(yīng)用場景和求解方式,并重點對啟發(fā)式算法在求解NP問題的次優(yōu)解過程進行了分析。最后通過模擬退火算法和蟻群算法尋求最優(yōu)化路徑的實例,實踐了通過啟發(fā)式算法來求解NP問題的次優(yōu)解,為我們在日常生產(chǎn)活動中解決此類時間復(fù)雜度具有不確定性的最優(yōu)化問題提供一種成本可控,目標效益更高的解決方案。
1
引言
在日常生產(chǎn)活動中,我們經(jīng)常會面臨諸如:超市的配貨卡車需要給不同的門店送去貨物,如何規(guī)劃卡車的配貨路線,使得每個門店均可接收到貨物,并且卡車配送所花時間和行駛里程最短;某視頻門戶網(wǎng)站需要在全國各地設(shè)立視頻資源存放服務(wù)器,一方面要保證服務(wù)器部署節(jié)點能夠覆蓋所有的用戶,并且要降低從用戶到服務(wù)器之間的鏈路成本,提高用戶請求視頻資源的響應(yīng)效率,另一方面要盡量減少服務(wù)器部署節(jié)點,以降低經(jīng)濟成本;這類路線規(guī)劃和資源配置問題均可歸類到最優(yōu)化問題的求解范疇。解決最優(yōu)化問題的方法被稱為最優(yōu)化方法,常見的最優(yōu)化方法有以下幾類:1)梯度下降法;2)牛頓法;3)共軛梯度法;4)拉格朗日乘數(shù)法;5)啟發(fā)式算法。這五類算法每一種都有自己適用的場景和其優(yōu)勢,因此在解決最優(yōu)化問題前,分析應(yīng)用場景,選取合適的最優(yōu)化方法是首要任務(wù)。 計算機科學的兩大基礎(chǔ)目標是:發(fā)現(xiàn)可證明其執(zhí)行效率良好且可得到問題的最優(yōu)解或次優(yōu)解的算法。而在最優(yōu)化問題中,有這樣一類問題卻是目前人類難以逾越的門檻——NP完全問題,該問題也是世界七大數(shù)學難題之一(其中龐加萊猜想現(xiàn)已被俄羅斯數(shù)學家格里戈里·佩雷爾曼解決)。NP即多項式復(fù)雜程度的非確定性問題,所有的在非確定性多項式時間可解的判定問題構(gòu)成了NP類問題。在解決這類問題時,常規(guī)的確定性時間復(fù)雜度的算法不再適用,而啟發(fā)式算法這類非確定性時間復(fù)雜度的算法,卻能夠較好的尋找到該類問題的一個可以接受的次優(yōu)解。通常,啟發(fā)式算法搜索得到的問題的解不是最優(yōu)解,而是隨著算法的改進和迭代無限接近最優(yōu)解的次優(yōu)解。因為目前,我們找不到一個更好的算法,能夠證明其執(zhí)行效率良好、穩(wěn)定,并且能得到問題最優(yōu)解的算法,所以啟發(fā)式算法是目前我們解決這類問題的一種較好手段。 常用的啟發(fā)式算法有模擬退火算法、遺傳算法、蟻群算法和人工神經(jīng)網(wǎng)絡(luò)等。以上這些算法我們都不能給出其確定的執(zhí)行時間復(fù)雜度,也不能證明其求解得到的解是否是問題的最優(yōu)解。而是能夠在大多數(shù)情況下,在“可接受”的時間開銷內(nèi)得到問題的一個“較好”的解。評價“可接受”的依據(jù)是能夠保證生產(chǎn)的基本時間開銷要求,評價“較好”的依據(jù)是,所得到的雖然不是最優(yōu)解,卻是一個能夠滿足生產(chǎn)活動需求并且?guī)砀笮б娴慕狻R虼藢W習研究啟發(fā)式算法對于我們在日常生產(chǎn)活動中解決某些最優(yōu)化問題有著重要作用和意義。啟發(fā)式算法領(lǐng)域也在近幾年得到了廣泛的應(yīng)用和研究,如人工神經(jīng)網(wǎng)絡(luò)應(yīng)用于機器學習等領(lǐng)域的研究。另外三種啟發(fā)式算法,均為仿自然界生物現(xiàn)象的算法。模擬退火算法來源于固體退火的過程,用于求解組合優(yōu)化類問題;遺傳算法模擬了達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程,用于解決搜索類問題;蟻群算法模擬了螞蟻尋找食物過程中發(fā)現(xiàn)路徑的行為,用于解決路徑優(yōu)化問題,也是一種比較有趣的算法。 本文的主要工作是; 1)對最優(yōu)化問題及其常見的應(yīng)用場景和解決方法進行了介紹和分析; 2)分析講解了P類問題,NP類問題和NP完全問題(NP-C問題); 3)介紹了常見的啟發(fā)式算法及其應(yīng)用,并重點就模擬退火算法和蟻群算法為代表的啟發(fā)式算法解決NP類問題進行了講解和實踐。2
常見最優(yōu)化問題及其解決方法
2.1下山最優(yōu)路徑問題與梯度下降法 如下圖2.1所示,假設(shè)有一座山,四周都是濃霧,看不清任何東西。如何在山頂?shù)腁點出發(fā),找到一條去山腳的最快路徑,這就是一個最優(yōu)化問題。在解決這個問題時,我們把這座山看作可微分的函數(shù),山的高度看作函數(shù)的目標值,也就是要找到一條路徑,使得函數(shù)值下降得最快,就可以找到最快下山的路徑。 圖2.1. 梯度下降法 建立一個平面坐標系后,將山上每個點的高度看作關(guān)于的函數(shù):? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(1) 站在A點的時候,通過求該點的梯度,梯度是一個向量,該向量的方向指向了函數(shù)值增長最快的方向。因此要下山最快,就沿著與梯度方向相反的方向走。當函數(shù)是單變量時,梯度即為導數(shù);當函數(shù)為多變量時,梯度即為分別對每個自變量求偏導后構(gòu)成的一個向量。采用梯度下降的算法有SGD,Adam。 2.2非線性函數(shù)與X軸交點問題與牛頓法 圖2.2. 牛頓法 如圖2.2所示,牛頓法主要用于解決研究問題中的目標值是關(guān)于變量的非線性函數(shù),且在可行域中只有一個交點,但是通過數(shù)學計算方法無法求得精確的交點。牛頓法提供了一種通過迭代的方式無限逼近交點,其思想為從某一點出發(fā),求得該點處函數(shù)的切線,得到切線與x軸的交點記作,再次求處的切線,得到下一個交點,就這樣無限的逼近函數(shù)與x軸的交點。 牛頓法能夠快速收斂于最優(yōu)值的原因是:當函數(shù)任意階可導時,通過展開為泰勒級數(shù),取泰勒級數(shù)一階展開式構(gòu)建的線性函數(shù)來代替曲線,因為從微觀的角度看,極小的區(qū)間內(nèi),曲線就趨近于直線。而牛頓法需要求解函數(shù)在區(qū)間內(nèi)的二階偏倒數(shù),因此要求函數(shù)二階連續(xù)可微。LM算法即采用的牛頓法。 2.3牛頓法的改進——擬牛頓法 從上面介紹的牛頓法可知,雖然收斂速度較快,但是需要計算目標函數(shù)的二階偏導數(shù)來構(gòu)建線性函數(shù),該過程計算復(fù)雜度較大,并且目標函數(shù)的黑塞矩陣不是所有時候都保持正定,牛頓法在這種情況下就失效了。而擬牛頓法就是為了解決計算復(fù)雜度大,黑塞矩陣有時不是正定的問題而提出的。擬牛頓法的改進思想是:不用二階偏導數(shù)近似的構(gòu)造黑塞矩陣(或其逆矩陣)的正定對稱陣。使用較多的擬牛頓算法有DFP,BFGS和L-BFGS。 以上介紹的三種最優(yōu)化算法是機器學習中最常用的三類迭代算法。表格2.1給出了三種算法的特點對比和常見應(yīng)用場景。 表2.1三種最優(yōu)化算法的特征對比| 算法 | 迭代時間復(fù)雜度 | 算法收斂速度 | 初始值要求 | 應(yīng)用場景 |
| 梯度下降法 | 需計算一階導,復(fù)雜度為 | 收斂較慢 | 容易逃離鞍點(一階倒數(shù)為0) | 特征維度較大的場景 |
| 牛頓法 | 需計算二階導,復(fù)雜度為 | 收斂快 | 有要求,非凸函數(shù)容易陷入鞍點 | 特征維度較小的場景 |
| 擬牛頓法 | 近似Hessian矩陣的逆矩陣,復(fù)雜度為 | 收斂快 | 無明顯要求 | 比較適合凸優(yōu)化問題 |
2.4拉格朗日乘數(shù)法 拉格朗日乘數(shù)法由法國著名數(shù)學家約瑟夫·拉格朗日提出,用于求解多元函數(shù)在變量受一個或多個限制條件約束下的極值問題。假設(shè)一個多元函數(shù)有個變量,需要求解個約束條件下的極值,拉格朗日乘數(shù)法通過將該最優(yōu)化問題轉(zhuǎn)化為一個有個變量的函數(shù)的極值問題。在這個轉(zhuǎn)化過程中,需要引入一個新的參數(shù),即拉格朗日乘數(shù):新構(gòu)建的方程組中,每個向量的系數(shù)。 下面我們看這樣一個最優(yōu)化問題的情境:有一個紡織工廠主想要盡可能的提高其工廠利潤,假設(shè)在廠房(足夠使用)等外部條件固定時,利潤函數(shù)與投入的紡織機數(shù)量和雇傭的工人數(shù)量有關(guān),假設(shè)可表示為,因為紡織機的數(shù)量和工人數(shù)量必須構(gòu)成一定的比例關(guān)系,才能不造成工人空閑或工人照看不了過多的紡織機,該比例關(guān)系表示為,由于工廠主的資金有限,最多能夠為紡織機購置和工人雇傭支付的金額。因此需要滿足:,由于在廠房夠用的情況下,工廠主希望能夠以最大的資金投入,來獲取更多的回報,因此,可以得到。接著,將上面的收益函數(shù)在約束條件最大化表示為以下形式:? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ?(2)
此時引入兩個新的參數(shù)構(gòu)建方程:? ?????????????? ? ? ? ?? ? ? ? ? ?(3)
然后令函數(shù)對自變量分別求一階偏導數(shù)的值為0,可得到:? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? (4)
通過求解上述方程組(4)即可得到工廠主的利潤函數(shù)z的極值,這里的極值有可能是最小值,也有可能是最大值。如果求得的極值點只有一個,那么該極值點就是問題的最優(yōu)解,因為不可能是最小值(不投入資金時候收益為0)。當求得的極值點有多個時候,我們很容易把這幾個極值點代入到利潤函數(shù)z中去,通過比較計算得到的值,其中最大值對應(yīng)的極值點,就是問題的最優(yōu)解。 2.5啟發(fā)式算法 啟發(fā)式算法的定義是:一個基于直觀或經(jīng)驗構(gòu)造的算法,在可接受的花費(指計算時間和空間)下給出待解決組合優(yōu)化問題每一個實例的一個可行解,該可行解與最優(yōu)解的偏離程度一般不能被預(yù)計(來源于百度百科)。常見的啟發(fā)式算法有:模擬退火算法,遺傳算法,蟻群算法和神經(jīng)網(wǎng)絡(luò),均為仿自然體的算法。 2.5.1模擬退火算法 模擬退火算法是是仿固體退火原理,當固體被加溫時,內(nèi)能增大,粒子的動能增大,處于無序狀態(tài),而溫度逐漸降低過程中,粒子會逐漸趨于穩(wěn)定有序,內(nèi)能達到最低。在這一過程中,粒子的排列組合決定了內(nèi)能的大小,但固體最終會形成一種內(nèi)能最低的狀態(tài)。模擬退火算法就是模擬的這個隨著溫度下降,內(nèi)能降低的過程。通常可以用來解決復(fù)雜度較高的組合問題。 圖2.3. 模擬退火算法示意圖 在圖2.3中,固體初始溫度低,粒子排列較為緊密,但不是最緊密的狀態(tài)。此時將固體加熱,粒子由于吸熱內(nèi)能變大,熱運動變強烈,粒子間距離增大。隨著溫度逐漸降低,最終粒子會趨于平衡狀態(tài),粒子排列最為緊密,內(nèi)能最低。這種粒子排列組合狀態(tài),就是使得內(nèi)能最低的最優(yōu)狀態(tài)。 2.5.2遺傳算法 遺傳算法模擬的是達爾文的生物進化理論,處理方法包括“選擇運算”,“交叉算子”和“變異運算”,評價和選擇指標則是“適者生存”。因為啟發(fā)式算法主要用來解決搜索最優(yōu)解復(fù)雜度較高的問題,常規(guī)的“蠻力法”搜索通常極為耗費資源,且不能在可接受的時間內(nèi)得到問題的解。那么,啟發(fā)式算法必須按照一種更“合理”的搜索方式來逼近問題的最優(yōu)解,遺傳算法就是按照生物進化論的方式來搜索,將每次得到的個體(問題的一個可行解),通過一個適應(yīng)度來評價,適應(yīng)度越高,距離最優(yōu)解的距離也就越近。因此,在每次跌倒過程中,適應(yīng)度越高的個體,其基因遺傳下去的概率會更大,這就是“適者生存”。并且,個體基因遺傳下去的方式有:直接遺傳給下一代,或者與其他個體配對后遺傳(選擇運算);當兩個個體配對時,必須按照一定的規(guī)則來繼承上一代的基因,這個規(guī)則就是“交叉算子”;在遺傳的過程中,個體的基因會有一定概率發(fā)生改變,基因改變的過程就是“變異運算”。遺傳算法的過程可用圖2.4表示。 圖2.4. 遺傳算法 2.5.3蟻群算法 蟻群算法用于解決尋找最優(yōu)路徑的問題,模擬的是螞蟻找食物的過程,是一種比較有趣的算法。在自然現(xiàn)象中,我們可以觀測到這樣的現(xiàn)象:螞蟻找尋找到食物時,通常能夠走一條接近直線的路線到窩,如果直線上有障礙,也能夠找到最短的繞過路線。這一現(xiàn)象就說明,螞蟻尋找食物的過程,一定用一種機制來指導整個蟻群尋找到最優(yōu)的路徑。蟻群算法,就是對這一現(xiàn)象觀測研究,然后抽象簡化得到的尋找最優(yōu)路徑的算法。 圖2.5. 蟻群運食物路線示意圖 螞蟻找食物最重要的兩個特征是多樣性和正反饋:多樣性,即螞蟻在選擇路徑時,有一定的概率隨機選擇任意的方向,以探索新的路徑;正反饋則是,螞蟻在選擇路徑時,較大的概率選擇較多螞蟻走過的路徑。正是這兩種機制巧妙的結(jié)合在一起,才使得螞蟻能夠找到一條接近最優(yōu)的路徑。如果多樣性的影響過大,則會出現(xiàn)整個蟻群過于活躍,無法收斂到一條路徑上,如果正反饋影響過于大,則會出現(xiàn)蟻群出現(xiàn)僵化的現(xiàn)象,陷入一個區(qū)域無法出來。蟻群算法,對尋路過程抽象為以下幾個方面: 1)螞蟻的感知范圍:任何一只螞蟻只能感知以它為中心的一定半徑大小圓形區(qū)域的路徑。 2)信息素:有代表窩的信息素和代表食物的信息素,分別指導螞蟻找窩和食物。 3)遺留信息素:螞蟻尋找到窩時,會在附近遺留下最多窩的信息素,隨著距離窩越遠,遺留的信息素越少。尋找到食物時,同理,距離食物越遠遺留食物信息素越低。所有的信息素會以一定的速率揮發(fā)消失。 4)螞蟻尋路規(guī)則:如果周圍有信息素,則較大概率走信息素高的地方,否則按照慣性保持直線行走,有小概率會選擇其他的方向,并且能夠記住最近走過的點,不重復(fù)。 5)躲避障礙物:有信息素時候,選取信息素高的地方,否則隨機選擇其他方向。 2.5.4神經(jīng)網(wǎng)絡(luò) 這里所說的神經(jīng)網(wǎng)絡(luò)指的是人工神經(jīng)網(wǎng)絡(luò)(ArtificialNeural Network,ANN),是近年來人工智能領(lǐng)域的研究熱點,模擬的是人腦神經(jīng)元之間的傳遞過程,通過構(gòu)建數(shù)學映射模型,在神經(jīng)元之間通過激勵函數(shù)來傳遞信息,從而從輸入映射到輸出。由于最開始構(gòu)建的神經(jīng)網(wǎng)絡(luò)模型,沒有得到任何訓練,從輸入映射得到的輸出可能相對于我們期望的輸出誤差較大,這時通過把誤差反向傳播,以調(diào)節(jié)中間神經(jīng)元之間的權(quán)值,經(jīng)過大量這種訓練和反饋調(diào)節(jié)過程,最終神經(jīng)網(wǎng)絡(luò)系統(tǒng)能夠得到準確度較高的結(jié)果。 圖2.6. 神經(jīng)網(wǎng)絡(luò)示意圖 圖2.6中通過一個形象的例子來示意了神經(jīng)網(wǎng)絡(luò)工作的過程,將神經(jīng)網(wǎng)絡(luò)系統(tǒng)看做一個復(fù)雜的水管管道系統(tǒng),每一層都有很多節(jié)點,每一個節(jié)點均與上下鄰近的所有節(jié)點相鄰,且位于節(jié)點上的開關(guān)可以控制流向下一層的每個節(jié)點的水量大小。現(xiàn)在希望神經(jīng)網(wǎng)絡(luò)能夠識別阿拉伯數(shù)字,在圖片庫中有很多寫有數(shù)字的照片,我們將照片的數(shù)據(jù)看做水流,從最上層流入最下層,該系統(tǒng)會將最下層接收到水流最多的桶上的數(shù)字判定為輸入照片的數(shù)字。最開始的時候,誤差比較大,經(jīng)常識別錯誤,這時我們就調(diào)節(jié)中間層每一個開關(guān),控制不同方向的流量。經(jīng)過大量這種訓練調(diào)節(jié)過程,最終我們只要將寫有數(shù)字的卡片輸入,就能非常準確的識別出對應(yīng)的數(shù)字。3 NP類問題與啟發(fā)式算法
NP類問題與啟發(fā)式算法
3.1 P類問題、NP類問題和NP完全問題 在介紹這三類問題時,首先介紹一下多項式時間復(fù)雜度。當我們說起冒泡排序算法,會將其時間復(fù)雜度表示為,而快速排序算法,時間復(fù)雜度表示為,這兩種算法均為多項式時間復(fù)雜度。通常,一個算法具有多項式時間復(fù)雜度時,均可表示為以下形式:???(5)
P(Polynominal)類問題,即能夠在多項式時間復(fù)雜度內(nèi)得到該問題的解。而NP類問題(Non-DeterministicPolynomial Problems),從字面上翻譯為“非確定性多項式問題”,即不能在確定的多項式時間復(fù)雜度內(nèi)得到該問題的解。另一方面來定義,NP類問題指的是“能夠在多項式時間復(fù)雜度內(nèi)驗證問題的一個解”。也就是說,雖然我們不知道是否存在一個算法能夠在多項式時間復(fù)雜度內(nèi)得到NP問題的解,但我們可以在多項式時間復(fù)雜度內(nèi)驗證某個答案是否是NP問題的一個可行解。旅行商問題(TSP)是一個著名的NP問題,該問題描述了一個商人要去拜訪n個城市,要求途中經(jīng)過每個城市1次且僅1次,最后回到出發(fā)城市,如何找到最短的那條回路?該問題,如果用蠻力法來羅列所有的組合,復(fù)雜度為,這就不是多項式時間復(fù)雜度了。NP完全問題是NP問題的一個子集,如果任何一個NP問題,均可在多項式時間復(fù)雜度內(nèi)轉(zhuǎn)化為某個NP問題,那么就被稱為NP完全問題。進而可以推得,如果中存在某個NP問題可以在多項式時間復(fù)雜度內(nèi)求解,那么任何一個NP問題都可以在多項式時間復(fù)雜度內(nèi)求解,即著名的難題“NP=P?”。 3.2 模擬退火算法求解TSP問題 模擬退火算法其實也是一種貪婪算法,只不過加入了隨機因素來接受一個比當前解更差的解。由于普通的貪婪算法容易陷入局部最優(yōu),因此,以一定概率接受更差的解可以跳出一些局部最優(yōu)。如下圖3.1所示,從A點開始出發(fā)搜索最低點,普通貪婪算法搜索到B點時即停止搜索,而B點是一個局部最優(yōu)解。模擬退火算法會以一個概率接受繼續(xù)向C點移動,因此有可能會跨過C點,進而到達問題的最優(yōu)解D。 圖 3.1. 模擬退火算法尋求最優(yōu)解示意圖 將模擬退火算法的執(zhí)行步驟,表示為如下偽代碼形式: 算法1:采用模擬退火算法求解組合優(yōu)化問題的執(zhí)行步驟 輸入:組合優(yōu)化問題的一個初始解,及目標函數(shù)的值。 輸出:問題的解(可能為最優(yōu)解,也可能為次優(yōu)解) 01:產(chǎn)生問題的一個初始解,目標函數(shù)值及初始溫度; 02:產(chǎn)生問題的一個新解,并計算其目標函數(shù)值和衰減后的溫度; 03:當時,接受解,否則,以概率接受解; 04:如果超過一定次數(shù)均沒有接受新解,結(jié)束當前搜索,否則,重復(fù)02~03步驟。 算法1所示步驟為在一次溫度衰減下的搜索過程,通常會重復(fù)執(zhí)行算法1直到溫度衰減到某個較低的值,不斷迭代優(yōu)化當前已經(jīng)找到的最優(yōu)解,然后從這些解中選擇使得目標值最小的那個解為問題搜索得到的最優(yōu)解。 圖 3.2. 旅行商問題 在求解TSP問題時,需要在如圖3.2所示的無向圖中,尋求從某點出發(fā)并回到該點的一個哈密頓回路。每兩個點之間的路徑有一個權(quán)重,可看作路程里數(shù),現(xiàn)在需要從A點出發(fā),經(jīng)過圖中其他所有點1次回到A點的最短路徑。模擬退火算法的做法是,首先我們從一條可行的回路出發(fā),如A—>B—>D—>E—>F—>C—>A,這條回路看做初始解,并將路徑長度24記為目標函數(shù)初始值。然后將起點與終點之外的路徑做一個隨機的重排,比如隨機交換兩點的位置,得到問題的新的解,根據(jù)新的解對應(yīng)的目標函數(shù)值的大小判斷是否接受新的解,運用算法1來循環(huán)執(zhí)行該優(yōu)化過程。04
啟發(fā)式算法在尋找最優(yōu)路徑中的應(yīng)用與實踐
本節(jié)介紹通過模擬退火算法實現(xiàn)求解TSP問題和蟻群算法模擬螞蟻找食物的仿真程序及其結(jié)果。程序通過C語言編寫,在VisualStudio2012中編譯通過。在通過圖形化界面動態(tài)展現(xiàn)蟻群尋找食物過程時,用到了EasyX圖形庫。 4.1 模擬退火算法應(yīng)用于求解TSP問題的實踐 在該仿真中,解決一個有30個節(jié)點的全連通無向圖的TSP問題,該問題如果通過暴力求解法,需要判別的組合數(shù)量為30!,這是一個非常巨大的數(shù)字。程序首先通過一個函數(shù)生成了圖數(shù)據(jù),寫入到txt文本中,如圖4.1和圖4.2所示。第一行表示圖中有30個節(jié)點,總共有435條邊數(shù)據(jù)。第二行開始,(x,y,m)表示從節(jié)點x到節(jié)點y的權(quán)重為m。圖4.3為模擬退火算法參數(shù)設(shè)定。 圖 4.1.圖數(shù)據(jù) 圖 4.2.圖數(shù)據(jù) 圖 4.3.模擬退火算法參數(shù) 首先生成一個初始解,并計算該解對應(yīng)的TSP回路的總代價,然后經(jīng)過模擬退火算法優(yōu)化,對比優(yōu)化后的解與初始解的總代價。圖4.4表示模擬退火過程連續(xù)拒絕接受更差解的次數(shù)為50,圖4.5表示連續(xù)拒絕更差解的次數(shù)為5000,即在一次溫度衰減時,嘗試更多次的搜索新解。可以看到,搜索次數(shù)更多時,能夠得到一個代價更低的TSP回路。 圖 4.4.模擬退火算法優(yōu)化結(jié)果(拒絕次數(shù)為50) 圖 4.5.模擬退火算法優(yōu)化結(jié)果(拒絕次數(shù)為5000) 4.2 蟻群算法應(yīng)用于求解最短路徑問題的實踐 在本節(jié)中,介紹通過C語言編寫蟻群算法模擬螞蟻找食物的過程,并通過EasyX圖形庫將蟻群的位置動態(tài)的顯示出來。蟻群活動的區(qū)域為一個600x600像素點的區(qū)域,每個螞蟻每次可以移動一個像素點,移動的方向為以它為中心的周圍8個方向,如下圖4.6所示。圖 4.6.螞蟻移動方向示意圖 蟻群在移動時,初始化時去尋找食物,當尋找到食物的時候,就會尋找窩,尋找窩和尋找食物的過程,均依據(jù)不同信息素來表征方向。在沒有信息素的時候,大概率直線移動,但會以一定概率選取其他方向。圖4.7~圖4.10為蟻群算法在模擬螞蟻找食物過程的結(jié)果圖。 圖 4.7.蟻群算法仿真圖1 圖 4.8.蟻群算法仿真圖2 圖 4.9.蟻群算法仿真圖3 圖 4.10.蟻群算法仿真圖4 該次仿真結(jié)果得到了蟻群移動區(qū)域收斂于食物(黃色圓點)和窩(紅色圓點)之間的路徑,但結(jié)果收斂的效果并不是特別理想。這是因為信息素的損耗系數(shù),螞蟻犯錯的概率,已經(jīng)遺留信息素的多少,均影響了算法的結(jié)果。而在本次實驗中,均根據(jù)估計設(shè)定的參數(shù),另一方面算法實現(xiàn)本身還需進一步優(yōu)化修正,因此,算法并沒有收斂于最優(yōu)的路徑。但從整個結(jié)果的趨勢可以看出,蟻群是能夠依靠信息素使得移動區(qū)域收斂于食物和窩之間的路徑,并且接近于直線。
5.
總結(jié)
本文針對常見的最優(yōu)化問題及其應(yīng)用場景進行了分析和實踐。首先,介紹了常用最優(yōu)化方法,包括方法的基本模型,使用步驟,算法特性等。然后,對比分析了P類問題,NP問題,NP完全問題,以及如何通過啟發(fā)式算法去解決優(yōu)化此類非確定性時間復(fù)雜度問題。最后,在仿真實踐部分,通過實現(xiàn)模擬退火算法解決具有NP難度的TSP問題,并得到了一條代價更低的路徑。通過實現(xiàn)蟻群算法,模擬了螞蟻找食物的過程,并得到了蟻群移動區(qū)域收斂于食物和窩之間區(qū)域的結(jié)果。
【參考文獻】
[1] ThomasH.Cormen, Charles E.Leiserson, Ronald L.Rivest,CliffordStein著.算法導論[M].機械工業(yè)出版社,2012. [2] 馬學森,宮帥,朱建,唐昊.動態(tài)凸包引導的偏優(yōu)規(guī)劃蟻群算法求解TSP問題[J].通信學報,2018. [3]https://baike.baidu.com/item/NP%E5%AE%8C%E5%85%A8%E9%97%AE%E9%A2%98/4934286?fr=aladdin—?THE END —
總結(jié)
以上是生活随笔為你收集整理的启发式算法在最优化问题求解中的应用与实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 只用一周的业余时间,这位逆天博士生解决了
- 下一篇: 浙江义乌发现桥头遗址,将5000年中华文