二次規劃(quadratic programming)
線性規劃在一個有圍籬的區域上最佳化一個平坦、傾斜的目標——成本沿每個方向以固定速率上升。但許多真實目標會「彎曲」:風險隨曝險二次增長、能量隨位移、誤差隨偏離。二次規劃是更上一層:在「線性」約束下最小化一個二次(碗狀)目標。它是最簡單而具有真正曲率的受約束問題,並位居無數應用的核心。
二次規劃的形式為:在線性約束 A x <= b 及可能的 E x = d 下,最小化 (1/2) x^T Q x + c^T x。矩陣 Q 編碼目標的曲率。若 Q 半正定,目標是凸的(一個碗),可行區域是凸多面體,整個問題就是凸最佳化——能高效又可靠地解到全域最佳,通常用內點法或作用集法(後者是單純形法的近親,負責判定哪些不等式約束作用中)。若 Q 有負特徵值,問題非凸、難得多(一般而言 NP 困難)。凸 QP 的 KKT 條件構成一個「線性」系統(再加不等式的互補鬆弛邏輯),這正是凸 QP 如此易解的原因。
二次規劃出現在所有要緊之處:它是支援向量機的內層問題(最大化間隔)、投資組合最佳化(Markowitz 均值-變異數,為目標報酬最小化風險 x^T Q x)、模型預測控制(在懲罰控制量的同時操縱系統),以及 SQP 中的序列子問題(SQP 是一般非線性受約束最佳化的主流方法)。誠實的適用範圍:乾淨、高效的故事只對「凸」QP(Q 半正定)成立;非凸(Q 不定)的 QP 可能有許多局部極小、確實困難。而與所有受約束方法一樣,它繼承了 KKT 機制——把可行性、乘子正負號與作用集記帳弄對,正是實作功夫真正所在。
投資組合選擇:為各資產挑權重 x,在預算 sum x_i = 1、要求報酬 r^T x >= R 且 x >= 0 下,最小化風險 (1/2) x^T Q x(Q 是共變異數矩陣,即曲率)。這是個凸 QP——碗狀目標加線性約束產生唯一的效率組合,QP 求解器毫秒內即可求得。
彎曲的(二次)目標,筆直的(線性)約束。
QP 只在 Q 半正定(一個凸碗)時才容易;那時它可靠地解到全域最佳。不定的 Q 讓 QP 非凸、可能有許多局部極小,且一般而言 NP 困難——所以在信任一次快速求解之前,務必先檢查曲率矩陣的定性。