我在Julia / JuMP中通过AMPL接口使用SCIP,我想将控制台输出重定向到文件。是否有捷径可寻?使用Gurobi和IPOPT,我可以传递所需的文件名作为选项。我没有看到SCIP选项中列出的类似内容。
谢谢, 亚历克斯 (一个新的SCIP用户)
答案 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) );