1 | // Copyright (C) 2002, International Business Machines |
---|
2 | // Corporation and others. All Rights Reserved. |
---|
3 | #if defined(_MSC_VER) |
---|
4 | // Turn off compiler warning about long names |
---|
5 | # pragma warning(disable:4786) |
---|
6 | #endif |
---|
7 | |
---|
8 | #include "CbcMessage.hpp" |
---|
9 | |
---|
10 | typedef struct { |
---|
11 | CBC_Message internalNumber; |
---|
12 | int externalNumber; // or continuation |
---|
13 | char detail; |
---|
14 | const char * message; |
---|
15 | } Cbc_message; |
---|
16 | static Cbc_message us_english[]= |
---|
17 | { |
---|
18 | {CBC_END_GOOD,1,1,"Search completed - best objective %g, took %d iterations and %d nodes"}, |
---|
19 | {CBC_MAXNODES,3,1,"Exiting on maximum nodes"}, |
---|
20 | {CBC_MAXTIME,20,1,"Exiting on maximum time"}, |
---|
21 | {CBC_MAXSOLS,19,1,"Exiting on maximum solutions"}, |
---|
22 | {CBC_SOLUTION,4,1,"Integer solution of %g found after %d iterations and %d nodes"}, |
---|
23 | {CBC_END,5,1,"Partial search - best objective %g, took %d iterations and %d nodes"}, |
---|
24 | {CBC_INFEAS,6,1,"The LP relaxation is infeasible or too expensive"}, |
---|
25 | {CBC_STRONG,7,3,"Strong branching on %d (%d), down %g (%d) up %g (%d) value %g"}, |
---|
26 | {CBC_SOLINDIVIDUAL,8,2,"%d has value %g"}, |
---|
27 | {CBC_INTEGERINCREMENT,9,1,"Objective coefficients multiple of %g"}, |
---|
28 | {CBC_STATUS,10,1,"After %d nodes, %d on tree, %g best solution, best possible %g"}, |
---|
29 | {CBC_GAP,11,1,"Exiting as integer gap of %g less than %g or %g%%"}, |
---|
30 | {CBC_ROUNDING,12,1,"Integer solution of %g found by heuristic after %d iterations and %d nodes"}, |
---|
31 | {CBC_ROOT,13,1,"At root node, %d cuts changed objective from %g to %g in %d passes"}, |
---|
32 | {CBC_GENERATOR,14,1,"Cut generator %d (%s) - %d row cuts (%d active), %d column cuts - new frequency is %d"}, |
---|
33 | {CBC_BRANCH,15,2,"Node %d Obj %g Unsat %d depth %d"}, |
---|
34 | {CBC_STRONGSOL,16,1,"Integer solution of %g found by strong branching after %d iterations and %d nodes"}, |
---|
35 | {CBC_NOINT,3007,0,"No integer variables - nothing to do"}, |
---|
36 | {CBC_VUB_PASS,17,1,"%d solved, %d variables fixed, %d tightened"}, |
---|
37 | {CBC_VUB_END,18,1,"After tightenVubs, %d variables fixed, %d tightened"}, |
---|
38 | {CBC_NOTFEAS1,21,2,"On closer inspection node is infeasible"}, |
---|
39 | {CBC_NOTFEAS2,22,2,"On closer inspection objective value of %g above cutoff of %g"}, |
---|
40 | {CBC_NOTFEAS3,23,2,"Allowing solution, even though largest row infeasibility is %g"}, |
---|
41 | {CBC_CUTOFF_WARNING1,23,1,"Cutoff set to %g - equivalent to best solution of %g"}, |
---|
42 | {CBC_ITERATE_STRONG,24,3,"%d cleanup iterations before strong branching"}, |
---|
43 | {CBC_DUMMY_END,999999,0,""} |
---|
44 | }; |
---|
45 | /* Constructor */ |
---|
46 | CbcMessage::CbcMessage(Language language) : |
---|
47 | CoinMessages(sizeof(us_english)/sizeof(Cbc_message)) |
---|
48 | { |
---|
49 | language_=language; |
---|
50 | strcpy(source_,"Cbc"); |
---|
51 | Cbc_message * message = us_english; |
---|
52 | |
---|
53 | while (message->internalNumber!=CBC_DUMMY_END) { |
---|
54 | CoinOneMessage oneMessage(message->externalNumber,message->detail, |
---|
55 | message->message); |
---|
56 | addMessage(message->internalNumber,oneMessage); |
---|
57 | message ++; |
---|
58 | } |
---|
59 | |
---|
60 | // now override any language ones |
---|
61 | |
---|
62 | switch (language) { |
---|
63 | |
---|
64 | default: |
---|
65 | message=NULL; |
---|
66 | break; |
---|
67 | } |
---|
68 | |
---|
69 | // replace if any found |
---|
70 | if (message) { |
---|
71 | while (message->internalNumber!=CBC_DUMMY_END) { |
---|
72 | replaceMessage(message->internalNumber,message->message); |
---|
73 | message ++; |
---|
74 | } |
---|
75 | } |
---|
76 | } |
---|