CVXPY 抛出 SolverError
CVXPY throws SolverError
使用 CVXPY 时,我经常得到 "SolverError"。他们的 doc 只是说这是由数值问题引起的,但没有提供有关如何避免这些问题的更多信息。
下面的代码片段是一个例子,问题很简单,但是 'CVXOPT' 求解器只是抛出 "SolverError"。的确,如果我们将求解器换成另一个,比如 'ECOS',问题就会按预期解决。但关键是,'CVXOPT' 原则上应该解决这个微不足道的问题,这让我很困惑为什么它不起作用。
import numpy as np
import cvxpy as cv
np.random.seed(0)
temp = np.random.rand(5)
T = 2
x = cv.Variable(T)
u = cv.Variable(2, T)
pbs = []
for t in range(T):
cost = cv.sum_squares(x[t]-temp[t])
constr = [x[t] == u[0,t]+u[1,t],]
pbs.append(cv.Problem(cv.Minimize(cost), constr))
prob = sum(pbs)
prob.solve(solver='CVXOPT')
使用prob.solve(solver='CVXOPT', kktsolver=cv.ROBUST_KKTSOLVER)
使优化过程更加稳健。
使用 CVXPY 时,我经常得到 "SolverError"。他们的 doc 只是说这是由数值问题引起的,但没有提供有关如何避免这些问题的更多信息。
下面的代码片段是一个例子,问题很简单,但是 'CVXOPT' 求解器只是抛出 "SolverError"。的确,如果我们将求解器换成另一个,比如 'ECOS',问题就会按预期解决。但关键是,'CVXOPT' 原则上应该解决这个微不足道的问题,这让我很困惑为什么它不起作用。
import numpy as np
import cvxpy as cv
np.random.seed(0)
temp = np.random.rand(5)
T = 2
x = cv.Variable(T)
u = cv.Variable(2, T)
pbs = []
for t in range(T):
cost = cv.sum_squares(x[t]-temp[t])
constr = [x[t] == u[0,t]+u[1,t],]
pbs.append(cv.Problem(cv.Minimize(cost), constr))
prob = sum(pbs)
prob.solve(solver='CVXOPT')
使用prob.solve(solver='CVXOPT', kktsolver=cv.ROBUST_KKTSOLVER)
使优化过程更加稳健。