人工智慧 模擬退火演算法解決N皇后問題(C語言)

2021-09-10 10:20:41 字數 912 閱讀 5917

1.原理

模擬退火演算法(simulated annealing algorithm )其實也是一種隨機爬山法(hill climbing)。其不同之處在於模擬退火演算法在下乙個狀態情況「變壞」的情況下以指數級概率接受該移動,這種隨機接受方法可以使得爬山法跳出區域性山峰的平坦區域,從而得到全域性最優解

演算法開始時,設定初始溫度t(應該是要足夠大才行)、溫度下降速率rate(應該是設定足夠小),然後開始迭代:

(0)計算curr(curr為當前改變狀態後的評估值),如果curr=0,則演算法結束,找到全域性最優解,否則進行下面(1)-(4)反覆迭代。

(1)設de=curr-last(curr為當前改變狀態後的評估值,last為上一次評估值)。

(2)如果de<=0,則接受該狀態改變

(3)如果de>0,則以概率p接受該狀態改變,其中概率p的計算公式為:

p=上面公式可以求得全域性最小值,如果指數部分加乙個負號,可以求得全域性最大值。(也許吧??)

分析:一開始t很大,p接近1或超過1,很大概率是接受該後繼狀態;接下來,t逐漸下降,變得越來越小,由於de<0,故p會很小,這時就很少能接受該後繼狀態了。

(4)每一輪次結束後修改溫度t=t*rate,如果t小於設定的最小溫度,演算法結束,沒有找到解。

2.**實現

int simulatedannealing(int s)

else k2++;//printf("沒執行\n");

}}

}t*=rate;//溫度下降

if(t3.結果分析

模擬退火演算法速度慢於爬山法,其初始溫度、溫度下降速率等的設定比較費勁,需要反覆測試,**中的設定對於某些個數的皇后不一定能找到最優解。(500以下應該能找到解)

人工智慧 模擬退火演算法概述

模擬退火演算法 simulated annealing,sa 的思想最早由metropolis等人於1953年提出 kirkpatrick於1983年第一次使用模擬退火演算法求解組合最優化問題。模擬退火演算法是一種基於monte carlo迭代求解策略的隨機尋優演算法,其出發點是基於物理中固體物質的...

人工智慧 模擬退火演算法及實踐

摸擬退火演算法是基於隨機搜尋的,即在解的空間中展開隨機搜尋的。當問題的空間很大,而可行解比較多,並且對解的精度要求不高時,隨機搜尋是很有效的解決辦法,因為其他的做法在這個時候時空效率不能讓人滿意。而借助演化思想和群集智慧型思想改進過的隨機演算法更是對解的分布有規律的複雜問題有良好的效果。所謂退火是冶...

人工智慧模擬進化

常規非人工智慧程式的版本進化是這樣的,程式設計師敲打鍵盤輸入電腦 編出第乙個版本的程式,程式設計師根據需要,人腦智慧型根據需要判斷如何修改,再次敲打鍵盤修改程式 編出第二個版本,依此類推,隨著時間的前進,程式的版本在進化。模擬生物進化的程式概念原理是這樣的,程式設計師敲打鍵盤輸入電腦 程式,這個程式...