【问题标题】:How to multiply decision variable with a matrix in Gurobi Python如何在 Gurobi Python 中将决策变量与矩阵相乘
【发布时间】:2016-10-27 13:52:29
【问题描述】:

我对 Gurobi 很陌生,我正在尝试按如下方式实现分配问题:

      # Create decision variables for the allocation
        x = {}
        for s in arr1:
           for t in arr2:
              x[s,t] = m.addVar(vtype=GRB.BINARY, name="allocation")

              x[s,t] == x[s,t] * mymat[s]
        m.modelSense = GRB.MAXIMIZE
        m.update()

我想知道写出上述线性表达式是可能的,这样我就可以最大限度地分配具有相似偏好的人来完成相同的任务。

但是,在使用 x[s,t].x 检索结果时,运行上述编写的模型会产生错误。错误是

GurobiError:无法检索属性“X”

数据从一个单独的文件传入模型,代码如下:

    data=c.execute('select id,pref from data')
    result = c.fetchall()
    pref_data=dict(result)
   
    mymat=defaultdict(int)
    a=1
    for i in range(1,10):
       row = [] 
       for x in range(0,i):
          row.append(0)
      for j in range(i+1, 10):
          if pref_data[i]==pref_data[j]:
             row.append(1)
          else:
             row.append(0)
      mymat[a]=row
      a+=1

【问题讨论】:

  • X 属性(Var.XVar.get('X'))表示最优解的值,因此在调用 Model.optimize() 之前,您无法访问 X 属性。
  • 是的,我明白了。我实际上在程序结束时调用了 x[s,t] .x。抱歉,我只复制粘贴了一部分代码。但是,当我添加术语 x[s,t] == x[s,t] * mymat[s] 时出现此错误。所以我的主要问题是知道如何解决这个错误?
  • 参见related question,了解如何使用“不可约不可行集”来诊断不可行问题。

标签: python matrix gurobi


【解决方案1】:

除非对所有 a,mymat[a] = 1,否则您的模型是不可行的。如果不是这种情况,Gurobi 会告诉您该实例不可行(您可以使用 status = Model.optimize() 进行检查)并且没有要从您的变量中检索的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多