跳转到主要内容

【帮助】翻译代数的数学模型,使用python gurobi api

回答

评论

4评论

  • 理查德Oberdieck
    Gurobi员工Gurobi员工

    嗨,埃文斯,

    这是一个实现你的问题在Python中使用Gurobi:

    首先,我们定义一些基本知识。因为我不知道任何关于你的问题‚我只是生成一些随机数据。

    进口gurobipy全科医生
    进口numpy np

    #节点
    节点= 10
    V =范围(节点)
    n = np.random.rand(节点)#我最大容量节点

    #的弧
    = [(i, j)我在V的j) #弧的集合。这可能需要调整你的问题
    c = np.random。兰特(节点,节点)弧ij #最大值

    接下来,我们制定和解决问题:

    solution_found = False
    τ= 2

    虽然不是solution_found:
    T =范围(τ)
    m = gp.Model ()

    #添加变量
    τy = m.addVars(节点)
    x = m。addVars(τ,磅= -gp.GRB.INFINITY)

    #这选最后一个元素从y和最大化
    m。setObjective (y(节点1,tau-1),感觉= gp.GRB.MAXIMIZE)

    #约束
    在t t:
    j在V:
    如果t > 0:
    m。addConstr (y [j, t] - y [j, t - 1] x.sum (‘*’, j, t - 1) + x.sum (j,‘*’, t - 1) = = 0)

    m。addConstr (y (j, t) < = n [j])

    对于我来说,j的:
    m。addConstr (x (i, j, t) + x [j,我t] > = 0)
    m。addConstr (x (i, j, t) + x [j,我t] < = c (i, j))

    m.optimize ()

    如果m。= = gp.GRB.OPTIMAL现状:
    solution_found = True

    τ+ = 1

    注意Python索引为0,导致一些地方的“1”。同时,注意,我认为超级水槽是便利的最后一个节点。

    祝你好运

    0
  • 埃文斯Etrue霍华德
    Gurobi-versary
    第一个评论
    第一个问题

    非常感谢理查德的解决方案。你是一个救生圈。

    说实话我有5个更多的约束。请帮我如果我不要求太多。附件是一张其他的约束。

    0
  • 理查德Oberdieck
    Gurobi员工Gurobi员工

    嗨,埃文斯,

    我认为你应该给它自己根据我给的代码。你可以看到gurobipy界面非常易于使用,这样它就可以为你添加额外的约束。

    致以最亲切的问候

    理查德。

    0
  • 埃文斯Etrue霍华德
    Gurobi-versary
    第一个评论
    第一个问题

    谢谢。我已经能够实现它。非常感谢。你的代码非常直观、明了。

    你是需要很有帮助

    0

登录留下你的评论。