Gurobi: оптимизировать ту же функцию цели, но с другим набором ограничений в цикле - PullRequest
0 голосов
/ 21 января 2020

Я хочу оптимизировать одну и ту же целевую функцию QP, но каждый раз с разными наборами ограничений. Это мой текущий подход, который отлично работает.

def Generalsolver(X0,constraints,lb=None,ub=None,verbose = False):
        X0 = np.squeeze(np.array(X0))
        sizeofX0 = len(X0)

        P = 2.0 * np.eye(sizeofX0)
        q = -2.0 * np.array(X0)
        for count,cst in enumerate(constraints):         
           W = cst['A']
           B = cst['b']

           G = np.array(W)
           h = np.array(B)
           x = solveUsingGurobi(P=P,q=q,G=G,b=h,lb=lb,ub=ub)

def solveUsingGurobi(P=None,q=None,G=None,b=None,lb=None,ub=None):
     model = gp.Model()
     x = model.addMVar(shape=len(q),vtype=GRB.INTEGER,lb=lb, ub=ub)
     model.update()
     quadterm =  x @ P @ x * 0.5
     linterm = q @ x

     model.setObjective( quadterm + linterm, sense= GRB.MINIMIZE)
     model.addConstr(G @ x <= b, name="c")
     model.Params.OutputFlag = 0

     model.optimize()
     return x.X

В вышеупомянутом подходе для каждого набора ограничений я создаю отдельную модель, которая прекрасно работает. Тем не менее, есть ли лучший способ решить эту проблему, поскольку моя целевая функция одинакова в каждом случае, меняются только ограничения, поэтому я не должен объявлять новую модель каждый раз вместо того, чтобы только обновлять ограничения.

...