跳转到主要内容

Gurobi Python:不能叫外面的决策变量”。addConstr”功能

回答

评论

2的评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    有两个问题与你的代码。

    1。你不是创建一个20 x3变量x_vars而是要创建两个变量x[20]和[8]通过\ (\ texttt {x[20]} \)和\ (\ texttt {x [8]} \)。因此,您得到KeyError。通过构造x变量

    x_vars = m。addVars (S、N, vtype =伽马线暴。二进制,name = ' X ')

    解决了这个问题。

    2。你的最大价值LinExpr对象。这不是定义。Gurobi有自己的max函数来处理这个问题。您可以使用addGenConstrMax方法制定你需要的表达式。为此,你需要为每个术语引入辅助变量\ (1-x_ {s、n} \),因为addGenConstrMax方法只接受单一优化变量。此外,您必须定义\ (\ texttt {R_c} \)作为优化变量。

    最好的是,你甚至不需要马克斯表达式,因为x变量是二进制。这意味着

    \ [R_c = \马克斯{1 - x, 0} = 1 - x。\]

    我不完全理解你为什么需要\ (\ texttt {R_c} \)和\ (\ texttt {R_e} \),因为相同的值相等。

    那么什么是应该为你工作

    x_vars = m。addVars (S、N, vtype =伽马线暴。二进制,name = ' X ')
    R_c = m。addVars (S、N, vtype =伽马线暴。二进制,name = ' R_c ')
    年代的范围(s):
    n (n)范围:
    m。addConstr (R_c (s、n) = = 1 - x_vars [s、n], name = " max_ % d % d % (s、n))
    […]

    最好的问候,
    Jaromił

    0
  • 韩寒
    Gurobi-versary
    第一个评论
    第一个问题

    亲爱的Jaromił,

    非常感谢你为你的温暖和专业的回答,它帮助很多!

    回答你的问题:事实上,R_c和R_e是不同的函数对x。这个项目是一个简化版,通过编写R_c很抱歉混淆了你和R_e相同的形式由于我们的疏忽。但是我相信这并不影响你的回复的准确性,你说我们想问的问题,非常感谢!

    我们将根据你的建议修改我们的Python程序。如果我们遇到一个新问题,我们将设法解决它自己。如果它不工作,我们将继续跟进下这个问题。

    最后,这个论坛真是太棒了!谢谢你提供这样一个平台!

    最好的,

    0

登录留下你的评论。