模拟退火算法(Simulated Annealing, SA)是一种启发式随机搜索算法,它模仿了物理学中固体物质的退火过程。在求解组合优化问题时,模拟退火算法从某一较高初温开始,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解。
以下是一个简单的 Python 实现模拟退火算法的示例,用于解决函数的最优化问题(例如寻找函数 f(x) = x^2
的最小值):
import math
import random
# 目标函数,例如 f(x) = x^2
def objective_function(x):
return x ** 2
# 模拟退火算法
def simulated_annealing(initial_temp, min_temp, cooling_rate, max_iter, x_start):
current_x = x_start
current_energy = objective_function(current_x)
best_x = current_x
best_energy = current_energy
temp = initial_temp
for i in range(max_iter):
# 产生新解
new_x = current_x + random.uniform(-1, 1)
new_energy = objective_function(new_x)
# 判断是否接受新解
if new_energy < current_energy:
current_x = new_x
current_energy = new_energy
if new_energy < best_energy:
best_x = new_x
best_energy = new_energy
else:
# 以一定概率接受较差的解
if random.random() < math.exp(-(new_energy - current_energy) / temp):
current_x = new_x
current_energy = new_energy
# 降温
temp *= cooling_rate
# 判断是否终止
if temp < min_temp:
break
return best_x, best_energy
# 参数设置
initial_temp = 100 # 初始温度
min_temp = 0.01 # 最小温度
cooling_rate = 0.95 # 降温率
max_iter = 1000 # 最大迭代次数
x_start = 5 # 初始解
# 运行模拟退火算法
best_x, best_energy = simulated_annealing(initial_temp, min_temp, cooling_rate, max_iter, x_start)
print(f"Best x: {best_x}, Best energy: {best_energy}")