首页 > 解决方案 > 在python的约束中索引gurobi矩阵变量的问题

问题描述

我正在研究一个优化问题。我在约束部分中索引 gurobi 矩阵变量时遇到问题。我无法解决矩阵维度问题。有人可以看看我的脚本并指导我如何修复它吗?

#In the nested loop of the constraint part:
Ts*np.linalg.inv(M)@Bu@dDelta)@useq[i-k-2]+s1[:,k]

由于 s1 变量,我收到不兼容的尺寸错误。但是,我将 s1 矩阵 3 x 1 切片,其大小已定义为 3x5。我不明白我错在哪里。非常感谢您提前。

#python code
N=5
m=gp.Model("matrix")
Ts=0.2
M=np.eye(3)
D=np.eye(3)
C=np.eye(3)
Bu=np.array((3,4)
pos=np.array([0,0,0]).T
u=np.array([0,0,0,0]).T

xseq=[]
xseq.append(pos)
useq=[]

#1st loop
for i in range (1,N+1):
    xseq.append(pos)
    useq.append(u)

#2nd loop
for i in range(N+1,7):
    s1=m.addMVar((3,N))   #s1 matrix of 3x5
    A=np.eye(3)
    deltaBut1=m.addVar(1)
    deltaBut2=m.addVar(1)
    deltaBut3=m.addVar(1)
    deltaBut4=m.addVar(1)
    deltaBut=np.array([deltaBut1,deltaBut2,deltaBut3,deltaBut4]).T
    
   dDelta=np.diag(deltaBut)
   obj1=0
   
   for k in range(0,N):    # N=5
       m.addConstr(xseq[i-k-1]-A@xseq[i-k-2]==(Ts*np.linalg.inv(M)@Bu@dDelta)@useq[i-k-2]+s1[:,k])
       obj1=obj1+s1[:,k]@s1[:,k]
   
   m.setObjective(10**3*(obj1))
   m.optimize

我正在实施的约束如下图所示:

在此处输入图像描述

目前,我不考虑这Bu*f(t-1)部分。

在约束部分,左侧给出 3x1 形状,而右侧给出形状 (3,) 的 MLinExpr。有人可以帮助我吗?

标签: pythongurobi

解决方案


推荐阅读