原文: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
函数Rosenbrock :
x=1时,取最小值。
求解:
求带有参数的 Rosenbrock 函数:
介绍:
https://blog.csdn.net/jiang425776024/article/details/87602847
Rosenbrock导数:
求解:
提供梯度信息的另一种方法是编写一个返回目标和梯度的函数:这可以通过设置jac=True来表示。在这种情况下,要优化的Python函数必须返回一个元组,其第一个值是目标,第二个值表示梯度。
利用黑塞矩阵和梯度来优化。
介绍:
https://blog.csdn.net/jiang425776024/article/details/87602847
构造目标函数的近似二次型(泰勒展开):
利用黑塞矩阵H和梯度做迭代:
黑塞矩阵:
对于较大的最小化问题,存储整个Hessian矩阵会消耗大量的时间和内存。可将矩阵写成目标函数的形式:
当Hessian条件不佳时,Newton-CG算法可能是低效的,因为在这些情况下,该方法提供的搜索方向质量很差。trust-ncg方法可以更有效地处理这种有问题的情况,下面将对此进行描述。
与trust-ncg方法类似,trust-krylov方法是一种适用于大规模问题的方法,因为它只使用hessian作为线性算子,通过矩阵-向量乘积。它比trust-ncg方法更准确地解决了二次子问题。
Newton-CG方法是一种直线搜索方法:它找到一个搜索方向,使函数的二次逼近最小化,然后使用直线搜索算法找到该方向(接近)的最佳步长。另一种方法是,首先固定步长限制,然后通过求解以下二次问题在给定信任半径内找到最优步长:
根据二次模型与实函数的一致程度,更新解 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。
信任域约束方法处理的约束最小化问题形式为:
约束形式:
注意这里的不等式是,与pymoo(≤0)相反。
这里的表示损失函数。
假设其为:
其导数:
约束:
问题:
上述是最大小,需要转换成最小化,才可使用求解器。
定义 x:
则目标函数的系数为:
考虑两个不等式约束条件。
第一个是“小于”不等式,所以它已经是linprog所接受的形式。第二个是“大于”不等式,所以需要在两边同时乘以-1,将其转化为“小于”不等式。
准换成矩阵形式:
考虑两个等式:
矩阵形式:
结果表明问题是不可行的,这意味着不存在满足所有约束条件的解向量。
这并不一定意味着做错。有些问题确实是行不通的。
假设约束太紧了,可以放松。调整代码x1_bounds=(0,6):
考虑到为游泳混合泳接力队挑选学生的问题。我们有一个表格,列出了五个学生每种泳姿的时间:
解决方案:定义一个成本矩阵C,每行只有一列有值,矩阵和为最终成本
定义目标函数:
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