不受约束的问题

非线性规划问题分为两种问题:无约束和约束。 不受约束的优化问题是形式上的问题

python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具

一个一般的约束优化问题包括方程(1)中具有相等约束的目标函数:

python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_02

和不平等约束:

python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_03

其中,python的线性拟合工具 python线性拟合怎么做_线性规划_04

在本节中,将考虑上述问题(1)。如果python的线性拟合工具 python线性拟合怎么做_线性规划_05是问题的最优解,则

python的线性拟合工具 python线性拟合怎么做_优化问题_06

其中python的线性拟合工具 python线性拟合怎么做_matlab_07 是梯度向量,python的线性拟合工具 python线性拟合怎么做_线性规划_08

python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_09

等式(5)表示黑森矩阵是一个正半定数。 式(4)-(5)是python的线性拟合工具 python线性拟合怎么做_线性规划_10的必要最优条件。 如果条件(5)替换为条件:

python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_11

(即,黑森矩阵是正定的),则条件(4)-(6)是充分的最优性条件。

用于求解(1)的数值方法是迭代的。 他们将从解python的线性拟合工具 python线性拟合怎么做_线性规划_10的初始猜测python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_13开始,然后构造解python的线性拟合工具 python线性拟合怎么做_线性规划_14的序列,其中python的线性拟合工具 python线性拟合怎么做_线性规划_15 在迭代python的线性拟合工具 python线性拟合怎么做_python_16时,数值优化中从点python的线性拟合工具 python线性拟合怎么做_python_17移至点python的线性拟合工具 python线性拟合怎么做_线性规划_18通常需要经历两个步骤:第一步是搜索方向python的线性拟合工具 python线性拟合怎么做_优化问题_19确定,然后在第二步中沿python的线性拟合工具 python线性拟合怎么做_优化问题_19方向进行线搜索(其中python的线性拟合工具 python线性拟合怎么做_优化问题_21)以找到最小点python的线性拟合工具 python线性拟合怎么做_线性规划_22,使得python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_23 。 如果满足以下条件,则迭代过程在解python的线性拟合工具 python线性拟合怎么做_python_17处停止。

python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_25

其中python的线性拟合工具 python线性拟合怎么做_线性规划_26是任意小的正实数,而python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_27

无约束优化的数值优化技术关注两个问题:

  1. 线搜索问题:给定一个函数python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_28 ,其梯度python的线性拟合工具 python线性拟合怎么做_线性规划_29 ,在迭代python的线性拟合工具 python线性拟合怎么做_线性规划_30下降方向python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_31上的一个点python的线性拟合工具 python线性拟合怎么做_线性规划_32,找到python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_33使得对于python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_34,沿着射线python的线性拟合工具 python线性拟合怎么做_matlab_35函数python的线性拟合工具 python线性拟合怎么做_python_36最小化,即
    python的线性拟合工具 python线性拟合怎么做_优化问题_37
  2. 搜索方向问题:给定一个函数python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_28 和点python的线性拟合工具 python线性拟合怎么做_线性规划_32,在迭代python的线性拟合工具 python线性拟合怎么做_线性规划_30处,找到一个单位矢量python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_31,使得python的线性拟合工具 python线性拟合怎么做_优化问题_42 对于python的线性拟合工具 python线性拟合怎么做_matlab_43是递减函数。 即python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_31是下降方向。

数值优化方法的不同之处在于确定搜索方向以及对梯度矢量和黑森矩阵进行近似和(或)更新的方法。

线搜索算法

线搜索算法有两种:精确线搜索和不精确线搜索算法。 精确线搜索算法会寻找精确步长python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_45

python的线性拟合工具 python线性拟合怎么做_优化问题_46

在数字上不切实际。 不精确的线搜索算法寻找与精确步长python的线性拟合工具 python线性拟合怎么做_python_47近似的值。 从初始猜测python的线性拟合工具 python线性拟合怎么做_matlab_48开始,逐步构建步长序列python的线性拟合工具 python线性拟合怎么做_线性规划_49的序列,以使python的线性拟合工具 python线性拟合怎么做_python_50迭代地完成。

最著名的不精确线搜索算法是回溯线搜索算法,该算法使用两个参数python的线性拟合工具 python线性拟合怎么做_优化问题_51python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_52并基于Armijo条件:

python的线性拟合工具 python线性拟合怎么做_线性规划_53

参数python的线性拟合工具 python线性拟合怎么做_优化问题_51与Armijo的终止条件相关。 参数python的线性拟合工具 python线性拟合怎么做_matlab_55用于在每次迭代中更新步长,其中python的线性拟合工具 python线性拟合怎么做_优化问题_56,从大步长python的线性拟合工具 python线性拟合怎么做_matlab_48(通常= 1)开始。

MATLAB函数LineSearch.m接收一个函数python的线性拟合工具 python线性拟合怎么做_优化问题_58,代表起始向量python的线性拟合工具 python线性拟合怎么做_python的线性拟合工具_59python的线性拟合工具 python线性拟合怎么做_优化问题_58梯度的向量python的线性拟合工具 python线性拟合怎么做_python_61和单位(方向)向量python的线性拟合工具 python线性拟合怎么做_matlab_62并返回最佳步长python的线性拟合工具 python线性拟合怎么做_matlab_63

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解决约束优化

详情参阅 - 亚图跨际