跳转到主要内容

我怎样才能Gurobi python变量的值等待模型更新

回答

评论

8的评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    你提供的代码片段不是可执行的,不会导致你描述的错误。这很难在这种情况下提供帮助。

    如果你得到“等待模式更新”错误,您可以执行更新之前写变量的属性访问方法的优化。请注意X属性只有如果一个可行的解决方案是可用的,例如,通过之前的优化运行。你可以检查是否可以通过一个解决方案SolCount属性。

    最好的问候,
    Jaromił

    0
  • Namkyoung李
    Gurobi-versary
    健谈的人
    第一个问题

    首先,我很抱歉之前的调查不足。
    关键是值提取的变量在优化之前,不能捕获与X属性和很难搜索更新方法。
    我现在简单的代码如下,但真正的二次函数由cal_module()示例要复杂得多。换句话说,结合二次函数是对象像MIP - > MIQP +域函数。因此在优化步骤,等决策变量x, y需要转换为numpy或熊猫作为二次输入配方包含在目标函数。这就是为什么我问如何得到变量的值是不确定在每一个模型迭代?


    - - - - - - - - - - - - - - - - - - - - - - -样品- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    进口numpy np
    进口gurobipy全科医生
    从gurobipy进口伽马线暴

    def cal_module (x, y):
    m = np.array ([])
    因为我在np.arange (len (x) 1):
    r = x[我]* * 2 + y (i + 1) * * 3
    m = np。追加(m, r)
    返回米

    mdl = gp.Model ()

    x = mdl。addVars(20磅= 5,乌兰巴托= 5,vtype = GRB.INTEGER)
    y = mdl。addVars(20磅= 5,乌兰巴托= 5,vtype = GRB.INTEGER)

    mdl。addConstrs (x [t] + y [t] < = 3 t的范围(20))

    pre_x pre_y = [], []
    因为我在范围(20):
    pre_x = x[我]。value_method或任何其他方法
    pre_y = y[我]。value_method或任何其他方法

    obj = gp。quicksum (2 * x [t] + [t] t的范围(20))+ cal_module (pre_x pre_y)
    mdl。setObjective (obj GRB.MINIMIZE)

    mdl.optimize ()

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    如果我理解正确的话,你想构建一个二次表达式,将其添加到目标函数,优化它。你可以而且应该直接使用的变量对象来实现这一点。下面的代码应该做你有什么想法

    进口gurobipy全科医生
    从gurobipy进口伽马线暴

    def cal_module (x, y,模型):
    qExpr = gp.QuadExpr (0)
    因为我在范围(len (x) 1):
    z =模型。addVar(磅= 0,乌兰巴托= 25日vtype =伽马线暴。整数,name = " aux_y_sqr_ % d % (i + 1))
    模型。addConstr (z = = y (i + 1) * y (i + 1) name = " aux_y_sqr_constr_ % d % (i + 1))
    qExpr。添加(x[我]* * 2 + y (i + 1) * z)
    返回qExpr

    mdl = gp.Model ()
    x = mdl。addVars(20磅= 5,乌兰巴托= 5,vtype =伽马线暴。整数,name = " x ")
    y = mdl。addVars(20磅= 5,乌兰巴托= 5,vtype =伽马线暴。整数,name = " y ")
    mdl。addConstrs (x [t] + y [t] < = 3 t的范围(20))
    obj = gp。quicksum (2 * x [t] + [t] t的范围(20))+ cal_module (x, y, mdl)
    mdl。setObjective (obj GRB.MINIMIZE)
    mdl.setParam(“凸”,2)
    mdl.write (“myLP.lp”)
    mdl.optimize ()

    请注意,该变量tupledicts\ (\ texttt {x, y} \)直接传递到\ (\ texttt {def_module} \)功能。

    自从Gurobi不支持立方\ (y ^ 3 \),你必须添加一个辅助变量模型立方项二次和双线性项\ (z = y ^ 2 \) \ (y \ cdot z \),看到的我怎么模型在Gurobi多重线性方式?

    你的模型是凸的,因此,参数非凸必须设置。我使用了吗方法写一个LP文件,这使得分析是否确实是一个正确的模型,更容易。

    最好的问候,
    Jaromił

    0
  • Namkyoung李
    Gurobi-versary
    健谈的人
    第一个问题

    嗨Jaromił,

    你的评论非常有助于理解Gurobi的解决流程。多谢。

    当涉及到二次表达式,我的问题是非线性(不是二次),代表一个物理公式和看起来几乎不可能转换成模型使用gurobi库的基础变量,因为它的复杂性。

    作为一个结果,我想抓住任何属性的变量之前解决更新()方法。我寻找的属性是一个状态变量包含0(零)或其他价值,但是我找不到这种属性gurobi文档中,//m.a-toku.com/manbet体育手机客户端documentation/9.5/refman/attributes.html秒:属性

    挖出这个问题,我想知道我可以知道变量在优化的价值是零(0)。

    最好的问候,

    Namkyoung李

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    嗨Namkyoung李,

    如果我理解正确你的评论,你正在试图创建模型条件语句,即。类似,如果变量\ (x = 0 \)然后使用约束\(\)否则使用约束\ (b \)。这是正确的吗?

    如果是的,那么这篇文章我怎么在Gurobi模型条件语句?应该是你寻找的东西。
    如果不是,请精心远一点吗?可能提供的一个小例子你系模型。

    最好的问候,
    Jaromił

    0
  • Namkyoung李
    Gurobi-versary
    健谈的人
    第一个问题

    嗨Jaromił,

    我很欣赏你的延续的帮助。
    这是另一个示例代码,其中包含一个错误关于指标约束。
    我追求构建配方与输入变量是否有值0或正整数。

    最好的问候,

    Nam-kyoung

    进口gurobipy全科医生
    从gurobipy进口伽马线暴

    def tmp_f (x):
    k = np。阵列([1我的范围(10)))
    j在x:
    k [j] = 0
    返回总和((k + 1) * * 2)

    m = gp.Model (qp)

    x = m。addVars(10磅= 0,乌兰巴托= 10,vtype =伽马线暴。整数,name = " x ")
    y = m。addVars(10磅= 0,乌兰巴托= 10,vtype =伽马线暴。整数,name = " y ")
    b = m。addVars (10, vtype =伽马线暴。二进制,name = " b ")

    #基本约束
    m。addConstrs (x[我]+ 2 * y[我]< = 21我的范围(10))
    m。addConstrs (x[我]- y[我]> = 0我的范围(10))
    m.addConstr (x.sum (“*”) = = 9)

    #大m方法
    每股收益= 0.000001
    M = 100 +每股收益

    #模型如果x > 0 b = 1, b = 0
    m。addConstrs (x[我]> =每股收益- M * (1 - b[我])我的范围(10))
    m。addConstrs (x[我]< = M * b[我]我的范围(10))

    #指标约束
    z =[] #←←←初始化输入nonlinear-type配方
    t = 1
    因为我在范围(10):
    m。addConstr ((b[我]= = 1)> > (t = =))
    z.append (t)

    #目标函数
    obj = gp。quicksum (x[我]+ y[我]我的范围(10))
    m。setObjective (obj + tmp_f (z), GRB.MAXIMIZE)

    m.optimize ()
    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    这个线程是仍在继续指标约束包含常量值

    0

登录留下你的评论。