Python 爬山法,是一種優化算法,用于解決那些沒有解析解的問題。其思路類似于登山,你從一個隨機的起點開始,然后在山上走動以找到一個較高的點。如果你可以找到的點比你現在所處的點更高,那么你就向那個點走去。重復這個過程,直到沒有比當前點更高的點為止。
下面是一個簡單的 Python 爬山法的實現。
import random # 適應度函數 def fitness(solution): return solution ** 2 # 爬山函數 def hill_climbing(max_iter=1000): # 隨機初始化解 current_solution = random.randint(0, 100) # 循環迭代 for i in range(max_iter): # 計算當前解的適應度 current_fitness = fitness(current_solution) # 遍歷所有可能的下一個解 next_solutions = [current_solution + step for step in (-1, 1)] # 計算所有下一個解的適應度 next_fitnesses = [fitness(next_solution) for next_solution in next_solutions] # 找到下一個適應度最大的解 best_fitness = max(next_fitnesses) best_index = next_fitnesses.index(best_fitness) next_solution = next_solutions[best_index] # 如果下一個解更好,那么更新當前解 if best_fitness >current_fitness: current_solution = next_solution # 返回最終的解 return current_solution
上面的代碼使用了一個簡單的適應度函數,它接受一個解作為參數,并返回該解的平方。你可以使用其他的適應度函數,以適應不同的問題。
在爬山函數中,我們隨機初始化解,并循環迭代,直到達到最大迭代次數。每次迭代,我們計算當前解的適應度,并遍歷所有可能的下一個解。然后,我們選擇適應度最大的那個解,并更新當前解,如果新的解比當前解更好。最后,我們返回最終的解。
爬山法并不總是能夠找到全局最優解,因為它僅僅跟隨一個局部最優解。然而,它是一種快速而簡單的優化算法。如果你遇到了某些沒有解析解的問題,那么爬山法可能是一個不錯的選擇。