1 /*===========================================================================*
2  * This file is part of the Discrete Conic Optimization (DisCO) Solver.      *
3  *                                                                           *
4  * DisCO is distributed under the Eclipse Public License as part of the      *
5  * COIN-OR repository (http://www.coin-or.org).                              *
6  *                                                                           *
7  * Authors:                                                                  *
8  *          Aykut Bulut, Lehigh University                                   *
9  *          Yan Xu, Lehigh University                                        *
10  *          Ted Ralphs, Lehigh University                                    *
11  *                                                                           *
12  * Copyright (C) 2001-2018, Lehigh University, Aykut Bulut, Yan Xu, and      *
13  *                          Ted Ralphs.                                      *
14  * All Rights Reserved.                                                      *
15  *===========================================================================*/
16 
17 
18 #ifndef DcoMessage_hpp_
19 #define DcoMessage_hpp_
20 
21 #include <Dco.hpp>
22 
23 
24 #if defined(_MSC_VER)
25 // Turn off compiler warning about long names
26 #  pragma warning(disable:4786)
27 #endif
28 
29 /** This deals with Dco messages. */
30 #include "CoinMessageHandler.hpp"
31 
32 
33 //todo(aykut) order these messages properly before publishing in github.
34 enum DISCO_Message {
35     DISCO_CUTOFF_INC,
36     DISCO_CUT_STATS_FINAL,
37     DISCO_CUT_STATS_NODE,
38     DISCO_CUT_GENERATED,
39     DISCO_GAP_NO,
40     DISCO_GAP_YES,
41     DISCO_ROOT_PROCESS,
42     DISCO_ROOT_TIME,
43     // solution process information
44     DISCO_NODE_LOG_HEADER,
45     DISCO_NODE_LOG,
46     DISCO_NODE_LOG_NO_SOL,
47     // reading mps files
48     DISCO_READ_NOINTS,
49     DISCO_READ_NOCONES,
50     DISCO_READ_MPSERROR,
51     DISCO_READ_MPSCBFFILEONLY,
52     DISCO_READ_CONEERROR,
53     DISCO_READ_ROTATEDCONESIZE,
54     DISCO_READ_CONESTATS1,
55     DISCO_READ_CONESTATS2,
56     DISCO_PROBLEM_INFO,
57     // tree node
58     DISCO_NODE_BRANCHONINT,
59     DISCO_NODE_UNEXPECTEDSTATUS,
60     DISCO_NODE_FATHOM_PARENTQ,
61     DISCO_NODE_FATHOM,
62     DISCO_NODE_BCP_DECISION,
63     DISCO_NODE_BRANCH,
64     DISCO_NODE_ENCODED,
65     DISCO_NODE_DECODED,
66     // constraint generation
67     DISCO_INVALID_CUT_FREQUENCY,
68     DISCO_INEFFECTIVE_CUT,
69     DISCO_CUTS_ADDED,
70     // relaxation solver messages
71     DISCO_SOLVER_UNKNOWN_STATUS,
72     DISCO_SOLVER_FAILED,
73     DISCO_SOLVER_STATUS,
74     DISCO_SOLVER_INFEASIBLE,
75     DISCO_FAILED_WARM_START,
76     DISCO_SOLVER_ITERATIONS,
77     // heuristics
78     DISCO_HEUR_BEFORE_ROOT,
79     DISCO_HEUR_STATS_FINAL,
80     DISCO_HEUR_STATS_NODE,
81     DISCO_INVALID_HEUR_FREQUENCY,
82     DISCO_HEUR_SOL_FOUND,
83     DISCO_HEUR_NOSOL_FOUND,
84     // branch strategies
85     DISCO_PSEUDO_REPORT,
86     DISCO_PSEUDO_DUP,
87     DISCO_PSEUDO_UUP,
88     DISCO_STRONG_REPORT,
89     // grumpy messages
90     DISCO_GRUMPY_MESSAGE_LONG,
91     DISCO_GRUMPY_MESSAGE_MED,
92     DISCO_GRUMPY_MESSAGE_SHORT,
93     // Parallelization related messages
94     DISCO_UNEXPECTED_ENCODE_STATUS,
95     DISCO_UNEXPECTED_DECODE_STATUS,
96     // more general messages
97     DISCO_INFEAS_REPORT,
98     DISCO_SOL_INT_FEAS_REPORT,
99     DISCO_SOL_CONE_FEAS_REPORT,
100     DISCO_SOL_FOUND,
101     // welcome message
102     DISCO_WELCOME,
103     // out of memory
104     DISCO_OUT_OF_MEMORY,
105     DISCO_NOT_IMPLEMENTED,
106     DISCO_UNKNOWN_CONETYPE,
107     DISCO_UNKNOWN_BRANCHSTRATEGY,
108     DISCO_UNKNOWN_CUTSTRATEGY,
109     DISCO_SHOULD_NOT_HAPPEN,
110     ///
111     DISCO_DUMMY_END
112 };
113 
114 //todo(aykut) for now bit masking for debug level after 128
115 // does not work sice the bit masking is done with a char, 8 bits,
116 // having masking done with an int would make things wonderfull since
117 // DisCO has many levels of debug messages. Contact Coinutils guys
118 // to see how feasible is this.
119 enum DISCO_Debug_Level {
120   DISCO_DLOG_BRANCH = 8,
121   DISCO_DLOG_CUT = 16,
122   DISCO_DLOG_PROCESS = 32,
123   DISCO_DLOG_PRESOLVE = 64,
124   DISCO_DLOG_MPI = 32,
125   DISCO_DLOG_GRUMPY = 32, // 256
126   DISCO_DLOG_HEURISTIC = 32 // 512
127 
128 };
129 
130 enum DISCO_Grumpy_Msg_Type {
131   DISCO_GRUMPY_BRANCHED = 0,
132   DISCO_GRUMPY_CANDIDATE,
133   DISCO_GRUMPY_HEURISTIC,
134   DISCO_GRUMPY_INTEGER,
135   DISCO_GRUMPY_FATHOMED,
136   DISCO_GRUMPY_PREGNANT,
137   DISCO_GRUMPY_INFEASIBLE
138 };
139 
140 
141 //#############################################################################
142 
143 class DcoMessage : public CoinMessages {
144 public:
145     /**@name Constructors etc */
146     //@{
147     /** Constructor */
148     DcoMessage(Language language=us_en);
149     //@}
150 };
151 
152 //#############################################################################
153 #endif
154