动态更新模型约束和目标函数参数

时间:2017-04-03 10:15:34

标签: python python-2.7 gurobi

我正在寻找一些帮助来优化我的代码执行。

我建立了一个模型预测控制,我使用Gurobi QP求解器在线解决QP问题。

对于每个采样时间,代码创建一个新模型,变量和约束。问题的结构在单次模拟过程中不会改变,但会改变约束系数和目标函数的值。

我想找到一种方法来更新这个系数,因为减少了求解器的执行时间。

现在,超过60%的时间执行都是在构建新约束中传递的。

在代码示例中,QP问题是:

目标函数:x ^ t H x + F ^ t x |||约束:A x <= b

F,A和b是改变每个时间步的矩阵。

%Code Example

import numpy as N
import gurobipy as gpy
m=gpy.Model()
H=mpcSim.H
A_cons=N.asarray(mpcSim.A_cons)
b=N.asarray(mpcSim.b)
F=mpcSim.F

n_cons,n_stato=A_cons.shape

x={}
for ii in range(n_stato):
    x[ii]=m.addVar(lb=-1e20,ub=1e20,name='x{}'.format(ii))

m.update()    

for ii in range(n_cons):
    m.addConstr(gpy.quicksum(A_cons[ii,jj]*x[jj] for jj in range(n_stato)), gpy.GRB.LESS_EQUAL, b[ii,0],name='Const{}'.format(ii))
m.update()

obj1=gpy.quicksum(gpy.quicksum(H[ii,jj]*x[ii] for ii in range(n_stato))*x[jj] for jj in range(n_stato))
obj2=gpy.quicksum(F[ii,0]*x[ii] for ii in range(n_stato))


m.setObjective(obj1+obj2)

m.optimize()

提前致谢,

杰克

0 个答案:

没有答案