38 #include "scip/scip.h"
39 #include "scip/scipdefplugins.h"
40 #include "scip/scipshell.h"
48 #if SCIP_VERSION < 700
49 #error GCG 3.1.0 can only be compiled with SCIP version 7.0.0 or higher
61 if( SCIPfileExists(filename) )
63 SCIPinfoMessage(scip, NULL,
"reading user parameter file <%s>\n", filename);
64 SCIP_CALL( SCIPreadParams(scip, filename) );
67 SCIPinfoMessage(scip, NULL,
"user parameter file <%s> not found - using default parameters\n", filename);
81 SCIP_RESULT result = SCIP_DIDNOTRUN;
86 SCIPinfoMessage(scip, NULL,
"\nread problem <%s>\n", filename);
87 SCIPinfoMessage(scip, NULL,
"============\n\n");
88 SCIP_CALL( SCIPreadProb(scip, filename, NULL) );
94 SCIPinfoMessage(scip, NULL,
"\nread decomposition <%s>\n", decname);
95 SCIPinfoMessage(scip, NULL,
"==================\n\n");
96 SCIP_CALL( SCIPreadProb(scip, decname, NULL) );
102 SCIPinfoMessage(scip, NULL,
"\nsolve problem\n");
103 SCIPinfoMessage(scip, NULL,
"=============\n\n");
107 SCIPinfoMessage(scip, NULL,
"\nprimal solution:\n");
108 SCIPinfoMessage(scip, NULL,
"================\n\n");
109 SCIP_CALL( SCIPprintBestSol(scip, NULL, FALSE) );
115 SCIPinfoMessage(scip, NULL,
"\nStatistics\n");
116 SCIPinfoMessage(scip, NULL,
"==========\n");
130 const char* defaultsetname
133 char* probname = NULL;
134 char* decname = NULL;
135 char* settingsname = NULL;
136 char* mastersetname = NULL;
137 char* logname = NULL;
139 SCIP_Bool paramerror;
140 SCIP_Bool interactive;
141 SCIP_Real primalreference = SCIP_UNKNOWN;
142 SCIP_Real dualreference = SCIP_UNKNOWN;
143 const char* dualrefstring;
144 const char* primalrefstring;
155 primalrefstring = NULL;
156 dualrefstring = NULL;
157 for( i = 1; i < argc; ++i )
159 if( strcmp(argv[i],
"-l") == 0 )
166 SCIPinfoMessage(scip, NULL,
"missing log filename after parameter '-l'\n");
170 else if( strcmp(argv[i],
"-q") == 0 )
172 else if( strcmp(argv[i],
"-s") == 0 )
176 settingsname = argv[i];
179 SCIPinfoMessage(scip, NULL,
"missing settings filename after parameter '-s'\n");
183 else if( strcmp(argv[i],
"-m") == 0 )
187 mastersetname = argv[i];
190 SCIPinfoMessage(scip, NULL,
"missing settings filename for master program after parameter '-m'\n");
194 else if( strcmp(argv[i],
"-f") == 0 )
201 SCIPinfoMessage(scip, NULL,
"missing problem filename after parameter '-f'\n");
205 else if( strcmp(argv[i],
"-d") == 0 )
212 SCIPinfoMessage(scip, NULL,
"missing decomposition filename after parameter '-d'\n");
216 else if( strcmp(argv[i],
"-c") == 0 )
221 SCIP_CALL( SCIPaddDialogInputLine(scip, argv[i]) );
226 SCIPinfoMessage(scip, NULL,
"missing command line after parameter '-c'\n");
230 else if( strcmp(argv[i],
"-b") == 0 )
237 file = SCIPfopen(argv[i],
"r");
240 SCIPinfoMessage(scip, NULL,
"cannot read command batch file <%s>\n", argv[i]);
241 SCIPprintSysError(argv[i]);
246 while( !SCIPfeof(file) )
248 char buffer[SCIP_MAXSTRLEN];
250 (void)SCIPfgets(buffer, SCIP_MAXSTRLEN, file);
251 if( buffer[0] !=
'\0' )
253 SCIP_CALL( SCIPaddDialogInputLine(scip, buffer) );
262 SCIPinfoMessage(scip, NULL,
"missing command batch filename after parameter '-b'\n");
266 else if( strcmp(argv[i],
"-o") == 0 )
270 printf(
"wrong usage of reference objective parameter '-o': -o <primref> <dualref>\n");
276 primalrefstring = argv[i + 1];
277 dualrefstring = argv[i+2];
283 SCIPinfoMessage(scip, NULL,
"invalid parameter <%s>\n", argv[i]);
287 if( interactive && probname != NULL )
289 SCIPinfoMessage(scip, NULL,
"cannot mix batch mode '-c' and '-b' with file mode '-f'\n");
292 if( probname == NULL && decname != NULL )
294 SCIPinfoMessage(scip, NULL,
"cannot read decomposition file without given problem\n");
307 SCIPsetMessagehdlrQuiet(scip, quiet);
310 if( logname != NULL )
312 SCIPsetMessagehdlrLogfile(scip, logname);
320 SCIPprintVersion(scip, NULL);
321 SCIPinfoMessage(scip, NULL,
"\n");
323 SCIPprintExternalCodes(scip, NULL);
324 SCIPinfoMessage(scip, NULL,
"\n");
330 if( settingsname != NULL )
334 else if( defaultsetname != NULL )
336 SCIP_CALL(
readParams(scip, defaultsetname) );
339 if( mastersetname != NULL )
348 if( probname != NULL )
350 SCIP_Bool validatesolve = FALSE;
352 if( primalrefstring != NULL && dualrefstring != NULL )
355 if( ! SCIPparseReal(scip, primalrefstring, &primalreference, &endptr) ||
356 ! SCIPparseReal(scip, dualrefstring, &dualreference, &endptr) )
358 printf(
"error parsing primal and dual reference values for validation: %s %s\n", primalrefstring, dualrefstring);
362 validatesolve = TRUE;
369 SCIP_CALL( SCIPvalidateSolve(scip, primalreference, dualreference, SCIPfeastol(scip), FALSE, NULL, NULL, NULL) );
374 SCIPinfoMessage(scip, NULL,
"\n");
375 SCIP_CALL( SCIPstartInteraction(scip) );
380 SCIPinfoMessage(scip, NULL,
"\nsyntax: %s [-l <logfile>] [-q] [-s <settings>] [-f <problem>] [-m <mastersettings>] [-d <decomposition>] [-b <batchfile>] [-c \"command\"]\n"
381 " -l <logfile> : copy output into log file\n"
382 " -q : suppress screen messages\n"
383 " -s <settings> : load parameter settings (.set) file\n"
384 " -m <mastersettings> : load parameter settings for master program (.set) file\n",
386 SCIPinfoMessage(scip, NULL,
" -f <problem> : load and solve problem file\n"
387 " -d <decomposition> : load decomposition file\n"
388 " -o <primref> <dualref> : pass primal and dual objective reference values for validation at the end of the solve\n"
389 " -b <batchfile> : load and execute dialog command batch file (can be used multiple times)\n"
390 " -c \"command\" : execute single line of dialog commands (can be used multiple times)\n\n");
402 const char* defaultsetname
412 SCIP_CALL( SCIPcreate(&scip) );
429 SCIP_CALL( SCIPfree(&scip) );
431 BMScheckEmptyMemory();
444 SCIP_RETCODE retcode;
448 if( retcode != SCIP_OKAY )
450 SCIPprintError(retcode);