1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /*                                                                           */
3 /*        This file is part of the program PolySCIP                          */
4 /*                                                                           */
5 /*    Copyright (C) 2012-2021 Konrad-Zuse-Zentrum                            */
6 /*                            fuer Informationstechnik Berlin                */
7 /*                                                                           */
8 /*  PolySCIP is distributed under the terms of the ZIB Academic License.     */
9 /*                                                                           */
10 /*  You should have received a copy of the ZIB Academic License              */
11 /*  along with PolySCIP; see the file LICENCE.                               */
12 /*                                                                           */
13 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
14 
15 /**
16  * @file cmd_line_args.cpp
17  * @brief Implements PolySCIP command line arguments via TCLAP
18  * @author Sebastian Schenker
19  *
20  */
21 
22 
23 #include "cmd_line_args.h"
24 
25 #include <string>
26 #include <vector>
27 
28 #include "PolySCIPConfig.h" // defines EXECUTABLE_NAME, POLYSCIP_VERSION_{MAJOR,MINOR}
29 #include "tclap/CmdLine.h"
30 
31 using std::string;
32 using TCLAP::CmdLine;
33 using TCLAP::SwitchArg;
34 using TCLAP::ValueArg;
35 using TCLAP::UnlabeledValueArg;
36 
37 namespace polyscip {
38 
39     /**
40      * Constructor
41      * @param argc Argument count
42      * @param argv Argument vector
43      */
CmdLineArgs(int argc,const char * const * argv)44     CmdLineArgs::CmdLineArgs(int argc, const char *const *argv)
45             : executable_name_(EXECUTABLE_NAME)
46     {
47         version_no_ = std::to_string(POLYSCIP_VERSION_MAJOR) + string(".") + std::to_string(POLYSCIP_VERSION_MINOR);
48         CmdLine cmd(executable_name_,' ', version_no_);
49         cmd.setExceptionHandling(false); // set internal exception handling
50         SwitchArg only_extremal_arg("x", "extremal", "compute only extremal supported non-dominated results", false);
51         cmd.add(only_extremal_arg);
52         SwitchArg be_verbose_arg("v", "verbose", "verbose PolySCIP cmd line output ", false);
53         cmd.add(be_verbose_arg);
54         SwitchArg write_results_arg("w", "writeResults", "write results to file; default path is ./", false);
55         cmd.add(write_results_arg);
56         SwitchArg output_sols_arg("s", "noSolutions", "switching output of solutions off", true);
57         cmd.add(output_sols_arg);
58         SwitchArg output_outcomes_arg("o", "noOutcomes", "switching output of outcomes off", true);
59         cmd.add(output_outcomes_arg);
60         std::vector<int> round_vals = {5,10,15};
61         TCLAP::ValuesConstraint<int> allowed_vals(round_vals);
62         ValueArg<int> round_weighted_obj_coeff_arg("r", "round",
63                                           "round weighted objective coefficient in fct 'setWeightedObjective' at r-th decimal position",
64                                           false, 0, &allowed_vals);
65         cmd.add(round_weighted_obj_coeff_arg);
66         ValueArg<TimeLimitType> time_limit_arg("t", "timeLimit",
67                                                "time limit in seconds for total SCIP computation time",
68                                                false, kTimeLimitInf, "seconds");
69         cmd.add(time_limit_arg);
70         ValueArg<double> delta_arg("d", "delta", "Delta used in computation of feasible boxes; default value: 0.01",
71                                      false, 0.01, "double");
72         cmd.add(delta_arg);
73         ValueArg<double> epsilon_arg("e", "epsilon", "epsilon used in computation of unsupported points; default value: 1e-3",
74                                      false, 1e-3, "double");
75         cmd.add(epsilon_arg);
76         ValueArg<string> write_sols_path_arg("W", "writeSolsPath",
77                                              "PATH for -w",
78                                              false, "./", "PATH");
79         cmd.add(write_sols_path_arg);
80         ValueArg<string> param_file_arg("p", "params", "parameter settings file for SCIP",
81                                         false, "", "paramFile.set");
82         cmd.add(param_file_arg);
83         UnlabeledValueArg<string> prob_file_arg("probFile", "problem file in MOP format",
84                                                 true, "", "problemFile.mop");
85         cmd.add(prob_file_arg);
86         cmd.parse(argc, argv);
87 
88         be_verbose_ = be_verbose_arg.getValue();
89         only_extremal_ = only_extremal_arg.getValue();
90         write_results_ = write_results_arg.getValue();
91         output_solutions_ = output_sols_arg.getValue();
92         output_outcomes_ = output_outcomes_arg.getValue();
93         round_weighted_obj_coeff_ = round_weighted_obj_coeff_arg.getValue();
94         time_limit_ = time_limit_arg.getValue();
95         delta_ = delta_arg.getValue();
96         epsilon_ = epsilon_arg.getValue();
97         write_results_path_ = write_sols_path_arg.getValue();
98         param_file_ = param_file_arg.getValue();
99         prob_file_ = prob_file_arg.getValue();
100     }
101 
102 }