Search in Complex Environments 重點整理筆記 == 在前面可以知道用tree可以找到最佳解,但是現實中很多問題都不能用tree來表達 ## Local Search Algorithms and Optimization Algorithms Search algo 如過可以建成一個tree得時候$\equiv$它可以系統化,只要找到goal就可以找到相對應的路徑,但是在很多問題,ex:八皇后(八隻皇后不互相攻擊 ) -> **順序對他來說沒有影響** -> **尋找不在意收尋路徑的algo以解決一般化問題** ### Local Search Local Search -> 以一單一currnt node,只能移動到相鄰的node - 所以memory低(方向選項簡單) - 在很大或是無限大的空間,可以找到不錯的解 適合用來解純的最佳化問題  在電腦中無法看到整個全貌,往往只能找到local最佳解,也很難探測到非常精細的最佳解 有許多algo可以協助找到不錯的解 ### Hill Climbing Search 可以用來找最高峰(最低),**不需要建search tree**,每次找**最棒的鄰居**,只需要跑loop變可以找到local 最佳解 ``` Hillclimbing() current loop do neighbor = 選一個最高value的鄰居 if neighbor.value <= current.value \\currrnt是鄰居中最大的 return current.state current = neighbor ``` 所以也叫做**greedy local search**,簡單效果不錯,但是爾偶會卡住在local maximum, Ridges, Plateaux.... 以八皇后的問題: - 大約14%可以solve,86%會卡在local maximum(很看運氣...) - 執行速度很快,只需4 steps當走對時,3 steps當卡住時,在$8^8$的stae space中,算是很快 如果不每次找最佳的的鄰居,反而更有機會跳出local maximum,找到解的機率14% -> 94%,21 steps 當走對時,64 steps當走錯時,但是**所需花費時間會變多** #### Stochastic Hill Climbing 拜訪過所有鄰居,不用找最強的鄰居,**隨機**在**比current 強**的鄰居中挑一格出來 #### First Choice Climbing 依序visit 鄰居,找到並選擇第一個比current 強的鄰居,而不是拜訪過所有鄰居 #### Random Restart Hill Climbing 隨機跑很多次(因為他速度蠻快的)找很多組解,再從很多組解中挑出最好的 找出的解好不好與state-space, landscape有很大的關聯 ### Simulated Annealing模擬退火 Annealing -> 退火 先把鐵加熱,再把鐵遡行,再冷卻 - 溫度高->好改變 - 溫度低->不好改變 **一開始高溫然後一路往低溫的過程** 一開始在探索,比較可以接受較差的解,隨著不斷重複function,可以接受較差解的機率降低 不是永遠取最佳鄰居,而是**隨機**取周圍鄰居 T = schedule(t) //T會隨著t變大T會越來越小 schedule 可以隨自己的設定下降,看自己目標  ``` if(deltaE > 0(鄰居條件比current好) 選鄰居 else if(current條件比鄰居好) 還是有一定機率選鄰居 ``` 所以可以說是當 $\Delta$ E越大(鄰居差current很多),其選鄰居的機率越小 $\Delta$ E越小(鄰居差current差不多),其選鄰居的機率越大 又T在一開始很大,在逐漸變小 T 越大,選到差鄰居的機率越大 T 越小,選到差鄰居的機率越小 設定$e^{\Delta E/T}$是為了讓他機率在指數計算可以快速下降,可以在前幾步容錯率高,後面容錯率低 冷卻時程是SA的核心之一,不同的冷卻時程會導致不同的尋優績效, 但目前並沒有一個設計準則可供依循。 由於SA是由現有状態推演出下一状態,一次僅探討一個可行解。因此 在求解大規模問題時,通常需要耗費相當大的電腦執行時間。 ### Local Beam Search(一次處理多個解) 一次處理k個解,每個都去找他們的successor(鄰居),再從這些可能state中挑出最佳的successor(天女散花的感覺)(資訊會傳到彼此) ``` 隨機選k個states while(1) if(找到goal) return solution else 再選k個best successors ``` 跟一次跑一個解跑k次的差別?一次一次跑很容易被一團很強的鄰居吸引(像是idependent跑k次沒有特別意義),但是Local Beam search可以比較全面的去找 **Stochastic Beam Search**不是永遠挑最佳的successor,而是隨機挑successor,多了隨機性 ### Genetic Algo 是Stochastic Beam Search的一種 步驟: 1. Initial Population:先確定大小 2. Fitness funtion:適應函數用來計算染色體( chromosome )好壞的標準,用來篩選出適應程度較佳的個體(染色體)。 3. Selection:想像是我們要做基因改造,會把比較好的基因給留下來,不好的基因給去除這樣的概念。 4. Crossover:兩兩基因進行交配進而產生出新的染色體。而兩兩染色體是否交配也會透過交配機率進行控制,切分有很多切法,看目標自己調配。 5. Mutation:針對單一的染色體,會根據突變機率來改變,這是因為避免最後的結果陷入local最佳解的狀況。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up