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

时间:2016-08-18 15:57:57

标签: scip

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

谢谢, 亚历克斯 (一个新的SCIP用户)

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分: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) );