跳转到主要内容

优化指数函数的积分

正在进行的

评论

5个评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    嗨,依琳娜,

    如果你可以计算一个封闭形式\ \ int_ {0} ^ {t_i} r_i \ cdot e ^{- \伽马\ cdot x} dx \) \(\),那么你应该能够使用Gurobi为您的模型。

    如果你\ (r_i \)是一个常量,你可以计算每\(我\),那么它应该认为

    \[开始\{对齐*}
    \ int_ {0} ^ {t_i} r_i \ cdot e ^{- \伽马\ cdot x} dx = \压裂{r_i-r_i \ cdot e ^{- \伽马t_i}} {r_i}
    结束\{对齐*}\]
    当然,上述的形式强烈取决于是否\(θ\γ,\μ,\ \)只是常量值或优化变量。然而,如果你能计算一个封闭的形式,可以使用addGenConstrExp指数函数方法模型。

    如果你不能计算一个封闭形式的积分每\(我),我认为最好是尝试一种不同的方法或不同的解算器可以处理集成。手机万博登录你应该能够找到一些领域的“动态优化”。

    最好的问候,
    Jaromił

    0
  • 依琳娜Joksch
    Gurobi-versary
    健谈的人
    好奇的

    你好Jaromil,

    非常感谢你的快速回复!

    我试图模型这一问题,但目前最佳的结果是0,这不能是最优的。我做了什么错误呢?γ,μ是常数,但Θ和t我想优化。

    从gurobipy导入模型、伽马线暴quicksum

    c = 1
    k = 2
    一个= 0.005
    b = 1/600
    T = 8 * 60
    e = 5
    num_work = k + 1
    num_bre = k
    m =模型(“优化”)
    m.params。非凸= 2

    t = m。addVars (num_work磅= 0,乌兰巴托= T name = "工作")
    u = m。addVars (num_bre磅= 0,乌兰巴托= T name = "打破")
    r = m。addVars (num_work磅= 0,乌兰巴托= c, name =“工作效率”)
    l = m。addVars (num_work name = "指数")
    y = m。addVars (num_work name = " e-Funktion ")
    w = m。addVars (num_bre name = " exponent2 ")
    p = m。addVars (num_bre name = " e-Funktion2 ")
    q = m。addVars (num_work name =“目标函数”)
    z = m。addVars (num_bre、名称=“工作rate2”)

    #为疲劳e-function约束
    m.addConstr ((- b) * t [0] = = l [0])
    m.addGenConstrExp (l [0], y [0])
    m.addConstr ((- b) * t [1] = = l [1])
    m.addGenConstrExp (l [1], y [1])
    m.addConstr ((- b) * t [2] = = l [2])
    m.addGenConstrExp (l [2], y [2])

    对恢复e-function #约束
    m.addConstr ((——) * u [0] = = w [0])
    m.addGenConstrExp (w [0], p [0])
    m.addConstr ((——) * u [1] = = w [1])
    m.addGenConstrExp (w[1],[1]页)

    # r约束
    m。addConstr (1 = = r [0])
    m。addConstr (r [0] * [0] = = y z [0])
    m.addConstr ((c + (z [0] - c) * p [0]) = = r [1])
    m。addConstr (r [1] * [1] = = y z [1])
    m.addConstr (c + (z [1] - c) * p [1] = = r [2])

    m。addConstr (quicksum (t[我]我的范围(num_work)) + quicksum (u(我)我的范围(num_bre))) < = t)

    #目标函数
    m。addConstr ((quicksum (((r[我]——[我]* y[我])/ b)我的范围(num_work)) = = quicksum (q[我]我的范围(num_work))))

    m。setObjective (quicksum (q[我]我的范围(num_work)), GRB.MAXIMIZE)

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

    你的指数可以达到负值。然而,Gurobi默认值为变量下界\ (0 \)。

    允许负下界为指数似乎奏效。

    l = m。addVars (num_work磅=伽马线暴。无穷,name = "指数")
    w = m。addVars (num_bre磅=伽马线暴。无穷,name = " exponent2 ")

    最好的问候,
    Jaromił

    0
  • 依琳娜Joksch
    Gurobi-versary
    健谈的人
    好奇的

    非常感谢!这个帮助很大!

    0
  • 依琳娜Joksch
    Gurobi-versary
    健谈的人
    好奇的

    我又一次面临着一个问题. .我现在试图用零件制定数字更一般的表情,但是它不工作。有另一种方法用指数函数在Gurobi吗?

    m.addConstr ((- b) * t [0)= = l (0])
    m.addGenConstrExp (l [0),y (0])
    m.addConstr ((- b) * t [1)= = l (1])
    m.addGenConstrExp (l [1),y (1])
    m.addConstr ((- b) * t [2)= = l (2])
    m.addGenConstrExp (l [2),y (2])



    m.addConstr (((- b) * t[我]我的范围(num_work)) = = (l[我]我的范围(num_work)))
    m。addGenConstrExp (l[我]我的范围(num_work)), (y[我]我的范围(num_work)))
    0

登录留下你的评论。