模拟退火算法求最大值的python代码
时间: 2024-12-04 15:12:48 浏览: 21
python:模拟退火算法解决多元函数求最优值(最大值或最大值)
5星 · 资源好评率100%
好的,我很乐意为您介绍模拟退火算法,并提供一个使用Python实现的求最大值示例代码。
模拟退火算法是一种基于概率的全局优化算法,灵感来源于金属退火过程。它能够在搜索空间中随机寻找最优解,同时避免陷入局部最优。以下是使用模拟退火算法求最大值的Python代码:
```python
import math
import random
def simulated_annealing(func, bounds, temp, cooling_rate, step_size, max_iter):
# 初始化解
current_solution = [random.uniform(b[0], b[1]) for b in bounds]
best_solution = current_solution[:]
current_energy = func(current_solution)
best_energy = current_energy
for i in range(max_iter):
# 生成新解
new_solution = []
for j in range(len(current_solution)):
new_val = current_solution[j] + random.uniform(-step_size, step_size)
new_val = max(bounds[j][0], min(new_val, bounds[j][1]))
new_solution.append(new_val)
# 计算新解的能量
new_energy = func(new_solution)
# 判断是否接受新解
if new_energy > current_energy or random.random() < math.exp((new_energy - current_energy) / temp):
current_solution = new_solution
current_energy = new_energy
# 更新最优解
if new_energy > best_energy:
best_solution = new_solution
best_energy = new_energy
# 降低温度
temp *= (1 - cooling_rate)
return best_solution, best_energy
# 测试函数: 我们使用一个简单的二次函数来测试算法
def test_function(x):
return -(x[0]**2 + x[1]**2)
# 定义搜索范围
bounds = [(-10, 10), (-10, 10)]
# 设置参数
initial_temp = 10000
cooling_rate = 0.003
step_size = 0.5
max_iterations = 10000
# 运行模拟退火算法
best_solution, best_energy = simulated_annealing(test_function, bounds, initial_temp, cooling_rate, step_size, max_iterations)
print(f"最优解: {best_solution}")
print(f"最大值: {-best_energy}")
```
这个代码实现了以下功能:
1. 定义了`simulated_annealing`函数,实现了模拟退火算法。
2. 使用一个测试函数`test_function`来验证算法。
3. 设置了搜索范围和算法参数。
4. 运行算法并输出结果。
模拟退火算法的主要步骤包括:
- 初始化解
- 生成新解
- 计算新解的能量
- 判断是否接受新解
- 更新最优解
- 降低温度
通过调整初始温度、退火速率、步长和最大迭代次数等参数,我们可以控制算法的搜索范围和收敛速度。
阅读全文