You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调用run_problem时实时将SNOPT_summary.out内容输出到终端?

实现Dymos调用run_problem时实时回显SNOPT输出到终端

可以通过以下几种方法实现需求:

  • 直接配置SNOPT输出到终端
    在设置SNOPT驱动的选项时,将SNOPT的输出文件指定为标准输出流(stdout),这样输出会同时显示在终端并可选择写入文件。修改优化器配置的示例代码如下:

    from openmdao.api import Problem
    import dymos as dm
    
    prob = Problem()
    # 此处添加你的Dymos模型构建代码
    
    # 配置SNOPT作为优化器
    prob.driver.options['optimizer'] = 'SNOPT'
    # 将Print file和Summary file指向标准输出(1对应stdout)
    prob.driver.opt_settings['Print file'] = 1
    prob.driver.opt_settings['Summary file'] = 1
    # 若需同时保留文件输出,可使用列表格式:['snopt_output.out', 1]
    

    这种方式最直接,让SNOPT原生支持终端输出,无需额外处理文件。

  • 实时监控SNOPT输出文件
    如果不想改动优化器配置,可启动后台线程实时读取SNOPT_summary.out的新增内容并打印到终端。示例代码:

    import threading
    import time
    
    def monitor_snopt_log(filename):
        with open(filename, 'r') as f:
            f.seek(0, 2)  # 移动文件指针到末尾
            while True:
                line = f.readline()
                if line:
                    print(line.rstrip())
                else:
                    time.sleep(0.1)
    
    # 启动监控线程(daemon=True确保主线程结束时自动退出)
    threading.Thread(target=monitor_snopt_log, args=('SNOPT_summary.out',), daemon=True).start()
    
    # 执行问题求解
    prob.run_problem()
    
  • 调整OpenMDAO日志级别
    OpenMDAO的日志系统可捕获部分SNOPT输出,确保脚本开启了足够的日志级别:

    import logging
    logging.basicConfig(level=logging.INFO)
    

    结合前两种方法,能更全面地在终端获取SNOPT的运行信息。

内容的提问来源于stack exchange,提问作者Philip Hahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 06:42:33