模拟退火算法是一种基于随机搜索的优化算法,常用于解决函数优化问题。下面是一个简单的模拟退火算法的例程:
```python
import random
import math
# 目标函数
def objective_function(x, y):
return math.sin(x) + math.cos(y)
# 初始解
def initial_solution():
x = random.uniform(-10, 10)
y = random.uniform(-10, 10)
return x, y
# 邻域搜索
def neighbor_solution(x, y, step_size):
new_x = x + random.uniform(-step_size, step_size)
new_y = y + random.uniform(-step_size, step_size)
return new_x, new_y
# 接受更新的概率
def acceptance_probability(old_value, new_value, temperature):
if new_value > old_value:
return 1
else:
return math.exp((new_value - old_value) / temperature)
# 模拟退火算法
def simulated_annealing(max_iterations, initial_temperature, cooling_rate):
x, y = initial_solution()
best_solution = (x, y)
best_value = objective_function(x, y)
current_temperature = initial_temperature
for i in range(max_iterations):
step_size = current_temperature
new_x, new_y = neighbor_solution(x, y, step_size)
new_value = objective_function(new_x, new_y)
if acceptance_probability(best_value, new_value, current_temperature) > random.random():
x, y = new_x, new_y
best_solution = (x, y)
best_value = new_value
current_temperature *= cooling_rate
return best_solution, best_value
# 测试
best_solution, best_value = simulated_annealing(max_iterations=1000, initial_temperature=100, cooling_rate=0.95)
print("Best Solution:", best_solution)
print("Best Value:", best_value)
```
在上述例程中,我们定义了一个目标函数 `objective_function`,它是一个简单的二维函数。然后定义了初始解函数 `initial_solution`,邻域搜索函数 `neighbor_solution` 和接受更新的概率函数 `acceptance_probability`。
在模拟退火算法函数 `simulated_annealing` 中,我们使用一个循环来进行搜索。在每一次迭代中,我们根据当前温度选择一个邻域解,并计算目标函数的值。如果新解比当前最优解好,我们接受该更新;否则,以一定的概率接受该更新。然后,我们通过降低温度来控制搜索的随机性。最终返回搜索到的最好解和对应的目标函数值。
在测试部分,我们使用了上述定义的函数进行了测试,并输出了搜索到的最优解和目标函数值。
制作不易,请点赞加关注
模拟退火算法的Python实现与测试
1252

被折叠的 条评论
为什么被折叠?



