我已经使用 CVXPY 和它的一些 LP 求解器来确定 A*x <= b 问题的解决方案是否可行,现在我想尝试 PySCIPOpt。我在文档中找不到这样的例子,而且我很难找出正确的语法。使用 CVXPY,代码很简单:
def do_cvxpy(A, b, solver):
x = cvxpy.Variable(A.shape[1])
constraints = [A@x <= b] #The @ denotes matrix multiplication in CVXPY
obj = cvxpy.Minimize(0)
prob = cvxpy.Problem(obj, constraints)
prob.solve(solver=solver)
return prob.status
我认为 PySCIPOpt 不能像上面那样使用矩阵表示法,但必须将向量和矩阵视为标量变量的集合,每个变量都必须单独添加,所以我尝试了这个:
def do_scip(A, b):
model = Model("XYZ")
x = {}
for i in range(A.shape[1]):
x[i] = model.addVar(vtype="C", name="x(%s)" % i)
model.setObjective(0) #Is this right for a feasibility-only problem?
model.addCons(A*x <= b) #This is certainly the wrong syntax
model.optimize()
return model.getStatus()
任何人都可以帮助我解决此类问题的 addCons() 中约束的正确形式,并确认询问解决方案是否可行的可接受方法是简单地将 0 作为目标传递?