不受约束的问题
非线性规划问题分为两种问题:无约束和约束。 不受约束的优化问题是形式上的问题
一个一般的约束优化问题包括方程(1)中具有相等约束的目标函数:
和不平等约束:
其中,
在本节中,将考虑上述问题(1)。如果是问题的最优解,则
其中 是梯度向量,
等式(5)表示黑森矩阵是一个正半定数。 式(4)-(5)是的必要最优条件。 如果条件(5)替换为条件:
(即,黑森矩阵是正定的),则条件(4)-(6)是充分的最优性条件。
用于求解(1)的数值方法是迭代的。 他们将从解的初始猜测开始,然后构造解的序列,其中 在迭代时,数值优化中从点移至点通常需要经历两个步骤:第一步是搜索方向确定,然后在第二步中沿方向进行线搜索(其中)以找到最小点,使得 。 如果满足以下条件,则迭代过程在解处停止。
其中是任意小的正实数,而
无约束优化的数值优化技术关注两个问题:
- 线搜索问题:给定一个函数 ,其梯度 ,在迭代下降方向上的一个点,找到使得对于,沿着射线函数最小化,即
- 搜索方向问题:给定一个函数 和点,在迭代处,找到一个单位矢量,使得 对于是递减函数。 即是下降方向。
数值优化方法的不同之处在于确定搜索方向以及对梯度矢量和黑森矩阵进行近似和(或)更新的方法。
线搜索算法
线搜索算法有两种:精确线搜索和不精确线搜索算法。 精确线搜索算法会寻找精确步长
在数字上不切实际。 不精确的线搜索算法寻找与精确步长近似的值。 从初始猜测开始,逐步构建步长序列的序列,以使迭代地完成。
最著名的不精确线搜索算法是回溯线搜索算法,该算法使用两个参数和并基于Armijo条件:
参数与Armijo的终止条件相关。 参数用于在每次迭代中更新步长,其中,从大步长(通常= 1)开始。
MATLAB函数LineSearch.m接收一个函数,代表起始向量的梯度的向量和单位(方向)向量并返回最佳步长:
function alpha = LineSearch(f, g, x, p)
a = 0.3 ; b = 0.9 ;
alpha = 1.0 ;
while f(x+alpha*p) > f(x) + a*alpha*g(x)'*p
alpha = b*alpha ;
end
end
函数LineSearch.py的Python代码是:
import numpy as np
def LineSearch(f, g, x, p):
a, b = 0.3, 0.9
alpha = 1.0
while f(x+alpha*p) > f(x) + a*alpha*np.dot(g(x), p):
alpha *= b
return alpha
最陡下降法
牛顿法
拟牛顿法
用MATLAB解决无约束的优化问题
用Gekko解决无约束的优化问题
解决约束的优化问题
MATLAB fmincon函数解决约束优化问题
Python解决约束最小化问题
Gekko Python解决约束优化
详情参阅 - 亚图跨际