本文简要介绍 python 语言中 scipy.optimize.fmin_cobyla
的用法。
用法:
scipy.optimize.fmin_cobyla(func, x0, cons, args=(), consargs=None, rhobeg=1.0, rhoend=0.0001, maxfun=1000, disp=None, catol=0.0002, *, callback=None)#
使用线性逼近约束优化 (COBYLA) 方法最小化函数。此方法包装了算法的 FORTRAN 实现。
- func: 可调用的
最小化的函数。以 func(x, *args) 的形式。
- x0: ndarray
初步猜测。
- cons: 序列
约束函数;必须都是
>=0
(如果只有 1 个约束,则为单个函数)。每个函数都带有参数x作为其第一个参数,它可以返回单个数字或数字数组或列表。- args: 元组,可选
传递给函数的额外参数。
- consargs: 元组,可选
传递给约束函数的额外参数(默认为 None 意味着使用与传递给 func 相同的额外参数)。使用
()
没有额外的参数。- rhobeg: 浮点数,可选
对变量进行合理的初始更改。
- rhoend: 浮点数,可选
优化中的最终准确性(不能精确保证)。这是信任区域大小的下限。
- disp: {0, 1, 2, 3},可选
控制输出频率; 0 表示没有输出。
- maxfun: 整数,可选
函数评估的最大数量。
- catol: 浮点数,可选
对违反约束的绝对容忍度。
- callback: 可调用的,可选的
每次迭代后调用,如
callback(x)
,其中x
是当前参数向量。
- x: ndarray
最小化 f 的论证。
参数 ::
返回 ::
注意:
该算法基于对目标函数和每个约束的线性逼近。我们简要介绍一下算法。
假设函数在 k 个变量上被最小化。在第 j 次迭代中,该算法有 k+1 个点 v_1、…、v_(k+1)、一个近似解 x_j 和一个半径 RHO_j。 (即,线性加一个常数)对目标函数和约束函数的近似,使得它们的函数值与 k+1 点 v_1,..,v_(k+1) 的线性近似一致。这给出了一个要求解的线性程序(其中约束函数的线性近似被约束为非负)。
然而,线性逼近可能只是当前单纯形附近的良好逼近,因此线性规划有进一步的要求,即将变为 x_(j+1) 的解必须在 x_j 的 RHO_j 内。 RHO_j 只会减少,不会增加。最初的 RHO_j 是 rhobeg,最终的 RHO_j 是 rhoend。通过这种方式,COBYLA 的迭代就像一个信任域算法。
此外,线性程序可能不一致,或者近似值可能会带来较差的改进。有关如何解决这些问题以及如何更新点 v_i 的详细信息,请参阅源代码或下面的引用。
参考:
鲍威尔 M.J.D. (1994),“通过线性插值对目标函数和约束函数进行建模的直接搜索优化方法。”,优化和数值分析进展,编辑。 S. Gomez 和 J-P Hennart, Kluwer Academic (Dordrecht),第 51-67 页
鲍威尔 M.J.D. (1998),“优化计算的直接搜索算法”,Acta Numerica 7, 287-336
鲍威尔 M.J.D. (2007),“无导数优化算法的观点”,剑桥大学技术报告 DAMPP 2007/NA03
例子:
在约束 x**2 + y**2 < 1 和 y > 0 的情况下,最小化目标函数 f(x,y) = x*y:
>>> def objective(x): ... return x[0]*x[1] ... >>> def constr1(x): ... return 1 - (x[0]**2 + x[1]**2) ... >>> def constr2(x): ... return x[1] ... >>> from scipy.optimize import fmin_cobyla >>> fmin_cobyla(objective, [0.0, 0.1], [constr1, constr2], rhoend=1e-7) array([-0.70710685, 0.70710671])
确切的解决方案是 (-sqrt(2)/2, sqrt(2)/2)。
相关用法
- Python SciPy optimize.fmin_cg用法及代码示例
- Python SciPy optimize.fmin_bfgs用法及代码示例
- Python SciPy optimize.fmin_slsqp用法及代码示例
- Python SciPy optimize.fmin_tnc用法及代码示例
- Python SciPy optimize.fmin_powell用法及代码示例
- Python SciPy optimize.fmin用法及代码示例
- Python SciPy optimize.fminbound用法及代码示例
- Python SciPy optimize.fsolve用法及代码示例
- Python SciPy optimize.fixed_point用法及代码示例
- Python SciPy optimize.rosen_der用法及代码示例
- Python SciPy optimize.line_search用法及代码示例
- Python SciPy optimize.rosen用法及代码示例
- Python SciPy optimize.shgo用法及代码示例
- Python SciPy optimize.minimize_scalar用法及代码示例
- Python SciPy optimize.root用法及代码示例
- Python SciPy optimize.NonlinearConstraint用法及代码示例
- Python SciPy optimize.KrylovJacobian用法及代码示例
- Python SciPy optimize.toms748用法及代码示例
- Python SciPy optimize.linprog_verbose_callback用法及代码示例
- Python SciPy optimize.bracket用法及代码示例
- Python SciPy optimize.milp用法及代码示例
- Python SciPy optimize.diagbroyden用法及代码示例
- Python SciPy optimize.bisect用法及代码示例
- Python SciPy optimize.isotonic_regression用法及代码示例
- Python SciPy optimize.golden用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.fmin_cobyla。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。