提取gurobi多维变量值并形成numpy数组

Loa*_*one 6 python arrays numpy gurobi

我想知道,当我在Gurobi中定义多维变量时,如何提取解的所有值并根据变量的原始坐标将它们组织到Numpy数组中。

我使用 Python API 在 Gurobi 中定义了以下决策变量:

for i in range(N):
  for t in range(M):
      Station_Size[i,t] = m.addVar(ub=Q, name = 'Station_Size_%s_%s' %(i,t))
      for j in range(N):
         Admission[i,j,t] = m.addVar(ub = Arrival_Rate[t,i,j], obj=-1, name = 'Admission_Rate_%s_%s_%s' %(i,j,t))
         Return[i,j,t] = m.addVar(name = 'Return_Rate_%s_%s_%s' %(i,j,t))
Run Code Online (Sandbox Code Playgroud)

我已经解决了问题,我有三本字典:

Station_Size, Admission and Return
Run Code Online (Sandbox Code Playgroud)

我知道解决方案可以通过以下方式访问:

Station_Size[i,t].X, Admission[i,j,t].X and Return[i,j,t].X
Run Code Online (Sandbox Code Playgroud)

我想创建三个 Numpy 数组:

Array_Station_Size[i,t] = Station_Size[i,t].X
Array_Admission[i,j,t] = Admission[i,j,t].X
Run Code Online (Sandbox Code Playgroud)

我绝对可以通过创建三个循环并逐个元素创建 Numpy 数组来做到这一点。如果循环不需要很长时间,这是可行的。但我只是想知道是否有更好的方法来做到这一点。如果我没有说清楚,请评论。

小智 2

假设您的模型名称为m,请执行以下操作:

Array_Station_Size = m.getAttr('x', Station_Size)
Run Code Online (Sandbox Code Playgroud)

现在是 gurobipy.tupledict 。请参阅此处的 gurobi 文档 http://www.gurobi.com/documentation/8.1/quickstart_windows/py_results.html