公司新闻 分类
优化器optimizer_tensorflow优化器发布日期:2024-03-12 浏览次数:

原文:https://mp.weixin.qq.com/s/BDHXQHXSzDk-RTi-VNMNEw

该scipy.optimize包提供几种常用的优化算法。

该模块包含:

1、使用多种算法(例如BFGS,Nelder-Mead单形,牛顿共轭梯度,COBYLA或SLSQP)对多元标量函数进行无约束和无约束的最小化(最小化)

2、全局(强力)优化例程(例如,盆地跳动,differential_evolution)

3、最小二乘最小化(least_squares)和曲线拟合(curve_fit)算法

4、标量单变量函数最小化器(minimum_scalar)和根查找器(牛顿)

5、使用多种算法(例如,混合鲍威尔,莱文贝格-马夸特或大型方法,例如牛顿-克里洛夫)的多元方程组求解器(root)。

详见:

https://docs.scipy.org/doc/scipy/reference/optimize.html



2.1 单纯形法:Nelder-Mead

函数Rosenbrock :


优化器optimizer_tensorflow优化器

x=1时,取最小值。


求解:


求带有参数的 Rosenbrock 函数:


优化器optimizer_tensorflow优化器


2.2 拟牛顿法:BFGS算法

介绍:

https://blog.csdn.net/jiang425776024/article/details/87602847

Rosenbrock导数:


优化器optimizer_tensorflow优化器


求解:


提供梯度信息的另一种方法是编写一个返回目标和梯度的函数:这可以通过设置jac=True来表示。在这种情况下,要优化的Python函数必须返回一个元组,其第一个值是目标,第二个值表示梯度。


2.3 牛顿法:Newton-CG

利用黑塞矩阵和梯度来优化。

介绍:

https://blog.csdn.net/jiang425776024/article/details/87602847

构造目标函数的近似二次型(泰勒展开):


优化器optimizer_tensorflow优化器

利用黑塞矩阵H和梯度做迭代:


优化器optimizer_tensorflow优化器

黑塞矩阵:


优化器optimizer_tensorflow优化器


对于较大的最小化问题,存储整个Hessian矩阵会消耗大量的时间和内存。可将矩阵写成目标函数的形式:


优化器optimizer_tensorflow优化器


当Hessian条件不佳时,Newton-CG算法可能是低效的,因为在这些情况下,该方法提供的搜索方向质量很差。trust-ncg方法可以更有效地处理这种有问题的情况,下面将对此进行描述。

2.4 共轭梯度算法:trust-krylov

与trust-ncg方法类似,trust-krylov方法是一种适用于大规模问题的方法,因为它只使用hessian作为线性算子,通过矩阵-向量乘积。它比trust-ncg方法更准确地解决了二次子问题。

Newton-CG方法是一种直线搜索方法:它找到一个搜索方向,使函数的二次逼近最小化,然后使用直线搜索算法找到该方向(接近)的最佳步长。另一种方法是,首先固定步长限制,然后通过求解以下二次问题在给定信任半径内找到最优步长:


优化器optimizer_tensorflow优化器

根据二次模型与实函数的一致程度,更新解 x k + 1=x k + p x_{k+1}=x_k+p xk+1?=xk?+p,调整信任半径 Δ \Delta Δ。这类方法称为信任域方法(trust-region methods)。trust-ncg算法是一种利用共轭梯度算法求解信任域子问题的信任域方法。



最小化函数提供了约束最小化算法,即’trust-constr’, ‘SLSQP’和’COBYLA’。它们要求使用稍微不同的结构来定义约束。

方法’trust-constr’要求将约束定义为线性约束和非线性约束对象的序列。

另一方面,方法’SLSQP’和’COBYLA’要求将约束定义为一个字典序列,包含键type、fun和jac。

3.1 信任域:trust-constr

信任域约束方法处理的约束最小化问题形式为:


优化器optimizer_tensorflow优化器

  • 定义约束的边界:


优化器optimizer_tensorflow优化器


  • 定义线性约束


优化器optimizer_tensorflow优化器


优化器optimizer_tensorflow优化器


  • 定义非线性约束


优化器optimizer_tensorflow优化器



3.2 顺序最小二乘规划算法:SLSQP

约束形式:


优化器optimizer_tensorflow优化器


注意这里的不等式是,与pymoo(≤0)相反。


3.3 最小二乘:least_squares


优化器optimizer_tensorflow优化器

这里的表示损失函数。

假设其为:


优化器optimizer_tensorflow优化器

其导数:


优化器optimizer_tensorflow优化器

约束:


优化器optimizer_tensorflow优化器



优化器optimizer_tensorflow优化器







  • 单变量


优化器optimizer_tensorflow优化器


  • 多变量


优化器optimizer_tensorflow优化器



问题:


优化器optimizer_tensorflow优化器

上述是最大小,需要转换成最小化,才可使用求解器。


优化器optimizer_tensorflow优化器

定义 x:


优化器optimizer_tensorflow优化器

则目标函数的系数为:


优化器optimizer_tensorflow优化器

考虑两个不等式约束条件。

第一个是“小于”不等式,所以它已经是linprog所接受的形式。第二个是“大于”不等式,所以需要在两边同时乘以-1,将其转化为“小于”不等式。


优化器optimizer_tensorflow优化器

准换成矩阵形式:


优化器optimizer_tensorflow优化器

考虑两个等式:


优化器optimizer_tensorflow优化器

矩阵形式:


优化器optimizer_tensorflow优化器


结果表明问题是不可行的,这意味着不存在满足所有约束条件的解向量。

这并不一定意味着做错。有些问题确实是行不通的。

假设约束太紧了,可以放松。调整代码x1_bounds=(0,6):



考虑到为游泳混合泳接力队挑选学生的问题。我们有一个表格,列出了五个学生每种泳姿的时间:


优化器optimizer_tensorflow优化器

解决方案:定义一个成本矩阵C,每行只有一列有值,矩阵和为最终成本

定义目标函数:


优化器optimizer_tensorflow优化器

X是一个二值矩阵,当行i被指定到列j时, X i j=1 X_{ij}=1 Xij?=1


参考:

https://blog.csdn.net/xu624735206/article/details/117320847

https://blog.csdn.net/jiang425776024/article/details/87885969

https://docs.scipy.org/doc/scipy/tutorial/optimize.html

今天的文章优化器optimizer_tensorflow优化器分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68496.html


平台注册入口