首页 文章

如何将SCIP控制台输出重定向到具有AMPL接口的文本文件?

提问于
浏览
2

我通过Julia / JuMP中的AMPL接口使用SCIP,我想将控制台输出重定向到一个文件 . 是否有捷径可寻?使用Gurobi和IPOPT,我可以传递所需的文件名作为选项 . 我没有看到SCIP选项中列出的类似内容 .

谢谢,Alex(新的SCIP用户)

2 回答

  • 0

    如果JuMP没有为您提供捕获解算器的标准输出的选项,那么在没有修改源的情况下,目前无法执行此操作 . 如果你可以修改源代码,那么这里有一个简单的补丁,可以将输出输出到文件foo.txt中:

    --- a/interfaces/ampl/src/cmain.c
    +++ b/interfaces/ampl/src/cmain.c
    @@ -43,6 +43,8 @@ SCIP_RETCODE run(
    
        /* setup SCIP and print version information */
        SCIP_CALL( SCIPcreate(&scip) );
    +   
    +   SCIPsetMessagehdlrLogfile(scip, "foo.txt");
    
        SCIPprintVersion(scip, NULL);
        SCIPinfoMessage(scip, NULL, "\n");
    
  • 0

    此补丁将添加一个选项'display / logfile'来设置日志文件的名称 . 但是,您不会将日志的开头(SCIP版本和外部代码)放到该文件中 . 如果需要,只需相应地重新排序cmain.c .

    --- a/interfaces/ampl/src/cmain.c
    +++ b/interfaces/ampl/src/cmain.c
    @@ -38,6 +38,7 @@ SCIP_RETCODE run(
        SCIP* scip;
        char buffer[SCIP_MAXSTRLEN];
        SCIP_Bool printstat;
    +   char* logfile = NULL;
    
        assert(nlfile != NULL);
    
    @@ -57,6 +58,11 @@ SCIP_RETCODE run(
           "whether to print statistics on a solve",
           NULL, FALSE, FALSE, NULL, NULL) );
    
    +   SCIP_CALL( SCIPaddStringParam(scip, "display/logfile",
    +      "file to additionally write log to",
    +      &logfile, FALSE, "", NULL, NULL) );
    +   assert(logfile != NULL);
    +
        SCIPprintExternalCodes(scip, NULL);
        SCIPinfoMessage(scip, NULL, "\n");
    
    @@ -65,6 +71,8 @@ SCIP_RETCODE run(
        {
           SCIP_CALL( SCIPreadParams(scip, setfile) );
        }
    +   if( *logfile )
    +      SCIPsetMessagehdlrLogfile(scip, logfile);
    
        SCIP_CALL( SCIPgetBoolParam(scip, "display/statistics", &printstat) );
    

相关问题