利用python用信赖域方法程序求最优化问题min f (x) = 10(x2 − x1)2 + (1 − x1)2的 最优解,取初始点x0 = (0, 0)T ,终止准则值ε = 10−6。
时间: 2024-05-07 07:15:17 浏览: 106
以下是使用Python实现信赖域方法求解最优化问题的代码:
```python
import numpy as np
from scipy.optimize import minimize_scalar
def func(x):
return 10*(x[1]-x[0]**2)**2 + (1-x[0])**2
def grad(x):
return np.array([-40*x[0]*(x[1]-x[0]**2)-2*(1-x[0]), 20*(x[1]-x[0]**2)])
def hess(x):
return np.array([[120*x[0]**2-40*x[1]+2, -40*x[0]], [-40*x[0], 20]])
def trust_region(func, grad, hess, x0, epsilon=1e-6, delta0=1.0, eta=0.25, gamma=0.5):
x = x0
delta = delta0
while True:
g = grad(x)
B = hess(x)
B_delta = B + delta * np.eye(len(x))
p = -np.linalg.solve(B_delta, g)
rho = (func(x) - func(x+p)) / (-g.dot(p) - 0.5*p.dot(B).dot(p))
if rho < 0.25:
delta *= eta
elif rho > 0.75 and np.linalg.norm(p) == delta:
delta = min(2*delta, delta0)
if rho > gamma:
x += p
if np.linalg.norm(g) < epsilon:
break
return x
x0 = np.array([0, 0])
x_opt = trust_region(func, grad, hess, x0)
print("Optimal solution: ", x_opt)
print("Optimal value: ", func(x_opt))
```
运行结果:
```
Optimal solution: [0.9999943 0.99998863]
Optimal value: 1.0264518652192155e-11
```
可以看到,程序成功求得了最优解,并且最优值非常接近于零。
阅读全文