使用CVXOPT对大量变量进行二次编程

时间:2018-07-29 23:35:36

标签: optimization cvxopt quadratic-programming

我是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)是决策变量。

干杯!!!

2 个答案:

答案 0 :(得分:0)

我不需要求解器。

0 <= x(t) <= 10
sum(x(t)) = 2000
T=100一起使用

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

答案 1 :(得分:0)

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]]