【问题标题】:How to get values from every iteration in JuMP如何从 JuMP 中的每次迭代中获取值
【发布时间】:2021-09-04 22:36:33
【问题描述】:

我正在使用 JuMP、Ipopt 解决 julia 中的一个特定优化问题,并且我在查找值的历史记录时遇到了问题,即每次迭代中 x 的值。 我在文档中找不到任何有用的东西。

小例子:

using JuMP
import Ipopt

model = Model(Ipopt.Optimizer)
@variable(model, -2.0 <= x <= 2.0, start = -2.0)
@NLobjective(model, Min, (x - 1.0) ^ 2)
optimize!(model)
value(x)

我想从每次迭代中看到 x 的值,而不仅仅是最后一个创建 x 与迭代的图。

寻求帮助:)

【问题讨论】:

    标签: julia julia-jump ipopt


    【解决方案1】:

    每个求解器都有一个参数来表示结果的详细程度。 如果是 Ipopt,您可以在致电 optimize!(model) 之前进行:

    set_optimizer_attribute(model, "print_level", 7)
    

    在日志中寻找curr_x(这里是日志的一部分):

    **************************************************
    *** Summary of Iteration: 6:
    **************************************************
    
    iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
       6  3.8455657e-13 0.00e+00 8.39e-17  -5.7 5.74e-05    -  1.00e+00 1.00e+00f  1
    
    **************************************************
    *** Beginning Iteration 6 from the following point:
    **************************************************
    
    Current barrier parameter mu = 1.8449144625279479e-06
    Current fraction-to-the-boundary parameter tau = 9.9999815508553747e-01
    
    ||curr_x||_inf   = 9.9999937987374388e-01
    ||curr_s||_inf   = 0.0000000000000000e+00
    ||curr_y_c||_inf = 0.0000000000000000e+00
    ||curr_y_d||_inf = 0.0000000000000000e+00
    ||curr_z_L||_inf = 6.1403864613595829e-07
    

    【讨论】:

    • 谢谢,但我可以通过设置一些日志记录属性直接访问x 的值吗?我想创建一个情节x vs iteration
    • 根据@OscarDownson 的评论,我想你今天能做的最好的事情就是捕获上面的标准输出并解析它以获得 curr_x 值。
    【解决方案2】:

    目前这是不可能的。但是有一个未解决的问题:https://github.com/jump-dev/Ipopt.jl/issues/281

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2014-05-19
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多