python矩阵最优化_最优化理论之无约束优化基本结构及其python应用

本文介绍了无约束优化的基本结构,包括最优解的类型和最优性条件,并详细讲解了线搜索型方法和信赖域方法。通过Python实现精确线搜索,展示了梯度下降法的应用。后续将探讨最速下降法、牛顿法、拟牛顿法和共轭梯度法等具体优化算法。
摘要由CSDN通过智能技术生成

自古以来,凡是追求尽善尽美是人类的天性,因而产生了科学,工程,数学,经济和商业等领域的实际问题时,人们欲从众多可行的方案中选择最优或近似最优的解决方案,那么最优化方法就是专门解决这类问题的一个强有力工具。最优化方法包括无约束优化与约束优化,今天我们先来讨论无约束优化理论的基本结构。

本文内容:符号约定

最优性条件:最优解的类型,最优性条件

无约束优化算法的基本结构

python实现精确线搜索

1. 符号约定

梯度向量(列向量)

海森矩阵

2. 最优性条件

(1)最优解的类型全局最优解

若对任意

则称

为最优化问题

的全局最优解。

局部最优解

,若存在

,使得对任意的

,当

时,有

(2)最优性条件一阶必要条件:

的一个局部极小值点,则

二阶必要条件:

的一个局部极小值点,则

半正定。二阶充分条件:

,在点

,则当

正定时,

的严格局部极小点。

3. 无约束优化算法的基本结构

(1)线搜索型方法:

(2)信赖域方法:

(3)线搜索和信赖域方法的比较:相同点:都需要考虑终止准则,下降方向,步长,收敛性与收敛速度。

不同点:线搜索先确定下降方向,再确定步长;信赖域方法则是先划定一个步长范围,然后在这个范围里面选下降方向与步长。

(4)线搜索型的四个要素:终止准则:

下降方向:(将在具体算法中介绍)

步长:精确线搜索准则,基于区间搜索的步长选择方法,非精确线搜索准则(Armijo准则,Goldstein准则,二次插值,三次插值)

收敛性与收敛速度:收敛性(

),收敛速度:线性收敛(

),二次收敛(

)

(5)步长:精确线搜索准则:

例子:求

的每一步下降步长的表达式?

解:

基于区间搜索的步长选择方法:

(1)均匀搜索法:

把初始区间[a,b]均分成N份,若

,则

(2)0.618法:

(3)二分法:

如果

,则

,反之。非精确线搜索准则(Armijo准则,Goldstein准则,二次插值。三次插值):

(1)Armijo准则:

说明:Armijo准则使用了

的切线控制最大步长,并给定步长的一个上界,但是并没有给出步长的下界(因为下界是0),但是实际中我们不需要过于小的步长,因为过小的步长将导致收敛速度太慢。

(2)Goldstein准则:

(3)二次插值法:(只设定了上限

)

设在0,

两点已知,

,假定在点

处不满足Armijo准则,那么构造二次插值多项式:

,插值点为:

,求出插值系数:

(4)三次插值法(同时设定上限与下限):

设三个点与四个插值数据:

,设置插值多项式:

,最终求解插值系数:

(6)信赖域方法:

在点

,我们想要求下降方向

,我们不可能求解极小化问题

去得到

,因为这与原问题一样复杂。我们采用原函数的二阶近似,采用泰勒展开来简化问题:

原问题:

简化后问题:

求解出第k步的方向后需要对

修正以获得

,修正的依据应该是在

处,

近似

的程度决定的,因此:

的大小反映了在

处,

近似

的程度决定的,当

接近于1时,近似程度好;当

接近于0时,近似程度不好。最后可以输出整个算法!

至于算法为什么取0.75和0.25,是因为查看了作者论文,作者说到了算法对0.75和0.25不敏感。

4. python实现精确线搜索

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

class Optimizer():

# 求函数值f(x) = x^2

# 求导数

# 精确线搜索求步长

# 梯度下降

def __init__(self):

pass

def f_x(self,x):

return x**2

def gradient(self,x):

return 2*x

def alpha (self,x,d_k):

return -x/d_k

def start(self):

x_0 = 100

for i in range(0,5000):

if (self.gradient(x_0)>10**(-8)):

a = self.alpha(x_0,-self.gradient(x_0))

x_new = x_0 - a* self.gradient(x_0)

x_0 = x_new

print(x_0)

else:

break

return (x_0,self.f_x(x_0))

if __name__ == '__main__':

opz = Optimizer()

opz.start()

5. 结语

以上就是最优化理论之无约束优化基本结构及其python应用文章的全部内容,在下一次的分享中,将会给大家带来具体的无约束优化算法,包括最速下降法,牛顿法,拟牛顿法以及共轭梯度法等。《数值最优化方法》--高立

Bilibili 崔雪婷老师的最有化课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值