@@ -16,6 +16,7 @@ limitations under the License.
1616
1717#include "cupdlpx.h"
1818#include "mps_parser.h"
19+ #include "presolve.h"
1920#include "solver.h"
2021#include "utils.h"
2122#include <getopt.h>
@@ -61,7 +62,7 @@ void save_solution(const double *data, int size, const char *output_dir,
6162 const char * instance_name , const char * suffix )
6263{
6364 char * file_path = get_output_path (output_dir , instance_name , suffix );
64- if (file_path == NULL )
65+ if (file_path == NULL || data == NULL )
6566 {
6667 return ;
6768 }
@@ -113,7 +114,19 @@ void save_solver_summary(const cupdlpx_result_t *result, const char *output_dir,
113114 fprintf (outfile , "Absolute Objective Gap: %e\n" , result -> objective_gap );
114115 fprintf (outfile , "Relative Objective Gap: %e\n" ,
115116 result -> relative_objective_gap );
116- if (result -> feasibility_polishing_time > 0.0 ){
117+ fprintf (outfile , "Rows: %d\n" , result -> num_constraints );
118+ fprintf (outfile , "Columns: %d\n" , result -> num_variables );
119+ fprintf (outfile , "Nonzeros: %d\n" , result -> num_nonzeros );
120+ if (result -> presolve_time > 0.0 )
121+ {
122+ fprintf (outfile , "Presolve Status: %s\n" , get_presolve_status_str (result -> presolve_status ));
123+ fprintf (outfile , "Presolve Time (sec): %e\n" , result -> presolve_time );
124+ fprintf (outfile , "Reduced Rows: %d\n" , result -> num_reduced_constraints );
125+ fprintf (outfile , "Reduced Columns: %d\n" , result -> num_reduced_variables );
126+ fprintf (outfile , "Reduced Nonzeros: %d\n" , result -> num_reduced_nonzeros );
127+ }
128+ if (result -> feasibility_polishing_time > 0.0 )
129+ {
117130 fprintf (outfile , "Feasibility Polishing Time (sec): %e\n" , result -> feasibility_polishing_time );
118131 fprintf (outfile , "Feasibility Polishing Iteration Count: %d\n" , result -> feasibility_iteration );
119132 }
@@ -171,6 +184,8 @@ void print_usage(const char *prog_name)
171184 "Enable feasibility use feasibility polishing (default: false).\n" );
172185 fprintf (stderr , " --eps_feas_polish <tolerance> Relative feasibility "
173186 "polish tolerance (default: 1e-6).\n" );
187+ fprintf (stderr , " --no_presolve "
188+ "Disable presolve (default: enabled).\n" );
174189}
175190
176191int main (int argc , char * argv [])
@@ -195,10 +210,11 @@ int main(int argc, char *argv[])
195210 {"sv_max_iter" , required_argument , 0 , 1011 },
196211 {"sv_tol" , required_argument , 0 , 1012 },
197212 {"eval_freq" , required_argument , 0 , 1013 },
213+ {"no_presolve" , no_argument , 0 , 1014 },
198214 {0 , 0 , 0 , 0 }};
199215
200216 int opt ;
201- while ((opt = getopt_long (argc , argv , "hvf " , long_options , NULL )) != -1 )
217+ while ((opt = getopt_long (argc , argv , "hvfp " , long_options , NULL )) != -1 )
202218 {
203219 switch (opt )
204220 {
@@ -226,7 +242,7 @@ int main(int argc, char *argv[])
226242 case 1006 : // --eps_feas_polish_relative
227243 params .termination_criteria .eps_feas_polish_relative = atof (optarg );
228244 break ;
229- case 'f' : // --feasibility_polishing
245+ case 'f' : // --feasibility_polishing
230246 params .feasibility_polishing = true;
231247 break ;
232248 case 1007 : // --l_inf_ruiz_iter
@@ -250,6 +266,9 @@ int main(int argc, char *argv[])
250266 case 1013 : // --eval_freq
251267 params .termination_evaluation_frequency = atoi (optarg );
252268 break ;
269+ case 1014 : // --no_presolve
270+ params .presolve = false;
271+ break ;
253272 case '?' : // Unknown option
254273 return 1 ;
255274 }
0 commit comments