我正在寻找一些帮助来优化我的代码执行。
我建立了一个模型预测控制,我使用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()
提前致谢,
杰克