无约束多目标带有Wolfe准则的最速下降法 python代码实现
时间: 2023-05-31 08:03:08 浏览: 123
以下是无约束多目标带有Wolfe准则的最速下降法的Python代码实现:
```python
import numpy as np
def multiobj_steepest_descent(x0, f, grad_f, hess_f, alpha0=1, c1=1e-4, c2=0.9, max_iter=1000, tol=1e-6):
"""
无约束多目标带有Wolfe准则的最速下降法求解器
Parameters
----------
x0 : array_like
初始点
f : function
目标函数
grad_f : function
目标函数的梯度
hess_f : function
目标函数的海森矩阵
alpha0 : float, optional
初始步长, 默认为1
c1 : float, optional
Armijo准则中的常数, 默认为1e-4
c2 : float, optional
Wolfe准则中的常数, 默认为0.9
max_iter : int, optional
最大迭代次数, 默认为1000
tol : float, optional
迭代停止的容差, 默认为1e-6
Returns
-------
x : ndarray
最优解
fx : list
每次迭代的目标函数值
"""
x = np.array(x0)
fx = [f(x)]
alpha = alpha0
k = 0
while k < max_iter:
g = grad_f(x)
H = hess_f(x)
d = -g
alpha = alpha0
while f(x + alpha * d) > f(x) + c1 * alpha * np.dot(g, d):
alpha *= 0.5
while np.dot(grad_f(x + alpha * d), d) < c2 * np.dot(g, d):
alpha *= 0.5
x = x + alpha * d
fx.append(f(x))
if abs(fx[-1] - fx[-2]) < tol:
break
k += 1
return x, fx
```
其中,`x0`为初始点,`f`为目标函数,`grad_f`为目标函数的梯度,`hess_f`为目标函数的海森矩阵,`alpha0`为初始步长,`c1`为Armijo准则中的常数,`c2`为Wolfe准则中的常数,`max_iter`为最大迭代次数,`tol`为迭代停止的容差。
返回值为最优解`x`和每次迭代的目标函数值`fx`。
阅读全文