【问题标题】:Computing the gradient of an objective function evaluated at the optimum in a dynamic optimization problem, pyomo计算动态优化问题中最优评估目标函数的梯度,pyomo
【发布时间】:2023-02-10 00:56:33
【问题描述】:

我正在计算动态非线性优化问题的解决方案,我设置了 pyomo 库。我使用一个 ConcreteModel,它有一个目标函数和几个约束,都是时间索引的。 我的目标函数采用 ScalarObjective 的形式(我正在解决一个动态一般均衡问题,我在其中寻求最大化总福利)。我想计算在给定周期 t 相对于模型变量之一的目标梯度,以最佳方式评估。我的问题是一个离散时间问题。

我尝试了很多不同的选择,向 AI 聊天机器人寻求帮助(You Chat 和 ChatGPT),但我给出的每个解决方案都是不正确的——关于这个主题,AI 聊天机器人似乎知之甚少。 我觉得库 pyomo.dae 中的某些方法可能会有所帮助,但我还没有找到解决方案。有人可以帮我吗?

【问题讨论】:

    标签: pyomo nonlinear-optimization derivative


    【解决方案1】:

    您可以使用 Pyomo 的 differentiate 函数来执行此操作。这是一个玩具示例:

    import pyomo.environ as pyo
    from pyomo.core.expr.calculus.derivatives import differentiate
    m = pyo.ConcreteModel()
    m.x = pyo.Var()
    m.con = pyo.Constraint(expr=m.x<=10)
    m.obj = pyo.Objective(expr=m.x**2)
    pyo.SolverFactory('ipopt').solve(m)
    print(pyo.value(m.x))
    # -1.2528349584581178e-10
    
    # Evaluate the derivative at current value of m.x
    ddx = differentiate(m.obj, wrt=m.x)  
    print(ddx)
    # -2.5056699169162357e-10
    
    # Return derivative expression
    ddx2 = differentiate(m.obj, wrt=m.x, mode='sympy')
    print(ddx2)
    # 2.0*x
    

    您可以在此处阅读有关此功能的更多信息:https://github.com/Pyomo/pyomo/blob/main/pyomo/core/expr/calculus/derivatives.py#L31

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2022-06-16
      • 2013-07-26
      • 1970-01-01
      • 2018-11-17
      • 2017-08-05
      相关资源
      最近更新 更多