MAiNGO Reader Writer Utility
MAiNGOReaderWriter.h
1 /**********************************************************************************
2  * Copyright (c) 2019 Process Systems Engineering (AVT.SVT), RWTH Aachen University
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License 2.0 which is available at
6  * http://www.eclipse.org/legal/epl-2.0.
7  *
8  * SPDX-License-Identifier: EPL-2.0
9  *
10  * @file MAiNGOReaderWriter.h
11  *
12  * @brief File containing declaration of class for reading a GAMS convert file
13  * and writing problem.h file out of it. It can also read in
14  * a MAiNGO bab.log.
15  *
16  **********************************************************************************/
17 
18 #pragma once
19 
20 #include "manualMAiNGOReaderWriter.h"
21 
22 #include <ctime>
23 #include <filesystem> // Only available in C++17 - needed for directing through folders
24 #include <fstream>
25 #include <iomanip>
26 #include <iostream>
27 #include <sstream>
28 #include <string>
29 #include <vector>
30 
31 namespace maingo {
32 
33 namespace readerWriter {
34 
39 enum VT {
40  VT_CONTINUOUS = 0,
41  VT_BINARY,
42  VT_INTEGER,
43  VT_FIXED
44 };
45 
50 enum CT {
51  CT_EQ = 0,
52  CT_GINEQ,
53  CT_LINEQ
54 };
55 
61  double lowerBound;
62  double upperBound;
64  std::string name;
65 };
66 
71 struct Constraint {
73  std::string lhs;
74  std::string rhs;
75 };
76 
77 
85  public:
90 
95 
101  void read_GAMS_convert_file(const std::string &gamsFileName = "gams.gms");
102 
108  void write_MAiNGO_problem_file(const std::string &problemFileName = "problem_gams");
109 
115  void write_ALE_problem_file(const std::string &problemFileName = "problem_gams");
116 
122  void print_problem_info_GAMS_file(std::ostream &outstream);
123 
130  void convert_GAMS_folder_to_MAiNGO_problem(const std::string &input, const std::string &output);
131 
138  void convert_GAMS_folder_to_ALE_problem(const std::string &input, const std::string &output);
139 
145  void print_problem_info_MAiNGO_log(std::ostream &outstream);
146 
152  void read_MAiNGO_log_file(const std::string &maingoFileName = "bab.log");
153 
157  unsigned int get_number_variables_GAMS_file();
158 
163 
167  unsigned int get_number_bin_variables_GAMS_file();
168 
172  unsigned int get_number_int_variables_GAMS_file();
173 
177  unsigned int get_number_constraints_GAMS_file();
178 
183 
188 
193 
198 
202  unsigned int get_obj_variable_number_GAMS_file();
203 
207  std::string get_obj_variable_name_GAMS_file();
208 
213 
217  unsigned int get_number_variables_MAiNGO_log();
218 
222  unsigned int get_number_equalities_MAiNGO_log();
223 
227  unsigned int get_number_inequalities_MAiNGO_log();
228 
232  unsigned int get_number_rel_only_eq_MAiNGO_log();
233 
238 
242  unsigned int get_number_ubd_solved_MAiNGO_log();
243 
247  unsigned int get_number_lbd_solved_MAiNGO_log();
248 
252  unsigned int get_number_iterations_MAiNGO_log();
253 
258 
263 
267  double get_final_lbd_MAiNGO_log();
268 
273 
278 
283 
288 
293 
298 
302  std::vector<std::pair<std::string, double>> get_solution_point();
303 
307  std::vector<std::pair<std::string, double>> get_additional_output();
308 
309  private:
313  void _read_problem_info();
314 
318  void _read_variable_bounds();
319 
323  void _read_initial_point();
324 
328  void _read_constraints();
329 
336  unsigned int _find_variable(const std::string &varName);
337 
344  void _set_variable_lower_bound(const std::string &varName, double lowerBound);
345 
352  void _set_variable_upper_bound(const std::string &varName, double upperBound);
353 
360  void _set_variable_initial_point(const std::string &varName, double value);
361 
367  void _rename_powers(std::vector<Constraint> &constraints);
368 
374  void _rename_double_asterisk(std::string &str);
375 
381  void _rename_logs(std::vector<Constraint> &constraints);
382 
389  void _add_division_log10(std::string &str, const std::size_t posLog);
390 
397  void _write_MAiNGO_model(std::ofstream &outputFile, const std::string &problemName);
398 
404  void _write_MAiNGO_variables(std::ofstream &outputFile);
405 
411  void _write_MAiNGO_initial_point(std::ofstream &outputFile);
412 
418  void _write_MAiNGO_constructor(std::ofstream &outputFile);
419 
427  std::string _insert_line_breaks_in_string(const std::string &str, const unsigned numberWhitespaces);
428 
434  void _write_MAiNGO_evaluate(std::ofstream &outputFile);
435 
441  void _write_ALE_variables(std::ofstream &outputFile);
442 
448  void _write_ALE_initial_point(std::ofstream &outputFile);
449 
455  void _write_ALE_functions(std::ofstream &outputFile);
456 
460  void _check_for_MAiNGO();
461 
465  void _remove_bab();
466 
470  void _check_feasibility();
471 
475  void _read_statistics();
476 
481  std::string _gamsFileName;
482  std::vector<std::string> _file;
484  unsigned int _nvar;
485  unsigned int _ncontVar;
486  unsigned int _nbinVar;
487  unsigned int _nintVar;
489  unsigned int _ncons;
490  unsigned int _neq;
491  unsigned int _nlineq;
492  unsigned int _ngineq;
494  unsigned int _nfixedVar;
495  unsigned int _objNr;
496  std::string _objName;
497  std::string _objFunction;
498  bool _objSingle;
499  bool _minimizing;
501  std::vector<OptimizationVariable> _contVariables;
502  std::vector<OptimizationVariable> _binVariables;
503  std::vector<OptimizationVariable> _intVariables;
504  std::vector<Constraint> _constraints;
505  std::vector<Constraint> _eqConstraints;
506  std::vector<Constraint> _gineqConstraints;
507  std::vector<Constraint> _lineqConstraints;
508  std::vector<double> _initialPointCont;
509  std::vector<unsigned int> _initialPointBin;
510  std::vector<int> _initialPointInt;
517  std::string _maingoFileName;
519  unsigned int _nvarM;
520  unsigned int _neqM;
521  unsigned int _nineqM;
522  unsigned int _neqRelaxationOnlyM;
523  unsigned int _nineqRelaxationOnlyM;
525  unsigned int _ubdProblemsSolvedM;
526  unsigned int _lbdProblemsSolvedM;
527  unsigned int _niterationsM;
528  unsigned int _nnodesInMemoryM;
529  unsigned int _bestSolFirstFoundM;
531  double _finalLBDM;
532  double _finalAbsGapM;
533  double _finalRelGapM;
534  double _objValM;
537  bool _feasibleM;
538  std::vector<std::pair<std::string, double>> _solutionPoint;
539  std::vector<std::pair<std::string, double>> _additionalOutput;
542  // Prevent use of default copy constructor and copy assignment operator by declaring them private:
545 };
546 
547 } // namespace readerWriter
548 
549 } // namespace maingo
CT constraintType
Definition: MAiNGOReaderWriter.h:72
bool _minimizing
Definition: MAiNGOReaderWriter.h:499
void _rename_powers(std::vector< Constraint > &constraints)
Function for renaming power and ** to pow.
Definition: MAiNGOReaderWriter.cpp:915
void _set_variable_upper_bound(const std::string &varName, double upperBound)
Function for setting the upper bound of a variable.
Definition: MAiNGOReaderWriter.cpp:867
unsigned int _neqRelaxationOnlyM
Definition: MAiNGOReaderWriter.h:522
unsigned int _nineqRelaxationOnlyM
Definition: MAiNGOReaderWriter.h:523
unsigned int _ncontVar
Definition: MAiNGOReaderWriter.h:485
unsigned int get_number_equalities_MAiNGO_log()
Function for getting the number of equalities read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:144
unsigned int _objNr
Definition: MAiNGOReaderWriter.h:495
unsigned int _ncons
Definition: MAiNGOReaderWriter.h:489
unsigned int get_number_bin_variables_GAMS_file()
Function for getting number of binary variables given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:45
double get_wall_time_needed_MAiNGO_log()
Function for getting the number of wall time needed read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:270
std::string get_obj_variable_name_GAMS_file()
Function for getting the name of the objective variable given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:117
std::vector< std::pair< std::string, double > > _additionalOutput
Definition: MAiNGOReaderWriter.h:539
unsigned int get_number_iterations_MAiNGO_log()
Function for getting the number of iterations read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:198
unsigned int get_number_variables_GAMS_file()
Function for getting total number of variables given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:27
void _write_MAiNGO_constructor(std::ofstream &outputFile)
Function for writing the constructor to problem.h.
Definition: MAiNGOReaderWriter.cpp:1408
VT variableType
Definition: MAiNGOReaderWriter.h:63
std::vector< OptimizationVariable > _binVariables
Definition: MAiNGOReaderWriter.h:502
unsigned int _bestSolFirstFoundM
Definition: MAiNGOReaderWriter.h:529
std::vector< Constraint > _constraints
Definition: MAiNGOReaderWriter.h:504
Auxiliary struct for representing an optimization variable. Mostly copied from MAiNGOutils....
Definition: MAiNGOReaderWriter.h:60
std::string _objName
Definition: MAiNGOReaderWriter.h:496
double _objValM
Definition: MAiNGOReaderWriter.h:534
double get_cpu_time_needed_MAiNGO_log()
Function for getting the number of CPU time needed read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:261
unsigned int _nlineq
Definition: MAiNGOReaderWriter.h:491
unsigned int get_number_rel_only_eq_MAiNGO_log()
Function for getting the number of relaxation only equalities read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:162
unsigned int _find_variable(const std::string &varName)
Function for obtaining the correct vector index of variable with name varName.
Definition: MAiNGOReaderWriter.cpp:803
void read_GAMS_convert_file(const std::string &gamsFileName="gams.gms")
Function for reading in a GAMS convert file.
Definition: MAiNGOReaderWriter.cpp:38
void _check_for_MAiNGO()
Function for checking whether the provided MAiNGO log is really a MAiNGO log. The check is not rigoro...
Definition: MAiNGOReaderWriter.cpp:1694
void print_problem_info_GAMS_file(std::ostream &outstream)
Function for printing problem info given in a previously read GAMS file.
Definition: MAiNGOReaderWriter.cpp:1215
void _read_statistics()
Function for reading the actual statistics from a MAiNGO log file.
Definition: MAiNGOReaderWriter.cpp:1762
unsigned int _ngineq
Definition: MAiNGOReaderWriter.h:492
unsigned int _niterationsM
Definition: MAiNGOReaderWriter.h:527
bool _feasibleM
Definition: MAiNGOReaderWriter.h:537
std::string _maingoFileName
Definition: MAiNGOReaderWriter.h:517
std::vector< Constraint > _eqConstraints
Definition: MAiNGOReaderWriter.h:505
unsigned int _nnodesInMemoryM
Definition: MAiNGOReaderWriter.h:528
std::vector< std::pair< std::string, double > > get_solution_point()
Function for getting the solution point read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:288
std::vector< Constraint > _gineqConstraints
Definition: MAiNGOReaderWriter.h:506
unsigned int _nbinVar
Definition: MAiNGOReaderWriter.h:486
std::vector< OptimizationVariable > _contVariables
Definition: MAiNGOReaderWriter.h:501
MAiNGOReaderWriter & operator=(const MAiNGOReaderWriter &)
unsigned int _ubdProblemsSolvedM
Definition: MAiNGOReaderWriter.h:525
std::vector< Constraint > _lineqConstraints
Definition: MAiNGOReaderWriter.h:507
void print_problem_info_MAiNGO_log(std::ostream &outstream)
Function for printing problem info given in a previously read GAMS file.
Definition: MAiNGOReaderWriter.cpp:1929
unsigned int get_number_int_variables_GAMS_file()
Function for getting number of integer variables given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:54
Class for reading in GAMS convert files and writing problem.h files out of it. Moreover,...
Definition: MAiNGOReaderWriter.h:84
std::string name
Definition: MAiNGOReaderWriter.h:64
std::string rhs
Definition: MAiNGOReaderWriter.h:74
std::vector< double > _initialPointCont
Definition: MAiNGOReaderWriter.h:508
double get_final_rel_gap_MAiNGO_log()
Function for getting the number of final rel gap read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:243
unsigned int get_number_nodes_in_memory_MAiNGO_log()
Function for getting the number of nodes in memory read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:207
unsigned int _nintVar
Definition: MAiNGOReaderWriter.h:487
unsigned int get_number_constraints_GAMS_file()
Function for getting total number of constraints given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:63
unsigned int get_number_gineq_constraints_GAMS_file()
Function for getting number of >= inequality constraints given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:81
void write_ALE_problem_file(const std::string &problemFileName="problem_gams")
Function for writing an ALE problem.txt file out of an already read in gams convert file.
Definition: MAiNGOReaderWriter.cpp:1534
void _remove_bab()
Function for removing the B&B iterations from the _file vector holding the MAiNGO log file lines.
Definition: MAiNGOReaderWriter.cpp:1719
double lowerBound
Definition: MAiNGOReaderWriter.h:61
void _write_ALE_initial_point(std::ofstream &outputFile)
Function for writing ALE initial point to problem.txt.
Definition: MAiNGOReaderWriter.cpp:1590
std::vector< int > _initialPointInt
Definition: MAiNGOReaderWriter.h:510
double _finalLBDM
Definition: MAiNGOReaderWriter.h:531
bool get_feasibility_MAiNGO_log()
Function for getting if the problem is feasible read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:279
void _read_initial_point()
Function for reading and saving the initial point.
Definition: MAiNGOReaderWriter.cpp:519
double upperBound
Definition: MAiNGOReaderWriter.h:62
double _cpuTimeNeededM
Definition: MAiNGOReaderWriter.h:535
unsigned int _nvar
Definition: MAiNGOReaderWriter.h:484
unsigned int get_number_eq_constraints_GAMS_file()
Function for getting number of equality constraints given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:72
void _check_feasibility()
Function for checking whether the problem provided in MAiNGO log is feasible.
Definition: MAiNGOReaderWriter.cpp:1744
void _write_MAiNGO_model(std::ofstream &outputFile, const std::string &problemName)
Function for writing the MAiNGO model class to problem.h.
Definition: MAiNGOReaderWriter.cpp:1252
std::string _objFunction
Definition: MAiNGOReaderWriter.h:497
double _wallTimeNeededM
Definition: MAiNGOReaderWriter.h:536
unsigned int get_number_fixed_variables_GAMS_file()
Function for getting number of fixed variables given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:99
void _rename_logs(std::vector< Constraint > &constraints)
Function for renaming log10 to log/log(10)
Definition: MAiNGOReaderWriter.cpp:1057
double _finalRelGapM
Definition: MAiNGOReaderWriter.h:533
unsigned int get_number_rel_only_ineq_MAiNGO_log()
Function for getting the number of relaxation only inequalities read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:171
double get_final_abs_gap_MAiNGO_log()
Function for getting the number of final abs gap read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:234
unsigned int _nfixedVar
Definition: MAiNGOReaderWriter.h:494
std::vector< OptimizationVariable > _intVariables
Definition: MAiNGOReaderWriter.h:503
Auxiliary struct for representing a constraint.
Definition: MAiNGOReaderWriter.h:71
void _set_variable_initial_point(const std::string &varName, double value)
Function for setting the initial point of a variable.
Definition: MAiNGOReaderWriter.cpp:891
unsigned int _nineqM
Definition: MAiNGOReaderWriter.h:521
bool get_minimizing_GAMS_file()
Function for getting _minimizing given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:126
std::string lhs
Definition: MAiNGOReaderWriter.h:73
void _add_division_log10(std::string &str, const std::size_t posLog)
Function for converting log10 GAMS function to log(x)/log(10)
Definition: MAiNGOReaderWriter.cpp:1116
void _set_variable_lower_bound(const std::string &varName, double lowerBound)
Function for setting the lower bound of a variable.
Definition: MAiNGOReaderWriter.cpp:843
void _write_MAiNGO_variables(std::ofstream &outputFile)
Function for writing MAiNGO variables to problem.h.
Definition: MAiNGOReaderWriter.cpp:1326
std::vector< std::string > _file
Definition: MAiNGOReaderWriter.h:482
unsigned int get_number_cont_variables_GAMS_file()
Function for getting number of continuous variables given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:36
void _read_variable_bounds()
Function for reading and saving variable bounds from a GAMS convert file.
Definition: MAiNGOReaderWriter.cpp:368
unsigned int get_number_lbd_solved_MAiNGO_log()
Function for getting the number of solved lbd problems read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:189
void convert_GAMS_folder_to_ALE_problem(const std::string &input, const std::string &output)
Function for reading in all GAMS files in folder input and writing ALE problem files to folder output...
Definition: MAiNGOReaderWriter.cpp:1188
std::string _insert_line_breaks_in_string(const std::string &str, const unsigned numberWhitespaces)
Function for inserting line breaks into constraint strings to make the lines in problem....
Definition: MAiNGOReaderWriter.cpp:1426
void _write_ALE_functions(std::ofstream &outputFile)
Function for writing all constraints and the objective to ALE problem.txt.
Definition: MAiNGOReaderWriter.cpp:1617
unsigned int _nvarM
Definition: MAiNGOReaderWriter.h:519
void _rename_double_asterisk(std::string &str)
Function for renaming ** to pow.
Definition: MAiNGOReaderWriter.cpp:964
void write_MAiNGO_problem_file(const std::string &problemFileName="problem_gams")
Function for writing a MAiNGO problem.h file out of an already read in gams convert file.
Definition: MAiNGOReaderWriter.cpp:1137
MAiNGOReaderWriter()
Default constructor.
Definition: MAiNGOReaderWriter.cpp:26
std::vector< std::pair< std::string, double > > get_additional_output()
Function for getting additional output read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:297
unsigned int _lbdProblemsSolvedM
Definition: MAiNGOReaderWriter.h:526
void _read_problem_info()
Function for reading and saving general problem info from a GAMS convert file.
Definition: MAiNGOReaderWriter.cpp:101
void _write_MAiNGO_initial_point(std::ofstream &outputFile)
Function for writing the initial point to problem.h.
Definition: MAiNGOReaderWriter.cpp:1370
unsigned int get_number_inequalities_MAiNGO_log()
Function for getting the number of inequalities read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:153
std::vector< std::pair< std::string, double > > _solutionPoint
Definition: MAiNGOReaderWriter.h:538
double get_final_obj_val_MAiNGO_log()
Function for getting the number of final obj value read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:252
void read_MAiNGO_log_file(const std::string &maingoFileName="bab.log")
Function for reading in a MAiNGO log file.
Definition: MAiNGOReaderWriter.cpp:1659
unsigned int get_number_lineq_constraints_GAMS_file()
Function for getting number of <= inequality constraints given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:90
std::vector< unsigned int > _initialPointBin
Definition: MAiNGOReaderWriter.h:509
void convert_GAMS_folder_to_MAiNGO_problem(const std::string &input, const std::string &output)
Function for reading in all GAMS files in folder input and writing MAiNGO problem files to folder out...
Definition: MAiNGOReaderWriter.cpp:1161
unsigned int _neq
Definition: MAiNGOReaderWriter.h:490
double _finalAbsGapM
Definition: MAiNGOReaderWriter.h:532
void _write_ALE_variables(std::ofstream &outputFile)
Function for writing ALE variables to problem.txt.
Definition: MAiNGOReaderWriter.cpp:1556
void _read_constraints()
Function for reading and saving constraints. It also sets the correct objective function.
Definition: MAiNGOReaderWriter.cpp:559
void _write_MAiNGO_evaluate(std::ofstream &outputFile)
Function for writing the evaluation to problem.h.
Definition: MAiNGOReaderWriter.cpp:1449
unsigned int get_obj_variable_number_GAMS_file()
Function for getting the number of the objective variable given in a previously read GAMS file.
Definition: MAiNGOReaderWriterGetter.cpp:108
double get_final_lbd_MAiNGO_log()
Function for getting the number of final lbd read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:225
~MAiNGOReaderWriter()
Destructor.
Definition: MAiNGOReaderWriter.h:94
unsigned int get_number_best_first_found_MAiNGO_log()
Function for getting the number of node where best solution was first found read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:216
unsigned int get_number_variables_MAiNGO_log()
Function for getting the number of variables read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:135
bool _objSingle
Definition: MAiNGOReaderWriter.h:498
std::string _gamsFileName
Definition: MAiNGOReaderWriter.h:481
unsigned int get_number_ubd_solved_MAiNGO_log()
Function for getting the number of solved ubd problems read in from MAiNGO log.
Definition: MAiNGOReaderWriterGetter.cpp:180
unsigned int _neqM
Definition: MAiNGOReaderWriter.h:520