1    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2    	/*                                                                           */
3    	/*                  This file is part of the program and library             */
4    	/*         SCIP --- Solving Constraint Integer Programs                      */
5    	/*                                                                           */
6    	/*  Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB)                      */
7    	/*                                                                           */
8    	/*  Licensed under the Apache License, Version 2.0 (the "License");          */
9    	/*  you may not use this file except in compliance with the License.         */
10   	/*  You may obtain a copy of the License at                                  */
11   	/*                                                                           */
12   	/*      http://www.apache.org/licenses/LICENSE-2.0                           */
13   	/*                                                                           */
14   	/*  Unless required by applicable law or agreed to in writing, software      */
15   	/*  distributed under the License is distributed on an "AS IS" BASIS,        */
16   	/*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17   	/*  See the License for the specific language governing permissions and      */
18   	/*  limitations under the License.                                           */
19   	/*                                                                           */
20   	/*  You should have received a copy of the Apache-2.0 license                */
21   	/*  along with SCIP; see the file LICENSE. If not visit scipopt.org.         */
22   	/*                                                                           */
23   	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24   	
25   	/**@file   table_default.c
26   	 * @ingroup DEFPLUGINS_TABLE
27   	 * @brief  default statistics tables
28   	 * @author Tristan Gally
29   	 */
30   	
31   	/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32   	
33   	#include "scip/pub_message.h"
34   	#include "scip/pub_table.h"
35   	#include "scip/scip_solvingstats.h"
36   	#include "scip/scip_table.h"
37   	#include "scip/table_default.h"
38   	
39   	
40   	#define TABLE_NAME_STATUS                "status"
41   	#define TABLE_DESC_STATUS                "status statistics table"
42   	#define TABLE_POSITION_STATUS            0                      /**< the position of the statistics table */
43   	#define TABLE_EARLIEST_STAGE_STATUS      SCIP_STAGE_INIT        /**< output of the statistics table is only printed from this stage onwards */
44   	
45   	#define TABLE_NAME_TIMING                "timing"
46   	#define TABLE_DESC_TIMING                "timing statistics table"
47   	#define TABLE_POSITION_TIMING            1000                   /**< the position of the statistics table */
48   	#define TABLE_EARLIEST_STAGE_TIMING      SCIP_STAGE_PROBLEM     /**< output of the statistics table is only printed from this stage onwards */
49   	
50   	#define TABLE_NAME_ORIGPROB              "origprob"
51   	#define TABLE_DESC_ORIGPROB              "original problem statistics table"
52   	#define TABLE_POSITION_ORIGPROB          2000                   /**< the position of the statistics table */
53   	#define TABLE_EARLIEST_STAGE_ORIGPROB    SCIP_STAGE_PROBLEM     /**< output of the statistics table is only printed from this stage onwards */
54   	
55   	#define TABLE_NAME_TRANSPROB             "presolvedprob"
56   	#define TABLE_DESC_TRANSPROB             "presolved problem statistics table"
57   	#define TABLE_POSITION_TRANSPROB         3000                   /**< the position of the statistics table */
58   	#define TABLE_EARLIEST_STAGE_TRANSPROB   SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
59   	
60   	#define TABLE_NAME_PRESOL                "presolver"
61   	#define TABLE_DESC_PRESOL                "presolver statistics table"
62   	#define TABLE_POSITION_PRESOL            4000                   /**< the position of the statistics table */
63   	#define TABLE_EARLIEST_STAGE_PRESOL      SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
64   	
65   	#define TABLE_NAME_CONS                  "constraint"
66   	#define TABLE_DESC_CONS                  "constraint statistics table"
67   	#define TABLE_POSITION_CONS              5000                   /**< the position of the statistics table */
68   	#define TABLE_EARLIEST_STAGE_CONS        SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
69   	
70   	#define TABLE_NAME_CONSTIMING            "constiming"
71   	#define TABLE_DESC_CONSTIMING            "constraint timing statistics table"
72   	#define TABLE_POSITION_CONSTIMING        6000                   /**< the position of the statistics table */
73   	#define TABLE_EARLIEST_STAGE_CONSTIMING  SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
74   	
75   	#define TABLE_NAME_PROP                  "propagator"
76   	#define TABLE_DESC_PROP                  "propagator statistics table"
77   	#define TABLE_POSITION_PROP              7000                   /**< the position of the statistics table */
78   	#define TABLE_EARLIEST_STAGE_PROP        SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
79   	
80   	#define TABLE_NAME_CONFLICT              "conflict"
81   	#define TABLE_DESC_CONFLICT              "conflict statistics table"
82   	#define TABLE_POSITION_CONFLICT          8000                   /**< the position of the statistics table */
83   	#define TABLE_EARLIEST_STAGE_CONFLICT    SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
84   	
85   	#define TABLE_NAME_SEPA                  "separator"
86   	#define TABLE_DESC_SEPA                  "separator statistics table"
87   	#define TABLE_POSITION_SEPA              9000                   /**< the position of the statistics table */
88   	#define TABLE_EARLIEST_STAGE_SEPA        SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
89   	
90   	#define TABLE_NAME_CUTSEL                "cutsel"
91   	#define TABLE_DESC_CUTSEL                "cutsel statistics table"
92   	#define TABLE_POSITION_CUTSEL            9500                  /**< the position of the statistics table */
93   	#define TABLE_EARLIEST_STAGE_CUTSEL      SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
94   	
95   	#define TABLE_NAME_PRICER                "pricer"
96   	#define TABLE_DESC_PRICER                "pricer statistics table"
97   	#define TABLE_POSITION_PRICER            10000                  /**< the position of the statistics table */
98   	#define TABLE_EARLIEST_STAGE_PRICER      SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
99   	
100  	#define TABLE_NAME_BRANCH                "branchrules"
101  	#define TABLE_DESC_BRANCH                "branching rules statistics table"
102  	#define TABLE_POSITION_BRANCH            11000                  /**< the position of the statistics table */
103  	#define TABLE_EARLIEST_STAGE_BRANCH      SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
104  	
105  	#define TABLE_NAME_HEUR                  "heuristics"
106  	#define TABLE_DESC_HEUR                  "heuristics statistics table"
107  	#define TABLE_POSITION_HEUR              12000                  /**< the position of the statistics table */
108  	#define TABLE_EARLIEST_STAGE_HEUR        SCIP_STAGE_PRESOLVING  /**< output of the statistics table is only printed from this stage onwards */
109  	
110  	#define TABLE_NAME_COMPRESSION           "compression"
111  	#define TABLE_DESC_COMPRESSION           "compression statistics table"
112  	#define TABLE_POSITION_COMPRESSION       13000                  /**< the position of the statistics table */
113  	#define TABLE_EARLIEST_STAGE_COMPRESSION SCIP_STAGE_PRESOLVING  /**< output of the statistics table is only printed from this stage onwards */
114  	
115  	#define TABLE_NAME_BENDERS               "benders"
116  	#define TABLE_DESC_BENDERS               "benders' decomposition statistics table"
117  	#define TABLE_POSITION_BENDERS           14000                  /**< the position of the statistics table */
118  	#define TABLE_EARLIEST_STAGE_BENDERS     SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
119  	
120  	#define TABLE_NAME_EXPRHDLRS             "exprhdlr"
121  	#define TABLE_DESC_EXPRHDLRS             "expression handlers statistics table"
122  	#define TABLE_POSITION_EXPRHDLRS         14500                  /**< the position of the statistics table */
123  	#define TABLE_EARLIEST_STAGE_EXPRHDLRS   SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
124  	
125  	#define TABLE_NAME_LP                    "lp"
126  	#define TABLE_DESC_LP                    "lp statistics table"
127  	#define TABLE_POSITION_LP                15000                  /**< the position of the statistics table */
128  	#define TABLE_EARLIEST_STAGE_LP          SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
129  	
130  	#define TABLE_NAME_NLP                   "nlp"
131  	#define TABLE_DESC_NLP                   "nlp statistics table"
132  	#define TABLE_POSITION_NLP               16000                  /**< the position of the statistics table */
133  	#define TABLE_EARLIEST_STAGE_NLP         SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
134  	
135  	#define TABLE_NAME_NLPIS                 "nlpi"
136  	#define TABLE_DESC_NLPIS                 "NLP solver interfaces statistics table"
137  	#define TABLE_POSITION_NLPIS             16500                  /**< the position of the statistics table */
138  	#define TABLE_EARLIEST_STAGE_NLPIS       SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
139  	
140  	#define TABLE_NAME_RELAX                 "relaxator"
141  	#define TABLE_DESC_RELAX                 "relaxator statistics table"
142  	#define TABLE_POSITION_RELAX             17000                  /**< the position of the statistics table */
143  	#define TABLE_EARLIEST_STAGE_RELAX       SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
144  	
145  	#define TABLE_NAME_TREE                  "tree"
146  	#define TABLE_DESC_TREE                  "tree statistics table"
147  	#define TABLE_POSITION_TREE              18000                  /**< the position of the statistics table */
148  	#define TABLE_EARLIEST_STAGE_TREE        SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
149  	
150  	#define TABLE_NAME_ROOT                  "root"
151  	#define TABLE_DESC_ROOT                  "root statistics table"
152  	#define TABLE_POSITION_ROOT              19000                  /**< the position of the statistics table */
153  	#define TABLE_EARLIEST_STAGE_ROOT        SCIP_STAGE_SOLVING     /**< output of the statistics table is only printed from this stage onwards */
154  	
155  	#define TABLE_NAME_SOL                   "solution"
156  	#define TABLE_DESC_SOL                   "solution statistics table"
157  	#define TABLE_POSITION_SOL               20000                  /**< the position of the statistics table */
158  	#define TABLE_EARLIEST_STAGE_SOL         SCIP_STAGE_PRESOLVING  /**< output of the statistics table is only printed from this stage onwards */
159  	
160  	#define TABLE_NAME_CONC                  "concurrentsolver"
161  	#define TABLE_DESC_CONC                  "concurrent solver statistics table"
162  	#define TABLE_POSITION_CONC              21000                  /**< the position of the statistics table */
163  	#define TABLE_EARLIEST_STAGE_CONC        SCIP_STAGE_TRANSFORMED /**< output of the statistics table is only printed from this stage onwards */
164  	
165  	/*
166  	 * Callback methods of statistics table
167  	 */
168  	
169  	/** copy method for statistics table plugins (called when SCIP copies plugins) */
170  	static
171  	SCIP_DECL_TABLECOPY(tableCopyDefault)
172  	{  /*lint --e{715}*/
173  	   assert(scip != NULL);
174  	   assert(table != NULL);
175  	
176  	   /* call inclusion method of statistics tables (unless it has already been included by the copy call of the first default table) */
177  	   if( SCIPfindTable(scip, SCIPtableGetName(table)) == NULL )
178  	   {
179  	      SCIP_CALL( SCIPincludeTableDefault(scip) );
180  	   }
181  	
182  	   return SCIP_OKAY;
183  	}
184  	
185  	/** output method of statistics table to output file stream 'file' */
186  	static
187  	SCIP_DECL_TABLEOUTPUT(tableOutputStatus)
188  	{  /*lint --e{715}*/
189  	   assert(scip != NULL);
190  	   assert(table != NULL);
191  	
192  	   SCIPprintStatusStatistics(scip, file);
193  	
194  	   return SCIP_OKAY;
195  	}
196  	
197  	/** output method of statistics table to output file stream 'file' */
198  	static
199  	SCIP_DECL_TABLEOUTPUT(tableOutputTiming)
200  	{  /*lint --e{715}*/
201  	   assert(scip != NULL);
202  	   assert(table != NULL);
203  	
204  	   SCIPprintTimingStatistics(scip, file);
205  	
206  	   return SCIP_OKAY;
207  	}
208  	
209  	/** output method of statistics table to output file stream 'file' */
210  	static
211  	SCIP_DECL_TABLEOUTPUT(tableOutputOrigProb)
212  	{  /*lint --e{715}*/
213  	   assert(scip != NULL);
214  	   assert(table != NULL);
215  	
216  	   SCIPprintOrigProblemStatistics(scip, file);
217  	
218  	   return SCIP_OKAY;
219  	}
220  	
221  	/** output method of statistics table to output file stream 'file' */
222  	static
223  	SCIP_DECL_TABLEOUTPUT(tableOutputTransProb)
224  	{  /*lint --e{715}*/
225  	   assert(scip != NULL);
226  	   assert(table != NULL);
227  	
228  	   SCIPprintTransProblemStatistics(scip, file);
229  	
230  	   return SCIP_OKAY;
231  	}
232  	
233  	/** output method of statistics table to output file stream 'file' */
234  	static
235  	SCIP_DECL_TABLEOUTPUT(tableOutputPresol)
236  	{  /*lint --e{715}*/
237  	   assert(scip != NULL);
238  	   assert(table != NULL);
239  	
240  	   SCIPprintPresolverStatistics(scip, file);
241  	
242  	   return SCIP_OKAY;
243  	}
244  	
245  	/** output method of statistics table to output file stream 'file' */
246  	static
247  	SCIP_DECL_TABLEOUTPUT(tableOutputCons)
248  	{  /*lint --e{715}*/
249  	   assert(scip != NULL);
250  	   assert(table != NULL);
251  	
252  	   SCIPprintConstraintStatistics(scip, file);
253  	
254  	   return SCIP_OKAY;
255  	}
256  	
257  	/** output method of statistics table to output file stream 'file' */
258  	static
259  	SCIP_DECL_TABLEOUTPUT(tableOutputConstiming)
260  	{  /*lint --e{715}*/
261  	   assert(scip != NULL);
262  	   assert(table != NULL);
263  	
264  	   SCIPprintConstraintTimingStatistics(scip, file);
265  	
266  	   return SCIP_OKAY;
267  	}
268  	
269  	/** output method of statistics table to output file stream 'file' */
270  	static
271  	SCIP_DECL_TABLEOUTPUT(tableOutputProp)
272  	{  /*lint --e{715}*/
273  	   assert(scip != NULL);
274  	   assert(table != NULL);
275  	
276  	   SCIPprintPropagatorStatistics(scip, file);
277  	
278  	   return SCIP_OKAY;
279  	}
280  	
281  	/** output method of statistics table to output file stream 'file' */
282  	static
283  	SCIP_DECL_TABLEOUTPUT(tableOutputConflict)
284  	{  /*lint --e{715}*/
285  	   assert(scip != NULL);
286  	   assert(table != NULL);
287  	
288  	   SCIPprintConflictStatistics(scip, file);
289  	
290  	   return SCIP_OKAY;
291  	}
292  	
293  	/** output method of statistics table to output file stream 'file' */
294  	static
295  	SCIP_DECL_TABLEOUTPUT(tableOutputSepa)
296  	{  /*lint --e{715}*/
297  	   assert(scip != NULL);
298  	   assert(table != NULL);
299  	
300  	   SCIPprintSeparatorStatistics(scip, file);
301  	
302  	   return SCIP_OKAY;
303  	}
304  	
305  	/** output method of statistics table to output file stream 'file' */
306  	static
307  	SCIP_DECL_TABLEOUTPUT(tableOutputCutsel)
308  	{  /*lint --e{715}*/
309  	   assert(scip != NULL);
310  	   assert(table != NULL);
311  	
312  	   SCIPprintCutselectorStatistics(scip, file);
313  	
314  	   return SCIP_OKAY;
315  	}
316  	
317  	/** output method of statistics table to output file stream 'file' */
318  	static
319  	SCIP_DECL_TABLEOUTPUT(tableOutputPricer)
320  	{  /*lint --e{715}*/
321  	   assert(scip != NULL);
322  	   assert(table != NULL);
323  	
324  	   SCIPprintPricerStatistics(scip, file);
325  	
326  	   return SCIP_OKAY;
327  	}
328  	
329  	/** output method of statistics table to output file stream 'file' */
330  	static
331  	SCIP_DECL_TABLEOUTPUT(tableOutputBranch)
332  	{  /*lint --e{715}*/
333  	   assert(scip != NULL);
334  	   assert(table != NULL);
335  	
336  	   SCIPprintBranchruleStatistics(scip, file);
337  	
338  	   return SCIP_OKAY;
339  	}
340  	
341  	/** output method of statistics table to output file stream 'file' */
342  	static
343  	SCIP_DECL_TABLEOUTPUT(tableOutputHeur)
344  	{  /*lint --e{715}*/
345  	   assert(scip != NULL);
346  	   assert(table != NULL);
347  	
348  	   SCIPprintHeuristicStatistics(scip, file);
349  	
350  	   return SCIP_OKAY;
351  	}
352  	
353  	/** output method of statistics table to output file stream 'file' */
354  	static
355  	SCIP_DECL_TABLEOUTPUT(tableOutputCompression)
356  	{  /*lint --e{715}*/
357  	   assert(scip != NULL);
358  	   assert(table != NULL);
359  	
360  	   SCIPprintCompressionStatistics(scip, file);
361  	
362  	   return SCIP_OKAY;
363  	}
364  	
365  	/** output method of statistics table to output file stream 'file' */
366  	static
367  	SCIP_DECL_TABLEOUTPUT(tableOutputLP)
368  	{  /*lint --e{715}*/
369  	   assert(scip != NULL);
370  	   assert(table != NULL);
371  	
372  	   SCIPprintLPStatistics(scip, file);
373  	
374  	   return SCIP_OKAY;
375  	}
376  	
377  	/** output method of statistics table to output file stream 'file' */
378  	static
379  	SCIP_DECL_TABLEOUTPUT(tableOutputNLP)
380  	{  /*lint --e{715}*/
381  	   assert(scip != NULL);
382  	   assert(table != NULL);
383  	
384  	   SCIPprintNLPStatistics(scip, file);
385  	
386  	   return SCIP_OKAY;
387  	}
388  	
389  	/** output method of statistics table to output file stream 'file' */
390  	static
391  	SCIP_DECL_TABLEOUTPUT(tableOutputRelax)
392  	{  /*lint --e{715}*/
393  	   assert(scip != NULL);
394  	   assert(table != NULL);
395  	
396  	   SCIPprintRelaxatorStatistics(scip, file);
397  	
398  	   return SCIP_OKAY;
399  	}
400  	
401  	/** output method of statistics table to output file stream 'file' */
402  	static
403  	SCIP_DECL_TABLEOUTPUT(tableOutputTree)
404  	{  /*lint --e{715}*/
405  	   assert(scip != NULL);
406  	   assert(table != NULL);
407  	
408  	   SCIPprintTreeStatistics(scip, file);
409  	
410  	   return SCIP_OKAY;
411  	}
412  	
413  	/** output method of statistics table to output file stream 'file' */
414  	static
415  	SCIP_DECL_TABLEOUTPUT(tableOutputRoot)
416  	{  /*lint --e{715}*/
417  	   assert(scip != NULL);
418  	   assert(table != NULL);
419  	
420  	   SCIPprintRootStatistics(scip, file);
421  	
422  	   return SCIP_OKAY;
423  	}
424  	
425  	/** output method of statistics table to output file stream 'file' */
426  	static
427  	SCIP_DECL_TABLEOUTPUT(tableOutputSol)
428  	{  /*lint --e{715}*/
429  	   assert(scip != NULL);
430  	   assert(table != NULL);
431  	
432  	   SCIPprintSolutionStatistics(scip, file);
433  	
434  	   return SCIP_OKAY;
435  	}
436  	
437  	/** output method of statistics table to output file stream 'file' */
438  	static
439  	SCIP_DECL_TABLEOUTPUT(tableOutputConc)
440  	{  /*lint --e{715}*/
441  	   assert(scip != NULL);
442  	   assert(table != NULL);
443  	
444  	   SCIPprintConcsolverStatistics(scip, file);
445  	
446  	   return SCIP_OKAY;
447  	}
448  	
449  	/** output method of statistics table to output file stream 'file' */
450  	static
451  	SCIP_DECL_TABLEOUTPUT(tableOutputBenders)
452  	{  /*lint --e{715}*/
453  	   assert(scip != NULL);
454  	   assert(table != NULL);
455  	
456  	   SCIPprintBendersStatistics(scip, file);
457  	
458  	   return SCIP_OKAY;
459  	}
460  	
461  	/** output method of statistics table to output file stream 'file' */
462  	static
463  	SCIP_DECL_TABLEOUTPUT(tableOutputExprhdlrs)
464  	{  /*lint --e{715}*/
465  	   assert(scip != NULL);
466  	   assert(table != NULL);
467  	
468  	   SCIPprintExpressionHandlerStatistics(scip, file);
469  	
470  	   return SCIP_OKAY;
471  	}
472  	
473  	/** output method of statistics table to output file stream 'file' */
474  	static
475  	SCIP_DECL_TABLEOUTPUT(tableOutputNlpis)
476  	{  /*lint --e{715}*/
477  	   assert(scip != NULL);
478  	   assert(table != NULL);
479  	
480  	   SCIPprintNLPIStatistics(scip, file);
481  	
482  	   return SCIP_OKAY;
483  	}
484  	
485  	
486  	/*
487  	 * statistics table specific interface methods
488  	 */
489  	
490  	/** creates the default statistics tables and includes them in SCIP */
491  	SCIP_RETCODE SCIPincludeTableDefault(
492  	   SCIP*                 scip                /**< SCIP data structure */
493  	   )
494  	{
495  	   SCIP_TABLE* tmptable;
496  	
497  	   tmptable = SCIPfindTable(scip, TABLE_NAME_STATUS);
498  	
499  	   /* since the default statistics tables are always included all at once in this method,
500  	    * they should all be included already if the first one is */
501  	   if( tmptable != NULL )
502  	   {
503  	      assert(SCIPfindTable(scip, TABLE_NAME_TIMING) != NULL );
504  	      assert(SCIPfindTable(scip, TABLE_NAME_ORIGPROB) != NULL );
505  	      assert(SCIPfindTable(scip, TABLE_NAME_TRANSPROB) != NULL );
506  	      assert(SCIPfindTable(scip, TABLE_NAME_PRESOL) != NULL );
507  	      assert(SCIPfindTable(scip, TABLE_NAME_CONS) != NULL );
508  	      assert(SCIPfindTable(scip, TABLE_NAME_CONSTIMING) != NULL );
509  	      assert(SCIPfindTable(scip, TABLE_NAME_PROP) != NULL );
510  	      assert(SCIPfindTable(scip, TABLE_NAME_CONFLICT) != NULL );
511  	      assert(SCIPfindTable(scip, TABLE_NAME_SEPA) != NULL );
512  	      assert(SCIPfindTable(scip, TABLE_NAME_PRICER) != NULL );
513  	      assert(SCIPfindTable(scip, TABLE_NAME_BRANCH) != NULL );
514  	      assert(SCIPfindTable(scip, TABLE_NAME_HEUR) != NULL );
515  	      assert(SCIPfindTable(scip, TABLE_NAME_COMPRESSION) != NULL );
516  	      assert(SCIPfindTable(scip, TABLE_NAME_LP) != NULL );
517  	      assert(SCIPfindTable(scip, TABLE_NAME_NLP) != NULL );
518  	      assert(SCIPfindTable(scip, TABLE_NAME_RELAX) != NULL );
519  	      assert(SCIPfindTable(scip, TABLE_NAME_TREE) != NULL );
520  	      assert(SCIPfindTable(scip, TABLE_NAME_ROOT) != NULL );
521  	      assert(SCIPfindTable(scip, TABLE_NAME_SOL) != NULL );
522  	      assert(SCIPfindTable(scip, TABLE_NAME_CONC) != NULL );
523  	      assert(SCIPfindTable(scip, TABLE_NAME_BENDERS) != NULL );
524  	      assert(SCIPfindTable(scip, TABLE_NAME_EXPRHDLRS) != NULL );
525  	      assert(SCIPfindTable(scip, TABLE_NAME_NLPIS) != NULL );
526  	
527  	      return SCIP_OKAY;
528  	   }
529  	
530  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_STATUS, TABLE_DESC_STATUS, TRUE,
531  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputStatus,
532  	         NULL, TABLE_POSITION_STATUS, TABLE_EARLIEST_STAGE_STATUS) );
533  	
534  	   assert(SCIPfindTable(scip, TABLE_NAME_TIMING) == NULL);
535  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_TIMING, TABLE_DESC_TIMING, TRUE,
536  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputTiming,
537  	         NULL, TABLE_POSITION_TIMING, TABLE_EARLIEST_STAGE_TIMING) );
538  	
539  	   assert(SCIPfindTable(scip, TABLE_NAME_ORIGPROB) == NULL);
540  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_ORIGPROB, TABLE_DESC_ORIGPROB, TRUE,
541  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputOrigProb,
542  	         NULL, TABLE_POSITION_ORIGPROB, TABLE_EARLIEST_STAGE_ORIGPROB) );
543  	
544  	   assert(SCIPfindTable(scip, TABLE_NAME_TRANSPROB) == NULL);
545  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_TRANSPROB, TABLE_DESC_TRANSPROB, TRUE,
546  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputTransProb,
547  	         NULL, TABLE_POSITION_TRANSPROB, TABLE_EARLIEST_STAGE_TRANSPROB) );
548  	
549  	   assert(SCIPfindTable(scip, TABLE_NAME_PRESOL) == NULL);
550  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_PRESOL, TABLE_DESC_PRESOL, TRUE,
551  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputPresol,
552  	         NULL, TABLE_POSITION_PRESOL, TABLE_EARLIEST_STAGE_PRESOL) );
553  	
554  	   assert(SCIPfindTable(scip, TABLE_NAME_CONS) == NULL);
555  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_CONS, TABLE_DESC_CONS, TRUE,
556  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputCons,
557  	         NULL, TABLE_POSITION_CONS, TABLE_EARLIEST_STAGE_CONS) );
558  	
559  	   assert(SCIPfindTable(scip, TABLE_NAME_CONSTIMING) == NULL);
560  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_CONSTIMING, TABLE_DESC_CONSTIMING, TRUE,
561  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputConstiming,
562  	         NULL, TABLE_POSITION_CONSTIMING, TABLE_EARLIEST_STAGE_CONSTIMING) );
563  	
564  	   assert(SCIPfindTable(scip, TABLE_NAME_PROP) == NULL);
565  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_PROP, TABLE_DESC_PROP, TRUE,
566  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputProp,
567  	         NULL, TABLE_POSITION_PROP, TABLE_EARLIEST_STAGE_PROP) );
568  	
569  	   assert(SCIPfindTable(scip, TABLE_NAME_CONFLICT) == NULL);
570  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_CONFLICT, TABLE_DESC_CONFLICT, TRUE,
571  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputConflict,
572  	         NULL, TABLE_POSITION_CONFLICT, TABLE_EARLIEST_STAGE_CONFLICT) );
573  	
574  	   assert(SCIPfindTable(scip, TABLE_NAME_SEPA) == NULL);
575  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_SEPA, TABLE_DESC_SEPA, TRUE,
576  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputSepa,
577  	         NULL, TABLE_POSITION_SEPA, TABLE_EARLIEST_STAGE_SEPA) );
578  	
579  	   assert(SCIPfindTable(scip, TABLE_NAME_CUTSEL) == NULL);
580  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_CUTSEL, TABLE_DESC_CUTSEL, TRUE,
581  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputCutsel,
582  	         NULL, TABLE_POSITION_CUTSEL, TABLE_EARLIEST_STAGE_CUTSEL) );
583  	
584  	   assert(SCIPfindTable(scip, TABLE_NAME_PRICER) == NULL);
585  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_PRICER, TABLE_DESC_PRICER, TRUE,
586  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputPricer,
587  	         NULL, TABLE_POSITION_PRICER, TABLE_EARLIEST_STAGE_PRICER) );
588  	
589  	   assert(SCIPfindTable(scip, TABLE_NAME_BRANCH) == NULL);
590  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_BRANCH, TABLE_DESC_BRANCH, TRUE,
591  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputBranch,
592  	         NULL, TABLE_POSITION_BRANCH, TABLE_EARLIEST_STAGE_BRANCH) );
593  	
594  	   assert(SCIPfindTable(scip, TABLE_NAME_HEUR) == NULL);
595  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_HEUR, TABLE_DESC_HEUR, TRUE,
596  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputHeur,
597  	         NULL, TABLE_POSITION_HEUR, TABLE_EARLIEST_STAGE_HEUR) );
598  	
599  	   assert(SCIPfindTable(scip, TABLE_NAME_COMPRESSION) == NULL);
600  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_COMPRESSION, TABLE_DESC_COMPRESSION, TRUE,
601  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputCompression,
602  	         NULL, TABLE_POSITION_COMPRESSION, TABLE_EARLIEST_STAGE_COMPRESSION) );
603  	
604  	   assert(SCIPfindTable(scip, TABLE_NAME_BENDERS) == NULL);
605  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_BENDERS, TABLE_DESC_BENDERS, TRUE,
606  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputBenders,
607  	         NULL, TABLE_POSITION_BENDERS, TABLE_EARLIEST_STAGE_BENDERS) );
608  	
609  	   assert(SCIPfindTable(scip, TABLE_NAME_EXPRHDLRS) == NULL);
610  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_EXPRHDLRS, TABLE_DESC_EXPRHDLRS, TRUE,
611  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputExprhdlrs,
612  	         NULL, TABLE_POSITION_EXPRHDLRS, TABLE_EARLIEST_STAGE_EXPRHDLRS) );
613  	
614  	   assert(SCIPfindTable(scip, TABLE_NAME_LP) == NULL);
615  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_LP, TABLE_DESC_LP, TRUE,
616  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputLP,
617  	         NULL, TABLE_POSITION_LP, TABLE_EARLIEST_STAGE_LP) );
618  	
619  	   assert(SCIPfindTable(scip, TABLE_NAME_NLP) == NULL);
620  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_NLP, TABLE_DESC_NLP, TRUE,
621  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputNLP,
622  	         NULL, TABLE_POSITION_NLP, TABLE_EARLIEST_STAGE_NLP) );
623  	
624  	   assert(SCIPfindTable(scip, TABLE_NAME_NLPIS) == NULL);
625  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_NLPIS, TABLE_DESC_NLPIS, TRUE,
626  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputNlpis,
627  	         NULL, TABLE_POSITION_NLPIS, TABLE_EARLIEST_STAGE_NLPIS) );
628  	
629  	   assert(SCIPfindTable(scip, TABLE_NAME_RELAX) == NULL);
630  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_RELAX, TABLE_DESC_RELAX, TRUE,
631  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputRelax,
632  	         NULL, TABLE_POSITION_RELAX, TABLE_EARLIEST_STAGE_RELAX) );
633  	
634  	   assert(SCIPfindTable(scip, TABLE_NAME_TREE) == NULL);
635  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_TREE, TABLE_DESC_TREE, TRUE,
636  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputTree,
637  	         NULL, TABLE_POSITION_TREE, TABLE_EARLIEST_STAGE_TREE) );
638  	
639  	   assert(SCIPfindTable(scip, TABLE_NAME_ROOT) == NULL);
640  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_ROOT, TABLE_DESC_ROOT, TRUE,
641  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputRoot,
642  	         NULL, TABLE_POSITION_ROOT, TABLE_EARLIEST_STAGE_ROOT) );
643  	
644  	   assert(SCIPfindTable(scip, TABLE_NAME_SOL) == NULL);
645  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_SOL, TABLE_DESC_SOL, TRUE,
646  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputSol,
647  	         NULL, TABLE_POSITION_SOL, TABLE_EARLIEST_STAGE_SOL) );
648  	
649  	   assert(SCIPfindTable(scip, TABLE_NAME_CONC) == NULL);
650  	   SCIP_CALL( SCIPincludeTable(scip, TABLE_NAME_CONC, TABLE_DESC_CONC, TRUE,
651  	         tableCopyDefault, NULL, NULL, NULL, NULL, NULL, tableOutputConc,
652  	         NULL, TABLE_POSITION_CONC, TABLE_EARLIEST_STAGE_CONC) );
653  	
654  	   return SCIP_OKAY;
655  	}
656