00001
00002
00003
00004 #include "CoinPragma.hpp"
00005 #include "ClpMessage.hpp"
00006
00007 typedef struct {
00008 CLP_Message internalNumber;
00009 int externalNumber;
00010 char detail;
00011 const char * message;
00012 } Clp_message;
00013 static Clp_message us_english[]=
00014 {
00015 {CLP_SIMPLEX_FINISHED,0,1,"Optimal - objective value %g"},
00016 {CLP_SIMPLEX_INFEASIBLE,1,1,"Primal infeasible - objective value %g"},
00017 {CLP_SIMPLEX_UNBOUNDED,2,1,"Dual infeasible - objective value %g"},
00018 {CLP_SIMPLEX_STOPPED,3,1,"Stopped - objective value %g"},
00019 {CLP_SIMPLEX_ERROR,4,1,"Stopped due to errors - objective value %g"},
00020
00021 {CLP_SIMPLEX_STATUS,5,1,"%d Obj %g%? Primal inf %g (%d)%? Dual inf %g (%d)%? w.o. free dual inf (%d)"},
00022 {CLP_DUAL_BOUNDS,25,3,"Looking optimal checking bounds with %g"},
00023 {CLP_SIMPLEX_ACCURACY,6,3,"Primal error %g, dual error %g"},
00024 {CLP_SIMPLEX_BADFACTOR,7,2,"Singular factorization of basis - status %d"},
00025 {CLP_SIMPLEX_BOUNDTIGHTEN,8,3,"Bounds were tightened %d times"},
00026 {CLP_SIMPLEX_INFEASIBILITIES,9,1,"%d infeasibilities"},
00027 {CLP_SIMPLEX_FLAG,10,3,"Flagging variable %c%d"},
00028 {CLP_SIMPLEX_GIVINGUP,11,2,"Stopping as close enough"},
00029 {CLP_DUAL_CHECKB,12,2,"New dual bound of %g"},
00030 {CLP_DUAL_ORIGINAL,13,3,"Going back to original objective"},
00031 {CLP_SIMPLEX_PERTURB,14,1,"Perturbing problem by %g %% of %g - largest nonzero change %g (%% %g) - largest zero change %g"},
00032 {CLP_PRIMAL_ORIGINAL,15,2,"Going back to original tolerance"},
00033 {CLP_PRIMAL_WEIGHT,16,2,"New infeasibility weight of %g"},
00034 {CLP_PRIMAL_OPTIMAL,17,2,"Looking optimal with tolerance of %g"},
00035 {CLP_SINGULARITIES,18,2,"%d total structurals rejected in initial factorization"},
00036 {CLP_MODIFIEDBOUNDS,19,1,"%d variables/rows fixed as scaled bounds too close"},
00037 {CLP_RIMSTATISTICS1,20,2,"Absolute values of scaled objective range from %g to %g"},
00038 {CLP_RIMSTATISTICS2,21,2,"Absolute values of scaled bounds range from %g to %g, minimum gap %g"},
00039 {CLP_RIMSTATISTICS3,22,2,"Absolute values of scaled rhs range from %g to %g, minimum gap %g"},
00040 {CLP_POSSIBLELOOP,23,2,"Possible loop - %d matches (%x) after %d checks"},
00041 {CLP_SMALLELEMENTS,24,1,"Matrix will be packed to eliminate %d small elements"},
00042 {CLP_SIMPLEX_HOUSE1,101,32,"dirOut %d, dirIn %d, theta %g, out %g, dj %g, alpha %g"},
00043 {CLP_SIMPLEX_HOUSE2,102,4,"%d %g In: %c%d Out: %c%d%? dj ratio %g distance %g%? dj %g distance %g"},
00044 {CLP_SIMPLEX_NONLINEAR,103,4,"Primal nonlinear change %g (%d)"},
00045 {CLP_SIMPLEX_FREEIN,104,32,"Free column in %d"},
00046 {CLP_SIMPLEX_PIVOTROW,105,32,"Pivot row %d"},
00047 {CLP_DUAL_CHECK,106,4,"Btran alpha %g, ftran alpha %g"},
00048 {CLP_PRIMAL_DJ,107,4,"Btran dj %g, ftran dj %g"},
00049 {CLP_PACKEDSCALE_INITIAL,1001,2,"Initial range of elements is %g to %g"},
00050 {CLP_PACKEDSCALE_WHILE,1002,3,"Range of elements is %g to %g"},
00051 {CLP_PACKEDSCALE_FINAL,1003,2,"Final range of elements is %g to %g"},
00052 {CLP_PACKEDSCALE_FORGET,1004,2,"Not bothering to scale as good enough"},
00053 {CLP_INITIALIZE_STEEP,1005,3,"Initializing steepest edge weights - old %g, new %g"},
00054 {CLP_UNABLE_OPEN,6001,0,"Unable to open file %s for reading"},
00055 {CLP_BAD_BOUNDS,6002,0,"%d bad bound pairs or bad objectives were found - first at %c%d"},
00056 {CLP_BAD_MATRIX,6003,0,"Matrix has %d large values, first at column %d, row %d is %g"},
00057 {CLP_LOOP,6004,0,"Can't get out of loop - stopping"},
00058 {CLP_DUPLICATEELEMENTS,26,1,"Matrix will be packed to eliminate %d duplicate elements"},
00059 {CLP_IMPORT_RESULT,27,1,"Model was imported from %s in %g seconds"},
00060 {CLP_IMPORT_ERRORS,3001,1," There were %d errors when importing model from %s"},
00061 {CLP_EMPTY_PROBLEM,3002,0,"Not solving empty problem - %d rows, %d columns and %d elements"},
00062 {CLP_CRASH,28,1,"Crash put %d variables in basis, %d dual infeasibilities"},
00063 {CLP_END_VALUES_PASS,29,1,"End of values pass after %d iterations"},
00064 {CLP_QUADRATIC_BOTH,108,32,"%s %d (%g) and %d (%g) both basic"},
00065 {CLP_QUADRATIC_PRIMAL_DETAILS,109,32,"coeff %g, %g, %g - dj %g - deriv zero at %g, sj at %g"},
00066 {CLP_IDIOT_ITERATION,30,1,"%d infeas %g, obj %g - mu %g, its %d, %d interior"},
00067 {CLP_INFEASIBLE,3003,1,"Analysis indicates model infeasible or unbounded"},
00068 {CLP_MATRIX_CHANGE,31,2,"Matrix can not be converted into %s"},
00069 {CLP_TIMING,32,1,"%s objective %.10g - %d iterations time %.2f2%?, Presolve %.2f%?, Idiot %.2f%?"},
00070 {CLP_INTERVAL_TIMING,33,2,"%s took %.2f seconds (total %.2f)"},
00071 {CLP_SPRINT,34,1,"Pass %d took %d iterations, objective %g, dual infeasibilities %g( %d)"},
00072 {CLP_BARRIER_ITERATION,35,1,"%d Primal %g Dual %g Complementarity %g - %d fixed, rank %d"},
00073 {CLP_BARRIER_OBJECTIVE_GAP,36,3,"Feasible - objective gap %g"},
00074 {CLP_BARRIER_GONE_INFEASIBLE,37,2,"Gone infeasible"},
00075 {CLP_BARRIER_CLOSE_TO_OPTIMAL,38,2,"Close to optimal after %d iterations with complementarity %g"},
00076 {CLP_BARRIER_COMPLEMENTARITY,39,2,"Complementarity %g - %s"},
00077 {CLP_BARRIER_EXIT2,40,1,"Exiting - using solution from iteration %d"},
00078 {CLP_BARRIER_STOPPING,41,1,"Exiting on iterations"},
00079 {CLP_BARRIER_EXIT,42,1,"Optimal %s"},
00080 {CLP_BARRIER_SCALING,43,3,"Scaling %s by %g"},
00081 {CLP_BARRIER_MU,44,3,"Changing mu from %g to %g"},
00082 {CLP_BARRIER_INFO,45,3,"Detail - %s"},
00083 {CLP_BARRIER_END,46,1,"At end primal/dual infeasibilities %g/%g, complementarity gap %g, objective %g"},
00084 {CLP_BARRIER_ACCURACY,47,2,"Relative error in phase %d, refinement %d is %g"},
00085 {CLP_BARRIER_SAFE,48,3,"Initial safe primal value %g, objective norm %g"},
00086 {CLP_BARRIER_NEGATIVE_GAPS,49,3,"%d negative gaps summing to %g"},
00087 {CLP_BARRIER_REDUCING,50,2,"Reducing %s step from %g to %g"},
00088 {CLP_BARRIER_DIAGONAL,51,3,"Range of diagonal values is %g to %g"},
00089 {CLP_BARRIER_SLACKS,52,3,"%d slacks increased, %d decreased this iteration"},
00090 {CLP_BARRIER_DUALINF,53,3,"Maximum dual infeasibility on fixed is %g"},
00091 {CLP_BARRIER_KILLED,54,3,"%d variables killed this iteration"},
00092 {CLP_BARRIER_ABS_DROPPED,55,2,"Absolute error on dropped rows is %g"},
00093 {CLP_BARRIER_ABS_ERROR,56,2,"Primal error is %g and dual error is %g"},
00094 {CLP_BARRIER_FEASIBLE,57,2,"Infeasibilities - bound %g , primal %g ,dual %g"},
00095 {CLP_BARRIER_STEP,58,2,"Steps - primal %g ,dual %g , mu %g"},
00096 {CLP_DUMMY_END,999999,0,""}
00097 };
00098 static Clp_message uk_english[]=
00099 {
00100 {CLP_SIMPLEX_FINISHED,0,1,"Optimal - objective value %g,\
00101 okay CLP can solve some LPs but you really need Xpress from Dash Associates :-)"},
00102 {CLP_DUMMY_END,999999,0,""}
00103 };
00104
00105 ClpMessage::ClpMessage(Language language) :
00106 CoinMessages(sizeof(us_english)/sizeof(Clp_message))
00107 {
00108 language_=language;
00109 strcpy(source_,"Clp");
00110 Clp_message * message = us_english;
00111
00112 while (message->internalNumber!=CLP_DUMMY_END) {
00113 CoinOneMessage oneMessage(message->externalNumber,message->detail,
00114 message->message);
00115 addMessage(message->internalNumber,oneMessage);
00116 message ++;
00117 }
00118
00119
00120
00121 switch (language) {
00122 case uk_en:
00123 message = uk_english;
00124 break;
00125
00126 default:
00127 message=NULL;
00128 break;
00129 }
00130
00131
00132 if (message) {
00133 while (message->internalNumber!=CLP_DUMMY_END) {
00134 replaceMessage(message->internalNumber,message->message);
00135 message ++;
00136 }
00137 }
00138 }