Slsqp最適化

SLSQP(Sequential Least Squares Quadratic Programming)是一種用於解決非線性最小二乘問題的優化算法。它是由Phillips T. and L. T. Watson在1969年提出的,是一種結合了序列最小二乘法和二次規劃的方法。

SLSQP算法主要用於解決以下形式的問題:

\min{x} f(x) = \sum{i=1}^{n} c_i(x)^2

\text{s.t.} \quad l_i \leq x_i \leq u_i, \quad i = 1, \ldots, n

其中,( x )是變量向量,( c_i(x) )是二次函數,( l_i )和( u_i )是變量( x_i )的下限和上限。

SLSQP算法的步驟如下:

  1. 初始化:設置初始點( x_0 ),目標函數值( f(x_0) ),以及殘差向量( r_0 )。

  2. 線性化:構造一個二次模型( m(x) )來近似目標函數( f(x) ),並計算梯度向量( \nabla m(x) )。

  3. 子問題:構造一個二次規劃(QP)子問題,其目標是找到一個向量( d ),使得( m(x_k + d) )最小化,同時滿足給定的上下限。

  4. 解子問題:使用內置的QP求解器解這個子問題,得到一個搜尋方向( d )。

  5. 步長選擇:使用線性搜尋選擇一個步長( \alpha ),使得( x_{k+1} = x_k + \alpha d )滿足一定的收斂條件。

  6. 更新:更新( x{k+1} ),( f(x{k+1}) )和( r_{k+1} ),並檢查是否滿足收斂條件。

  7. 重複:如果未滿足收斂條件,則返回步驟2,繼續疊代。

SLSQP算法是一個有效的算法,可以用於解決許多實際問題。它具有全局收斂性,即在適當的條件下,它會找到一個局部最小值。然而,它的性能取決於QP子問題的求解效率。

在Python中,可以使用 SciPy 庫中的 scipy.optimize.minimize 函數來解決最小二乘問題,其中 method='SLSQP' 指定使用 SLSQP 算法。