0

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 を渡すことであることを確認してください。

4

1 に答える 1