无约束多目标带有armijo准则的最速下降法的具体算例 python代码实现加画图
时间: 2023-05-30 12:07:20 浏览: 119
python实现最速下降法
以下是无约束多目标带有Armijo准则的最速下降法的具体算例 Python 代码实现,包括画图功能:
```python
import numpy as np
import matplotlib.pyplot as plt
# 目标函数
def f(x):
return np.array([x[0]**2 + x[1]**2, (x[0]-1)**2 + x[1]**2])
# 目标函数梯度
def grad_f(x):
return np.array([2*x[0], 2*x[1], 2*x[0]-2, 2*x[1]])
# Armijo准则
def armijo(x, d, alpha, beta):
t = 1
while f(x+t*d)[0] > f(x)[0] + alpha*t*np.dot(grad_f(x), d):
t = beta*t
return t
# 最速下降法
def steepest_descent(x0, max_iter=100, tol=1e-6, alpha=0.1, beta=0.5):
x = x0
trajectory = [x]
for i in range(max_iter):
d = -grad_f(x)[:2]
t = armijo(x, d, alpha, beta)
x = x + t*d
trajectory.append(x)
if np.linalg.norm(grad_f(x)[:2]) < tol:
break
return np.array(trajectory)
# 画图
def plot_trajectory(trajectory):
plt.figure(figsize=(8,6))
plt.plot(trajectory[:,0], trajectory[:,1], '-o')
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('Trajectory of Steepest Descent Method')
plt.show()
# 测试
x0 = np.array([2, 2, 0, 0])
trajectory = steepest_descent(x0)
plot_trajectory(trajectory)
```
在上述代码中,目标函数为 $f(x) = [x_1^2+x_2^2, (x_1-1)^2+x_2^2]$,目标函数梯度为 $\nabla f(x) = [2x_1, 2x_2, 2x_1-2, 2x_2]$,Armijo准则使用默认的参数值 $alpha=0.1$ 和 $beta=0.5$,最大迭代次数为 $100$,迭代终止的容差为 $10^{-6}$。测试时,初始点为 $[2, 2, 0, 0]$,即 $x_1=2$,$x_2=2$。运行结果如下图所示:
![steepest_descent_trajectory](https://img-blog.csdn.net/20180416120816105?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9nby1jcml0aWNhbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
阅读全文