日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 求解二次规划(quadprog)

發(fā)布時(shí)間:2023/12/10 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 求解二次规划(quadprog) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

二次規(guī)劃

在MATLAB中,quadprog是具有線性約束的二次目標(biāo)函數(shù)的求解器。
quadprog 求由下式指定的問題的最小值

H、A 和 Aeq 是矩陣,f、b、beq、lb、ub 和 x 是向量。
其具體用法為:

x = quadprog(H,f)
x = quadprog(H,f,A,b)
x = quadprog(H,f,A,b,Aeq,beq)
x = quadprog(H,f,A,b,Aeq,beq,lb,ub)
x =quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
x =quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
x = quadprog(problem)
[x,fval] = quadprog()
[x,fval,exitflag,output] = quadprog(
)
[x,fval,exitflag,output,lambda] = quadprog(___)

當(dāng)解決一個(gè)具有線性約束的二次規(guī)劃問題時(shí):


要求解此問題,首先輸入系數(shù)矩陣。


使用MATLAB語句為:

H = [1 -1; -1 2]; f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3]; [x,fval,exitflag,output,lambda] = ...quadprog(H,f,A,b); x,fval %打印結(jié)果

當(dāng)使用python進(jìn)行二次型求解時(shí),采用qpsolvers庫中的solve_qp函數(shù)進(jìn)行求解:

進(jìn)行庫文件的安裝

pip install cvxopt==1.2.6 cvxpy==1.1.11 Cython==0.29.22 ecos==2.0.7.post1 numpy osqp==0.6.2.post0 qdldl==0.1.5.post0 qpsolvers==1.7.0 quadprog==0.1.8 scipy scs==2.1.4 -i https://pypi.tuna.tsinghua.edu.cn/simple from numpy import array from qpsolvers import solve_qpH=array([[1.,-1.],[-1.,2.]]) f=array([[-2.],[-6.]]).reshape((2,)) L=array([[1.,1.],[-1.,2.],[2.,1.]]) k=array([[2.],[2.],[3.]]).reshape((3,))x = solve_qp(H, f, L,k) print("QP solution: x = {}".format(x))

輸出

QP solution: x = [0.66666667 1.33333333]

也可參考這位大佬的博客

(https://blog.csdn.net/u013421629/article/details/108358409)

import numpy as np import cvxoptdef quadprog(H, f, L=None, k=None, Aeq=None, beq=None, lb=None, ub=None):"""Input: Numpy arrays, the format follows MATLAB quadprog function: https://www.mathworks.com/help/optim/ug/quadprog.htmlOutput: Numpy array of the solution"""n_var = H.shape[1]P = cvxopt.matrix(H, tc='d')q = cvxopt.matrix(f, tc='d')if L is not None or k is not None:assert(k is not None and L is not None)if lb is not None:L = np.vstack([L, -np.eye(n_var)])k = np.vstack([k, -lb])if ub is not None:L = np.vstack([L, np.eye(n_var)])k = np.vstack([k, ub])L = cvxopt.matrix(L, tc='d')k = cvxopt.matrix(k, tc='d')if Aeq is not None or beq is not None:assert(Aeq is not None and beq is not None)Aeq = cvxopt.matrix(Aeq, tc='d')beq = cvxopt.matrix(beq, tc='d')sol = cvxopt.solvers.qp(P, q, L, k, Aeq, beq)return np.array(sol['x'])if __name__ == '__main__':H=np.array([[1,-1],[-1,2]])print(H)f=np.array([[-2],[-6]])print(f)L=np.array([[1,1],[-1,2],[2,1]])print(L)k=np.array([[2],[2],[3]])print(k)res=quadprog(H, f, L,k)print(res)

總結(jié)

以上是生活随笔為你收集整理的python 求解二次规划(quadprog)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。