模拟退火python代码
时间: 2023-09-12 15:03:25 浏览: 39
用于优化 ATSP(非对称旅行商问题) 的模拟 退火算法 的 python 实现_python_代码_下载
5星 · 资源好评率100%
以下是一个简单的模拟退火算法的Python代码实现:
``` python
import random
import math
# 需要优化的函数
def objective_function(x, y):
return math.sin(x) + math.cos(y)
# 模拟退火算法
def simulated_annealing(objective_function, bounds, n_iterations, initial_temp, temp_reduction):
best_solution = None
best_fitness = float('-inf')
# 随机生成一个初始解
current_solution = [random.uniform(bounds[i][0], bounds[i][1]) for i in range(len(bounds))]
current_fitness = objective_function(*current_solution)
# 记录温度
current_temp = initial_temp
# 迭代优化
for i in range(n_iterations):
# 随机生成一个新解
candidate = [random.uniform(bounds[i][0], bounds[i][1]) for i in range(len(bounds))]
# 计算新解的适应度
candidate_fitness = objective_function(*candidate)
# 计算适应度提高的程度
delta_fitness = candidate_fitness - current_fitness
# 判断是否接受新解
if delta_fitness > 0 or math.exp(delta_fitness / current_temp) > random.random():
current_solution = candidate
current_fitness = candidate_fitness
# 更新最优解
if current_fitness > best_fitness:
best_solution = current_solution
best_fitness = current_fitness
# 降低温度
current_temp *= temp_reduction
return (best_solution, best_fitness)
# 测试
bounds = [(-10, 10), (-10, 10)]
best_solution, best_fitness = simulated_annealing(objective_function, bounds, 1000, 100, 0.95)
print("最优解:", best_solution)
print("最优解对应的适应度:", best_fitness)
```
这段代码实现了一个优化函数 `objective_function` 的模拟退火算法。算法的输入包括需要优化的函数、搜索空间的边界、迭代次数、初始温度和温度降低率等参数。其中,随机生成一个初始解,然后在每次迭代中随机生成一个新解,并根据一定的概率接受该解或者继续保留当前解。随着迭代次数的增加和温度的降低,算法最终收敛到一个局部最优解。
阅读全文