我是Gurobi的新手,目前正在研究一个可行性优化问题,其中作为我变量的一部分,我有一个MVar网格(矩阵)grid_values
,另一个b1
定义如下:
grid_values = model.addMVar( (n, n), lb=1, ub=9, vtype=GRB.INTEGER, name="grid_values")
b1 = model.addMVar((n, n), vtype=GRB.BINARY, name='b1')
现在,我尝试添加一些约束,其中每个约束涉及一行grid_values
和一行b1
:
model.addConstrs(((grid_values[i, :] - j ).getValue() @ b1[i, :] == 0
for i in range(n)
for j in range(n)), name='row_constr')
其中j
是所有1的向量,然后是所有2的向量。。。都是n。但是,当我运行上述代码时,我得到:
GurobiError: Index 0 out of range for attribute 'X'.
我哪里出错了?感谢您的帮助
我还尝试使用np.full((n,), j)
而不是j
作为向量,但没有效果
首先,请注意
getValue()
方法计算当前解决方案中MLinExpr对象(线性矩阵表达式)的值,即在解决优化问题之后然后,据我所知,目前还没有办法像点积那样对Mvar对象进行“逐点”乘法。因此,您可以尝试以简单矩阵向量积的形式编写约束,或者使用已知的代数建模方法而不是矩阵api:
相关问题 更多 >
编程相关推荐