【问题标题】:Quadratic Programming with a large number of variables using CVXOPT使用 CVXOPT 进行大量变量的二次规划
【发布时间】:2018-07-29 23:35:36
【问题描述】:

我是 CVXOPT 的新手。我已经在 CVXOPT 文档中试用了example quadratic program(带有 2 个变量),并且我能够理解它。现在我需要解决一个包含大量变量(例如:100 个变量)的二次规划问题。如何使用 CVXOPT 做到这一点?

我要解决的问题如下所示。

最小化

Σ [ d(t) + x(t) ]²        ; t=1, ....., 100

这样,

0 <= x(t) <= 10

Σ x(t) = 600

这里,d(t) 以 t=(1, ...,100) 着称。

x(t) for t=(1, ...,100) 是决策变量。

干杯!!!

【问题讨论】:

    标签: optimization cvxopt quadratic-programming


    【解决方案1】:

    cvxpy 可能会简单一些:

    import numpy as np
    import cvxpy as cvx
    
    N = 100
    d = np.random.uniform(-500,500,N)
    
    x = cvx.Variable(N)
    prob = cvx.Problem(cvx.Minimize(cvx.norm(x+d)), [x >= 0, x <= 10, sum(x) == 600])
    prob.solve()
    print(prob.status)
    v = x.value
    print(v)
    

    这给了

    optimal
    [[  3.65513295e-09]
     [  4.89791266e-09]
     [  3.05045765e-09]
     [  9.99999999e+00]
     . . .
     [  1.00000000e+01]
     [  2.85640643e-09]
     [  5.42473434e-09]]
    

    【讨论】:

    • 感谢您的回答。但是,我需要通过 CVXOPT 来解决。
    【解决方案2】:

    我不需要求解器:

    0 <= x(t) <= 10
    sum(x(t)) = 2000
    

    T=100 将不可行。有了这些界限,总和将在 0 到 1000 之间。

    【讨论】:

    • 对不起,我只是添加了一些价值,没有太多关注。现在将其编辑为 600。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2012-09-03
    相关资源
    最近更新 更多