使用 CVXOPT 进行大量变量的二次规划
Quadratic Programming with a large number of variables using CVXOPT
我是 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) 是决策变量。
干杯!
我不需要求解器:
0 <= x(t) <= 10
sum(x(t)) = 2000
与 T=100
将不可行。有了这些界限,总和将在 0 到 1000 之间。
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 新手。我已经尝试了 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) 是决策变量。
干杯!
我不需要求解器:
0 <= x(t) <= 10
sum(x(t)) = 2000
与 T=100
将不可行。有了这些界限,总和将在 0 到 1000 之间。
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]]