Я хочу оптимизировать одну и ту же целевую функцию 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
В вышеупомянутом подходе для каждого набора ограничений я создаю отдельную модель, которая прекрасно работает. Тем не менее, есть ли лучший способ решить эту проблему, поскольку моя целевая функция одинакова в каждом случае, меняются только ограничения, поэтому я не должен объявлять новую модель каждый раз вместо того, чтобы только обновлять ограничения.