二次规划问题和MATLAB函数quadprog的使用
題目:二次規劃問題和MATLAB函數quadprog的使用
? ? ? ? 二次規劃(Quadratic Programming,QP)問題的一般形式為:
其中,為純量,為階對稱矩陣。易知二次規劃的Hesse矩陣等于。如果為半正定矩陣,則稱此規劃為凸二次規劃,否則為非凸規劃。對于凸二次規劃,目標函數q(x)是一個凸函數。如果有至少一個向量x滿足約束而且q(x)在可行域有下界,二次規劃問題就有一個全局最小值x。 如果G是正定矩陣,則稱此規劃為嚴格凸二次規劃,此時全局最小值就是唯一的。如果G=0,二次規劃問題就變成線性規劃問題。根據優化理論,一個點x 成為全局最小值的必要條件是滿足Karush-Kuhn-Tucker(KKT)條件。當q(x)是凸函數時,KKT條件也是充分條件。
? ? ? ??對于非凸規劃,由于存在比較多的駐點,求解比較困難。
? ? ? ??根據約束條件的不同,二次規劃可分為等式約束二次規劃問題和不等式約束二次規劃問題。等式約束二次規劃問題即只含有等式約束,常見的解法有直接消去法、廣義消去法、拉格朗日(Lagrange)法;對于不等式約束二次規劃問題,其基本思想是把不等式約束轉化為等式約束再求解,常見解法有有效集(active set)方法,有效集方法在每步迭代中把有效約束作為等式約束,然后可以用拉格朗日法求解,重復直到求得最優解。
? ? ? ??很多學者專門研究各類二次規劃的求解方法,如文獻[4][5],對于非數學專業的的人來講更重要的是怎么把二次規劃當作一個工具去使用它。
? ? ? ??在MATLAB中求解二次規劃的的函數是quadprog,具體使用方法可查詢幫助文件。
? ? ? ??【例】求如下二次規劃問題。
? ? ? ??【分析】首先應該把目標函數表示成如下矩陣形式:
? ? ? ??這里要細說一下如何寫成矩陣形式。
? ? ? ??首先,向量x是很容易寫出的,因為f(x)包含兩個變量x1和x2,因此
? ? ? ??其次,向量f只與兩個變量x1和x2的一次項有關,所以fTx=-2x1-6x2,因此
? ? ? ??最后,矩陣H只與兩個變量x1和x2的二次項有關,所以,這里要注意的是不同于二次型,這里有個系數1/2,所以矩陣H的元素是二次型中的矩陣元素大小的兩倍。給出一個規律:設矩陣H第i行第j列的元素大小為H(i,j),二次項xixj的系數為a(i,j),則
? ? ? ??本例中,,這是由于x1的平方項(即x1x1)系數為1/2,所以第1行第1列的元素為1=2*(1/2),x2的平方項(即x2x2)系數為1,所以第2行第2列的元素為2=2*1,x1x2項(即x2x1)的系數為-1,所以第1行第2列和第2行第1列的元素均為-1。
? ? ? ??目標函數搞定之后,下面來看約束條件部分,約束條件應該寫成如下形式:
? ? ? ??本例中約束條件只有不等式約束,因此Aeq和beq為空,對于A和b很容易就可以得出來:
? ? ? ??而約束條件中對變量x1和x2只給出下限,沒有給上限,因此ub為空,
? ? ? ??得到了所有的參數,將參數輸入MATLAB,編程如下:(代碼是直接在Command Window中一行一行錄入的,所以每行前面有符號“>>”)
Warning: Large-scale algorithm does not currently solve this problem formulation, using medium-scale algorithm instead. > In quadprog at 291 Optimization terminated.x =0.66671.3333fval =-8.2222exitflag =1output = iterations: 3constrviolation: 0algorithm: 'medium-scale: active-set'firstorderopt: []cgiterations: []message: 'Optimization terminated.'lambda = lower: [2x1 double]upper: [2x1 double]eqlin: [0x1 double]ineqlin: [3x1 double] 參考文獻:
【1】孫文瑜, 徐成賢,朱德通.最優化方法(第二版)[M]. 北京:高等教育出版社, 2010.
【2】龔純,王正林. 精通MATLAB最優化計算[M].北京: 電子工業出版社,2009.
【3】lnsunqingshen, 464518439.什么是凸二次規劃, 百度知道,2011-06-20.
【4】李明強.幾類特殊凸二次規劃問題的求解算法研究[D].山東科技大學,2013 .
【5】于紹慧.邊界約束凸二次規劃的求解[D].南京航空航天大學,2005.
總結
以上是生活随笔為你收集整理的二次规划问题和MATLAB函数quadprog的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebFlux02 SpringBoot
- 下一篇: mongoose 查询 find 指定字