写一段生成优化算法对比图的代码
时间: 2024-02-24 09:56:18 浏览: 12
这里提供一段生成优化算法对比图的 Python 代码,使用了 Matplotlib 库进行绘图。
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义目标函数
def objective(x):
return x ** 2 + 2 * np.sin(x)
# 定义不同优化算法
def gradient_descent(x, lr=0.1, n_iter=100):
for i in range(n_iter):
grad = 2 * x + 2 * np.cos(x)
x -= lr * grad
return x
def momentum(x, lr=0.1, n_iter=100, gamma=0.9):
v = 0
for i in range(n_iter):
grad = 2 * x + 2 * np.cos(x)
v = gamma * v + lr * grad
x -= v
return x
def nesterov(x, lr=0.1, n_iter=100, gamma=0.9):
v = 0
for i in range(n_iter):
x_ahead = x - gamma * v
grad = 2 * x_ahead + 2 * np.cos(x_ahead)
v = gamma * v + lr * grad
x -= v
return x
# 生成优化算法对比图
x = np.arange(-5, 5, 0.1)
y = objective(x)
plt.plot(x, y, label='Objective Function')
plt.plot(gradient_descent(4), objective(gradient_descent(4)), marker='o', markersize=10, label='Gradient Descent')
plt.plot(momentum(4), objective(momentum(4)), marker='o', markersize=10, label='Momentum')
plt.plot(nesterov(4), objective(nesterov(4)), marker='o', markersize=10, label='Nesterov')
plt.legend()
plt.show()
```
这段代码中,我们首先定义了一个目标函数 `objective`,然后定义了三个不同的优化算法:梯度下降法、动量法和 Nesterov 加速梯度法。接着,我们生成了一组 x 值,并计算了对应的目标函数值,最后使用 Matplotlib 库绘制了优化算法对比图。在图中,我们展示了不同优化算法在目标函数上的收敛轨迹,可以直观地看出它们的差异。