首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中使用Numpy进行二次编程?

在Python中使用Numpy进行二次编程?
EN

Stack Overflow用户
提问于 2018-07-04 02:59:26
回答 2查看 6.1K关注 0票数 5

我正在将一些MATLAB代码翻译成Python。有一行代码给我带来了一些麻烦:

代码语言:javascript
运行
复制
[q,f_dummy,exitflag, output] = quadprog(H,f,-A,zeros(p*N,1),E,qm,[],[],q0,options);

我查阅了MATLAB中的文档,发现使用了quadprog函数进行优化(特别是最小化)。

我试图在Python中找到类似的函数(使用numpy),但似乎没有。

有没有更好的方法把这行代码翻译成Python?或者有其他可以使用的包吗?我需要创建一个完成相同任务的新函数吗?

感谢您的时间和帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-04 07:34:58

有一个名为CVXOPT的库,其中包含二次编程。

代码语言:javascript
运行
复制
def quadprog_solve_qp(P, q, G=None, h=None, A=None, b=None):
    qp_G = .5 * (P + P.T)   # make sure P is symmetric
    qp_a = -q
    if A is not None:
        qp_C = -numpy.vstack([A, G]).T
        qp_b = -numpy.hstack([b, h])
        meq = A.shape[0]
    else:  # no equality constraint
        qp_C = -G.T
        qp_b = -h
        meq = 0
    return quadprog.solve_qp(qp_G, qp_a, qp_C, qp_b, meq)[0] 
票数 3
EN

Stack Overflow用户

发布于 2018-07-06 06:21:11

OSQP是一个基于ADMM的专门的免费QP求解器。我已经针对您的问题调整了qpsolvers repository中的OSQP documentation demo和OSQP调用。

请注意,在CSC format中,矩阵HG应该是稀疏的。这是脚本

代码语言:javascript
运行
复制
import numpy as np
import scipy.sparse as spa
import osqp


def quadprog(P, q, G=None, h=None, A=None, b=None,
             initvals=None, verbose=True):
    l = -np.inf * np.ones(len(h))
    if A is not None:
        qp_A = spa.vstack([G, A]).tocsc()
        qp_l = np.hstack([l, b])
        qp_u = np.hstack([h, b])
    else:  # no equality constraint
        qp_A = G
        qp_l = l
        qp_u = h
    model = osqp.OSQP()
    model.setup(P=P, q=q,
                A=qp_A, l=qp_l, u=qp_u, verbose=verbose)
    if initvals is not None:
        model.warm_start(x=initvals)
    results = model.solve()
    return results.x, results.info.status


# Generate problem data
n = 2   # Variables
H = spa.csc_matrix([[4, 1], [1, 2]])
f = np.array([1, 1])
G = spa.csc_matrix([[1, 0], [0, 1]])
h = np.array([0.7, 0.7])
A = spa.csc_matrix([[1, 1]])
b = np.array([1.])

# Initial point
q0 = np.ones(n)

x, status = quadprog(H, f, G, h, A, b, initvals=q0, verbose=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51161348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档