使用python画一个模拟退火图
时间: 2023-11-16 17:05:02 浏览: 37
好的,下面是使用 Python 和 Matplotlib 库画一个模拟退火图的示例代码:
``` python
import matplotlib.pyplot as plt
import numpy as np
# 定义目标函数
def f(x, y):
return np.sin(x) + np.cos(y)
# 定义退火函数
def anneal(f, x0, y0, T0=10, alpha=0.9, n_iter=100):
x, y, T = x0, y0, T0
best_x, best_y, best_f = x, y, f(x, y)
for i in range(n_iter):
# 生成新的状态
dx, dy = np.random.uniform(-1, 1), np.random.uniform(-1, 1)
x_new, y_new = x + dx, y + dy
# 计算新状态的目标函数值
f_new = f(x_new, y_new)
# 计算接受概率
p = np.exp((f_new - best_f) / T)
# 根据接受概率决定是否接受新状态
if np.random.uniform(0, 1) < p:
x, y, best_f = x_new, y_new, f_new
if best_f < f(best_x, best_y):
best_x, best_y = x, y
# 降温
T *= alpha
return best_x, best_y
# 运行模拟退火算法
x0, y0 = 0, 0
best_x, best_y = anneal(f, x0, y0, n_iter=10000)
# 画图
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
plt.contour(X, Y, Z, levels=20)
plt.plot(best_x, best_y, 'ro')
plt.show()
```
这个程序会生成一个二维的正弦函数和余弦函数的和的等高线图,并在图中标出模拟退火算法找到的最小值点。你也可以根据需要修改目标函数和模拟退火算法的参数。