使用python求解二次規劃的問題

2022-10-04 14:45:27 字數 1767 閱讀 6178

python中支援convex optimization(凸規劃)的模組為cvxopt,其安裝方式為:

pip install cvxopt

一、數學基礎

二次型二次型(quadratic form):n個變數的二次多項式稱為二次型,即在乙個多項式中,未知數的個數為任意多個,但每一項的次數都為2的多項式。其基本形式如下

亦可寫作,

,稱作二次型的矩陣表示,其中a是對稱矩陣。仿照如下的定義,我們可以直接在其基本形式和矩陣表示之間相互轉化。

2.正定矩陣

設a是n階實對稱矩陣, 如果對任意一非零實向量x,都使二次型

成立,則稱f(x)為正定二次型,矩陣a稱為正定矩陣(positive definite),a為正定矩陣。

相應的,如果對任意一非零實向量x,都使二次型

成立,則稱f(x)為半正定二次型,jycprga為半正定矩陣。

3.二次規劃問題

二次規劃是指,帶有二次型目標函式和約束條件的最優化問題。其標準形式如下:www.cppcns.com

即在gxwww.cppcns.com時,目標函式是凸函式,存在全域性最優解(不唯一);p是不定矩陣時,目標函程式設計客棧數非凸,存在多個區域性最小值和穩定點,為np難問題。(本篇部落格中我們不考慮非正定情況)。

二、python程式求解

工具包:cvxopt python 凸優化包

函式原型:cvxopt.solvers.qp(p,q,g,h,a,b)

p,q,g,h,a,b的含義參見上面的二次規劃問題標準形式。

程式設計求解思路:

1.對於乙個給定的二次規劃問題,先轉換為標準形式(參見數學基礎中所講的二次型二中形式轉換)

2.對照標準形勢,構建出矩陣p,q,g,h,a,b

3.呼叫result=cvxopt.solvers.qp(p,q,g,h,a,b)求解

4.print(result)檢視結果,其中result是乙個字典,我們可直接獲得其某個屬性,e.g. print(result['x'])

下面jycprg我們來看乙個例子

import pprint

from cvxopt import matrix, solvers

p = matrix([[4.0,1.0],[1.0,2.0]])

q = matrix([1.0,1.0])

g = matrix([[-1.0,0.0],[0.0,-1.0]])

h = matrix([0.0,0.0])

a = matrix([1.0,1.0],(1,2))#原型為cvxopt.matrix(array,dims),等價於a = matrix([[1.0],[1.0]])

b = matrix([1.0])

result = solvers.qp(p,q,g,h,a,b)

print('x\n',result['x'])

執行結果:

注意事項:

cvxopt.matrix與numpy.matrix的排列順序不同,其中cvxopt.matrix是列優先,numpy.matrix是行優先。具體可見下面例項

import numpy as np

from cvxopt import matrix

a = np.matrix([[1,2],[3,4]])

b = matrix([[1,2],[3,4]])

print('numpy.matrix',a)

print('cvxopt.matrix',b)

執行結果:

本文標題: 使用python求解二次規劃的問題

本文位址:

python求解二次規劃問題

python中支援convex optimization 凸規劃 的模組為cvxopt,其安裝方式為 pip install cvxopt二次型 二次型 quadratic form n個變數的二次多項式稱為二次型,即在乙個多項式中,未知數的個數為任意多個,但每一項的次數都為2的多項式。其基本形式如...

python求解(線性和二次)規劃問題

二次規劃標準形式 python對應解決問題的 from cvxopt import matrix import cvxopt.solvers as sol result sol.qp p,q,g,h,a,b 1 線性 問題 此問題中沒有p,q 2 二次 a matrix 1.0,1.0 1,2 原型...

python 二次規劃(argmax)問題

求解argmax時用到二次規劃,matlab中 quadprog使用很簡單,但是在python中這一類資料卻很少,網上給出的大部分答案都是,但是對各個變數的說明幾乎沒有,我帶入自己的變數時總是報錯 def quadprog solve qp p,q,g none,h none,a none,b no...