优选法中的黄金分割法

2. 1  黄金分割法的基本思想
      黄金分割法是优化方法中的经典算法,以算法简单、效果显著而著称,是许多优化算法的基础.但它只适用于一维区间[a,b] 上的凸函数.其基本思想是:依照“去坏留好”原则、对称原则以及等比收缩原则来逐步缩小搜索范围.以具体的单参数变量优选来说,根据工程经验选取搜索区间为[a,b],并在该变量区间内评价函数 Q (x) 存在单值极点.在[a,b] 中取试验点 x = a + 0. 382(b - a), x = a + 0. 618(b - a) ,并分别求得 Q (x1) 和 Q(x2) 的值.如果 Q (x1) > Q(x2) ,则 x2 为较佳点,令 a = x1 ;如果 Q (x1)< Q(x2)  ,则x1为较佳点,令b = x2,获得新区间,重新计算新的实验点,求取新的评价函数值,比较决定取舍区间.如此反复,经过数次优选,就可根据控制精度要求,选取两个较近试验点的平均值作为优选点,其优选过程及新旧区间几何关系如图1所示.该算法每次可将搜索区间缩小0.382倍或0. 618倍,直至缩为一点,是一个收敛速度极快的一维搜索方法。

 

 

 

### 实现共轭梯度法 共轭梯度方法是一种用于求解大型线性系统的迭代算法,在优化领域也有广泛应用。对于正定矩阵,该方法能够有效地找到最小化二次函数的极小值。 ```python import numpy as np def conjugate_gradient(A, b, x0=None, tol=1e-8, maxiter=None): n = len(b) if x0 is None: x = np.zeros_like(b) else: x = x0 r = b - A @ x p = r.copy() rsold = np.dot(r.T, r) if maxiter is None: maxiter = n * 10 for i in range(maxiter): Ap = A @ p alpha = rsold / (p.T @ Ap) x += alpha * p r -= alpha * Ap rsnew = np.dot(r.T, r) if np.sqrt(rsnew) < tol: break p = r + (rsnew / rsold) * p rsold = rsnew return x, i + 1 ``` 此代码实现了共轭梯度算法来解决给定系数矩阵`A`和右侧向量`b`下的线性方程组问题[^2]。 ### 黄金分割搜索法 黄金分割搜索是一种技术,用来在一维空间内寻找单峰函数的最大值或最小值位置。这种方法利用了黄金比例特性以最有效的方式缩小最优解所在的区间范围。 ```python from math import sqrt phi = (sqrt(5) - 1) / 2 # Golden ratio constant def golden_section_search(f, a, b, tol=1e-5): c = b - phi * (b - a) d = a + phi * (b - a) fc = f(c) fd = f(d) while abs(c - d) > tol: if fc < fd: a = c c = d d = a + phi * (b - a) fc = fd fd = f(d) else: b = d d = c c = b - phi * (b - a) fd = fc fc = f(c) return (a + b) / 2 ``` 上述程序定义了一个名为`golden_section_search()` 的函数,它接收目标函数 `f`, 初始区间的两个端点 `a` 和 `b` ,以及可选参数容差 `tol`. 函数返回的是使得输入的目标函数取得局部极小值的位置[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值