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)[源代码]

使用约束线性近似优化(COBYLA)方法最小化函数。此方法包装了算法的FORTRAN实现。

参数
func可调用

函数最小化。格式为func(x,*args)。

x0ndarray

初步猜测是这样的。

cons序列

约束函数;必须全部为 >=0 (如果只有1个约束,则为单个函数)。每个函数都接受参数 x 作为其第一个参数,它可以返回单个数字,也可以返回数字的数组或列表。

args元组,可选

要传递给函数的额外参数。

consargs元组,可选

要传递给约束函数的额外参数(默认值为None表示使用与传递给func的参数相同的额外参数)。使用 () 没有额外的争论。

rhobeg浮动,可选

对变量进行合理的初始更改。

rhoend浮动,可选

优化过程中的最终准确性(不能精确保证)。这是信任区域大小的下限。

disp{0,1,2,3},可选

控制输出频率;0表示无输出。

maxfun整型,可选

函数求值的最大次数。

catol浮动,可选

约束冲突的绝对公差。

退货
xndarray

极小化的论据 f

参见

minimize

与多变量函数的最小化算法的接口。看“COBYLA” method 尤其是。

注意事项

该算法基于对目标函数和每个约束的线性近似。我们简要描述了该算法。

假设函数在k个变量上被最小化。在第j次迭代中,该算法有k+1个点v_1,…,v_(k+1),一个近似解x_j和一个半径Rho_j(即,线性加一个常数)逼近目标函数和约束函数,使得它们的函数值与k+1个点v_1,…,v_(k+1)上的线性逼近一致。这给出了要求解的线性规划(其中约束函数的线性近似被约束为非负)。

然而,线性近似可能只是在当前单纯形附近才是好的近似,所以线性规划被进一步要求解必须在从x_j开始的Rho_j内,它将变成x_(j+1),而Rho_j只会减少,而不会增加。初始Rho_j为Rhobeg,最终Rho_j为Rhoend。通过这种方式,COBYLA的迭代行为类似于信任域算法。

此外,线性规划可能不一致,或者近似可能给出较差的改进。有关如何解决这些问题以及如何更新点v_i的详细信息,请参阅以下源代码或参考资料。

参考文献

鲍威尔·M·J·D(1994),“一种通过线性插值对目标函数和约束函数建模的直接搜索优化方法”,“优化与数值分析进展”,编辑。S.Gomez和J-P Hennart,Kluwer Academy(Dordrecht),第51-67页

鲍威尔·M·J·D(1998),“用于优化计算的直接搜索算法”,“数值学报”7,287-336

Powell M.J.D.(2007),“没有导数的优化算法的观点”,剑桥大学技术报告DAMTP 2007/NA03

示例

最小化目标函数f(x,y)=x 受约束x的约束 2+y *2<1且y>0::

>>> 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)。