| 1 | /* $Id: Clp_C_Interface.h 1665 2011-01-04 17:55:54Z lou $ */ |
| 2 | /* |
| 3 | Copyright (C) 2002, 2003 International Business Machines Corporation |
| 4 | and others. All Rights Reserved. |
| 5 | |
| 6 | This code is licensed under the terms of the Eclipse Public License (EPL). |
| 7 | */ |
| 8 | #ifndef ClpSimplexC_H |
| 9 | #define ClpSimplexC_H |
| 10 | |
| 11 | /* include all defines and ugly stuff */ |
| 12 | #include "Coin_C_defines.h" |
| 13 | |
| 14 | /** This is a first "C" interface to Clp. |
| 15 | It has similarities to the OSL V3 interface |
| 16 | and only has most common functions |
| 17 | */ |
| 18 | |
| 19 | #ifdef __cplusplus |
| 20 | extern "C" { |
| 21 | #endif |
| 22 | |
| 23 | /**@name Constructors and destructor |
| 24 | These do not have an exact analogue in C++. |
| 25 | The user does not need to know structure of Clp_Simplex. |
| 26 | |
| 27 | For all functions outside this group there is an exact C++ |
| 28 | analogue created by taking the first parameter out, removing the Clp_ |
| 29 | from name and applying the method to an object of type ClpSimplex. |
| 30 | */ |
| 31 | /*@{*/ |
| 32 | |
| 33 | /** Default constructor */ |
| 34 | COINLIBAPI Clp_Simplex * COINLINKAGE Clp_newModel(void); |
| 35 | /** Destructor */ |
| 36 | COINLIBAPI void COINLINKAGE Clp_deleteModel(Clp_Simplex * model); |
| 37 | /*@}*/ |
| 38 | |
| 39 | /**@name Load model - loads some stuff and initializes others */ |
| 40 | /*@{*/ |
| 41 | /** Loads a problem (the constraints on the |
| 42 | rows are given by lower and upper bounds). If a pointer is NULL then the |
| 43 | following values are the default: |
| 44 | <ul> |
| 45 | <li> <code>colub</code>: all columns have upper bound infinity |
| 46 | <li> <code>collb</code>: all columns have lower bound 0 |
| 47 | <li> <code>rowub</code>: all rows have upper bound infinity |
| 48 | <li> <code>rowlb</code>: all rows have lower bound -infinity |
| 49 | <li> <code>obj</code>: all variables have 0 objective coefficient |
| 50 | </ul> |
| 51 | */ |
| 52 | /** Just like the other loadProblem() method except that the matrix is |
| 53 | given in a standard column major ordered format (without gaps). */ |
| 54 | COINLIBAPI void COINLINKAGE Clp_loadProblem (Clp_Simplex * model, const int numcols, const int numrows, |
| 55 | const CoinBigIndex * start, const int* index, |
| 56 | const double* value, |
| 57 | const double* collb, const double* colub, |
| 58 | const double* obj, |
| 59 | const double* rowlb, const double* rowub); |
| 60 | |
| 61 | /* read quadratic part of the objective (the matrix part) */ |
| 62 | COINLIBAPI void COINLINKAGE |
| 63 | Clp_loadQuadraticObjective(Clp_Simplex * model, |
| 64 | const int numberColumns, |
| 65 | const CoinBigIndex * start, |
| 66 | const int * column, |
| 67 | const double * element); |
| 68 | /** Read an mps file from the given filename */ |
| 69 | COINLIBAPI int COINLINKAGE Clp_readMps(Clp_Simplex * model, const char *filename, |
| 70 | int keepNames, |
| 71 | int ignoreErrors); |
| 72 | /** Copy in integer informations */ |
| 73 | COINLIBAPI void COINLINKAGE Clp_copyInIntegerInformation(Clp_Simplex * model, const char * information); |
| 74 | /** Drop integer informations */ |
| 75 | COINLIBAPI void COINLINKAGE Clp_deleteIntegerInformation(Clp_Simplex * model); |
| 76 | /** Resizes rim part of model */ |
| 77 | COINLIBAPI void COINLINKAGE Clp_resize (Clp_Simplex * model, int newNumberRows, int newNumberColumns); |
| 78 | /** Deletes rows */ |
| 79 | COINLIBAPI void COINLINKAGE Clp_deleteRows(Clp_Simplex * model, int number, const int * which); |
| 80 | /** Add rows */ |
| 81 | COINLIBAPI void COINLINKAGE Clp_addRows(Clp_Simplex * model, int number, const double * rowLower, |
| 82 | const double * rowUpper, |
| 83 | const int * rowStarts, const int * columns, |
| 84 | const double * elements); |
| 85 | |
| 86 | /** Deletes columns */ |
| 87 | COINLIBAPI void COINLINKAGE Clp_deleteColumns(Clp_Simplex * model, int number, const int * which); |
| 88 | /** Add columns */ |
| 89 | COINLIBAPI void COINLINKAGE Clp_addColumns(Clp_Simplex * model, int number, const double * columnLower, |
| 90 | const double * columnUpper, |
| 91 | const double * objective, |
| 92 | const int * columnStarts, const int * rows, |
| 93 | const double * elements); |
| 94 | /** Change row lower bounds */ |
| 95 | COINLIBAPI void COINLINKAGE Clp_chgRowLower(Clp_Simplex * model, const double * rowLower); |
| 96 | /** Change row upper bounds */ |
| 97 | COINLIBAPI void COINLINKAGE Clp_chgRowUpper(Clp_Simplex * model, const double * rowUpper); |
| 98 | /** Change column lower bounds */ |
| 99 | COINLIBAPI void COINLINKAGE Clp_chgColumnLower(Clp_Simplex * model, const double * columnLower); |
| 100 | /** Change column upper bounds */ |
| 101 | COINLIBAPI void COINLINKAGE Clp_chgColumnUpper(Clp_Simplex * model, const double * columnUpper); |
| 102 | /** Change objective coefficients */ |
| 103 | COINLIBAPI void COINLINKAGE Clp_chgObjCoefficients(Clp_Simplex * model, const double * objIn); |
| 104 | /** Drops names - makes lengthnames 0 and names empty */ |
| 105 | COINLIBAPI void COINLINKAGE Clp_dropNames(Clp_Simplex * model); |
| 106 | /** Copies in names */ |
| 107 | COINLIBAPI void COINLINKAGE Clp_copyNames(Clp_Simplex * model, const char * const * rowNames, |
| 108 | const char * const * columnNames); |
| 109 | |
| 110 | /*@}*/ |
| 111 | /**@name gets and sets - you will find some synonyms at the end of this file */ |
| 112 | /*@{*/ |
| 113 | /** Number of rows */ |
| 114 | COINLIBAPI int COINLINKAGE Clp_numberRows(Clp_Simplex * model); |
| 115 | /** Number of columns */ |
| 116 | COINLIBAPI int COINLINKAGE Clp_numberColumns(Clp_Simplex * model); |
| 117 | /** Primal tolerance to use */ |
| 118 | COINLIBAPI double COINLINKAGE Clp_primalTolerance(Clp_Simplex * model); |
| 119 | COINLIBAPI void COINLINKAGE Clp_setPrimalTolerance(Clp_Simplex * model, double value) ; |
| 120 | /** Dual tolerance to use */ |
| 121 | COINLIBAPI double COINLINKAGE Clp_dualTolerance(Clp_Simplex * model); |
| 122 | COINLIBAPI void COINLINKAGE Clp_setDualTolerance(Clp_Simplex * model, double value) ; |
| 123 | /** Dual objective limit */ |
| 124 | COINLIBAPI double COINLINKAGE Clp_dualObjectiveLimit(Clp_Simplex * model); |
| 125 | COINLIBAPI void COINLINKAGE Clp_setDualObjectiveLimit(Clp_Simplex * model, double value); |
| 126 | /** Objective offset */ |
| 127 | COINLIBAPI double COINLINKAGE Clp_objectiveOffset(Clp_Simplex * model); |
| 128 | COINLIBAPI void COINLINKAGE Clp_setObjectiveOffset(Clp_Simplex * model, double value); |
| 129 | /** Fills in array with problem name */ |
| 130 | COINLIBAPI void COINLINKAGE Clp_problemName(Clp_Simplex * model, int maxNumberCharacters, char * array); |
| 131 | /* Sets problem name. Must have \0 at end. */ |
| 132 | COINLIBAPI int COINLINKAGE |
| 133 | Clp_setProblemName(Clp_Simplex * model, int maxNumberCharacters, char * array); |
| 134 | /** Number of iterations */ |
| 135 | COINLIBAPI int COINLINKAGE Clp_numberIterations(Clp_Simplex * model); |
| 136 | COINLIBAPI void COINLINKAGE Clp_setNumberIterations(Clp_Simplex * model, int numberIterations); |
| 137 | /** Maximum number of iterations */ |
| 138 | COINLIBAPI int maximumIterations(Clp_Simplex * model); |
| 139 | COINLIBAPI void COINLINKAGE Clp_setMaximumIterations(Clp_Simplex * model, int value); |
| 140 | /** Maximum time in seconds (from when set called) */ |
| 141 | COINLIBAPI double COINLINKAGE Clp_maximumSeconds(Clp_Simplex * model); |
| 142 | COINLIBAPI void COINLINKAGE Clp_setMaximumSeconds(Clp_Simplex * model, double value); |
| 143 | /** Returns true if hit maximum iterations (or time) */ |
| 144 | COINLIBAPI int COINLINKAGE Clp_hitMaximumIterations(Clp_Simplex * model); |
| 145 | /** Status of problem: |
| 146 | 0 - optimal |
| 147 | 1 - primal infeasible |
| 148 | 2 - dual infeasible |
| 149 | 3 - stopped on iterations etc |
| 150 | 4 - stopped due to errors |
| 151 | */ |
| 152 | COINLIBAPI int COINLINKAGE Clp_status(Clp_Simplex * model); |
| 153 | /** Set problem status */ |
| 154 | COINLIBAPI void COINLINKAGE Clp_setProblemStatus(Clp_Simplex * model, int problemStatus); |
| 155 | /** Secondary status of problem - may get extended |
| 156 | 0 - none |
| 157 | 1 - primal infeasible because dual limit reached |
| 158 | 2 - scaled problem optimal - unscaled has primal infeasibilities |
| 159 | 3 - scaled problem optimal - unscaled has dual infeasibilities |
| 160 | 4 - scaled problem optimal - unscaled has both dual and primal infeasibilities |
| 161 | */ |
| 162 | COINLIBAPI int COINLINKAGE Clp_secondaryStatus(Clp_Simplex * model); |
| 163 | COINLIBAPI void COINLINKAGE Clp_setSecondaryStatus(Clp_Simplex * model, int status); |
| 164 | /** Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore */ |
| 165 | COINLIBAPI double COINLINKAGE Clp_optimizationDirection(Clp_Simplex * model); |
| 166 | COINLIBAPI void COINLINKAGE Clp_setOptimizationDirection(Clp_Simplex * model, double value); |
| 167 | /** Primal row solution */ |
| 168 | COINLIBAPI double * COINLINKAGE Clp_primalRowSolution(Clp_Simplex * model); |
| 169 | /** Primal column solution */ |
| 170 | COINLIBAPI double * COINLINKAGE Clp_primalColumnSolution(Clp_Simplex * model); |
| 171 | /** Dual row solution */ |
| 172 | COINLIBAPI double * COINLINKAGE Clp_dualRowSolution(Clp_Simplex * model); |
| 173 | /** Reduced costs */ |
| 174 | COINLIBAPI double * COINLINKAGE Clp_dualColumnSolution(Clp_Simplex * model); |
| 175 | /** Row lower */ |
| 176 | COINLIBAPI double* COINLINKAGE Clp_rowLower(Clp_Simplex * model); |
| 177 | /** Row upper */ |
| 178 | COINLIBAPI double* COINLINKAGE Clp_rowUpper(Clp_Simplex * model); |
| 179 | /** Objective */ |
| 180 | COINLIBAPI double * COINLINKAGE Clp_objective(Clp_Simplex * model); |
| 181 | /** Column Lower */ |
| 182 | COINLIBAPI double * COINLINKAGE Clp_columnLower(Clp_Simplex * model); |
| 183 | /** Column Upper */ |
| 184 | COINLIBAPI double * COINLINKAGE Clp_columnUpper(Clp_Simplex * model); |
| 185 | /** Number of elements in matrix */ |
| 186 | COINLIBAPI int COINLINKAGE Clp_getNumElements(Clp_Simplex * model); |
| 187 | /* Column starts in matrix */ |
| 188 | COINLIBAPI const CoinBigIndex * COINLINKAGE Clp_getVectorStarts(Clp_Simplex * model); |
| 189 | /* Row indices in matrix */ |
| 190 | COINLIBAPI const int * COINLINKAGE Clp_getIndices(Clp_Simplex * model); |
| 191 | /* Column vector lengths in matrix */ |
| 192 | COINLIBAPI const int * COINLINKAGE Clp_getVectorLengths(Clp_Simplex * model); |
| 193 | /* Element values in matrix */ |
| 194 | COINLIBAPI const double * COINLINKAGE Clp_getElements(Clp_Simplex * model); |
| 195 | /** Objective value */ |
| 196 | COINLIBAPI double COINLINKAGE Clp_objectiveValue(Clp_Simplex * model); |
| 197 | /** Integer information */ |
| 198 | COINLIBAPI char * COINLINKAGE Clp_integerInformation(Clp_Simplex * model); |
| 199 | /** Infeasibility/unbounded ray (NULL returned if none/wrong) |
| 200 | Up to user to use delete [] on these arrays. */ |
| 201 | COINLIBAPI double * COINLINKAGE Clp_infeasibilityRay(Clp_Simplex * model); |
| 202 | COINLIBAPI double * COINLINKAGE Clp_unboundedRay(Clp_Simplex * model); |
| 203 | /** See if status array exists (partly for OsiClp) */ |
| 204 | COINLIBAPI int COINLINKAGE Clp_statusExists(Clp_Simplex * model); |
| 205 | /** Return address of status array (char[numberRows+numberColumns]) */ |
| 206 | COINLIBAPI unsigned char * COINLINKAGE Clp_statusArray(Clp_Simplex * model); |
| 207 | /** Copy in status vector */ |
| 208 | COINLIBAPI void COINLINKAGE Clp_copyinStatus(Clp_Simplex * model, const unsigned char * statusArray); |
| 209 | /* status values are as in ClpSimplex.hpp i.e. 0 - free, 1 basic, 2 at upper, |
| 210 | 3 at lower, 4 superbasic, (5 fixed) */ |
| 211 | /* Get variable basis info */ |
| 212 | COINLIBAPI int COINLINKAGE Clp_getColumnStatus(Clp_Simplex * model, int sequence); |
| 213 | /* Get row basis info */ |
| 214 | COINLIBAPI int COINLINKAGE Clp_getRowStatus(Clp_Simplex * model, int sequence); |
| 215 | /* Set variable basis info (and value if at bound) */ |
| 216 | COINLIBAPI void COINLINKAGE Clp_setColumnStatus(Clp_Simplex * model, |
| 217 | int sequence, int value); |
| 218 | /* Set row basis info (and value if at bound) */ |
| 219 | COINLIBAPI void COINLINKAGE Clp_setRowStatus(Clp_Simplex * model, |
| 220 | int sequence, int value); |
| 221 | |
| 222 | /** User pointer for whatever reason */ |
| 223 | COINLIBAPI void COINLINKAGE Clp_setUserPointer (Clp_Simplex * model, void * pointer); |
| 224 | COINLIBAPI void * COINLINKAGE Clp_getUserPointer (Clp_Simplex * model); |
| 225 | /*@}*/ |
| 226 | /**@name Message handling. Call backs are handled by ONE function */ |
| 227 | /*@{*/ |
| 228 | /** Pass in Callback function. |
| 229 | Message numbers up to 1000000 are Clp, Coin ones have 1000000 added */ |
| 230 | COINLIBAPI void COINLINKAGE Clp_registerCallBack(Clp_Simplex * model, |
| 231 | clp_callback userCallBack); |
| 232 | /** Unset Callback function */ |
| 233 | COINLIBAPI void COINLINKAGE Clp_clearCallBack(Clp_Simplex * model); |
| 234 | /** Amount of print out: |
| 235 | 0 - none |
| 236 | 1 - just final |
| 237 | 2 - just factorizations |
| 238 | 3 - as 2 plus a bit more |
| 239 | 4 - verbose |
| 240 | above that 8,16,32 etc just for selective debug |
| 241 | */ |
| 242 | COINLIBAPI void COINLINKAGE Clp_setLogLevel(Clp_Simplex * model, int value); |
| 243 | COINLIBAPI int COINLINKAGE Clp_logLevel(Clp_Simplex * model); |
| 244 | /** length of names (0 means no names0 */ |
| 245 | COINLIBAPI int COINLINKAGE Clp_lengthNames(Clp_Simplex * model); |
| 246 | /** Fill in array (at least lengthNames+1 long) with a row name */ |
| 247 | COINLIBAPI void COINLINKAGE Clp_rowName(Clp_Simplex * model, int iRow, char * name); |
| 248 | /** Fill in array (at least lengthNames+1 long) with a column name */ |
| 249 | COINLIBAPI void COINLINKAGE Clp_columnName(Clp_Simplex * model, int iColumn, char * name); |
| 250 | |
| 251 | /*@}*/ |
| 252 | |
| 253 | |
| 254 | /**@name Functions most useful to user */ |
| 255 | /*@{*/ |
| 256 | /** General solve algorithm which can do presolve. |
| 257 | See ClpSolve.hpp for options |
| 258 | */ |
| 259 | COINLIBAPI int COINLINKAGE Clp_initialSolve(Clp_Simplex * model); |
| 260 | /** Dual initial solve */ |
| 261 | COINLIBAPI int COINLINKAGE Clp_initialDualSolve(Clp_Simplex * model); |
| 262 | /** Primal initial solve */ |
| 263 | COINLIBAPI int COINLINKAGE Clp_initialPrimalSolve(Clp_Simplex * model); |
| 264 | /** Barrier initial solve */ |
| 265 | COINLIBAPI int COINLINKAGE Clp_initialBarrierSolve(Clp_Simplex * model); |
| 266 | /** Barrier initial solve, no crossover */ |
| 267 | COINLIBAPI int COINLINKAGE Clp_initialBarrierNoCrossSolve(Clp_Simplex * model); |
| 268 | /** Dual algorithm - see ClpSimplexDual.hpp for method */ |
| 269 | COINLIBAPI int COINLINKAGE Clp_dual(Clp_Simplex * model, int ifValuesPass); |
| 270 | /** Primal algorithm - see ClpSimplexPrimal.hpp for method */ |
| 271 | COINLIBAPI int COINLINKAGE Clp_primal(Clp_Simplex * model, int ifValuesPass); |
| 272 | #ifndef SLIM_CLP |
| 273 | /** Solve the problem with the idiot code */ |
| 274 | COINLIBAPI void COINLINKAGE Clp_idiot(Clp_Simplex * model, int tryhard); |
| 275 | #endif |
| 276 | /** Sets or unsets scaling, 0 -off, 1 equilibrium, 2 geometric, 3, auto, 4 dynamic(later) */ |
| 277 | COINLIBAPI void COINLINKAGE Clp_scaling(Clp_Simplex * model, int mode); |
| 278 | /** Gets scalingFlag */ |
| 279 | COINLIBAPI int COINLINKAGE Clp_scalingFlag(Clp_Simplex * model); |
| 280 | /** Crash - at present just aimed at dual, returns |
| 281 | -2 if dual preferred and crash basis created |
| 282 | -1 if dual preferred and all slack basis preferred |
| 283 | 0 if basis going in was not all slack |
| 284 | 1 if primal preferred and all slack basis preferred |
| 285 | 2 if primal preferred and crash basis created. |
| 286 | |
| 287 | if gap between bounds <="gap" variables can be flipped |
| 288 | |
| 289 | If "pivot" is |
| 290 | 0 No pivoting (so will just be choice of algorithm) |
| 291 | 1 Simple pivoting e.g. gub |
| 292 | 2 Mini iterations |
| 293 | */ |
| 294 | COINLIBAPI int COINLINKAGE Clp_crash(Clp_Simplex * model, double gap, int pivot); |
| 295 | /*@}*/ |
| 296 | |
| 297 | |
| 298 | /**@name most useful gets and sets */ |
| 299 | /*@{*/ |
| 300 | /** If problem is primal feasible */ |
| 301 | COINLIBAPI int COINLINKAGE Clp_primalFeasible(Clp_Simplex * model); |
| 302 | /** If problem is dual feasible */ |
| 303 | COINLIBAPI int COINLINKAGE Clp_dualFeasible(Clp_Simplex * model); |
| 304 | /** Dual bound */ |
| 305 | COINLIBAPI double COINLINKAGE Clp_dualBound(Clp_Simplex * model); |
| 306 | COINLIBAPI void COINLINKAGE Clp_setDualBound(Clp_Simplex * model, double value); |
| 307 | /** Infeasibility cost */ |
| 308 | COINLIBAPI double COINLINKAGE Clp_infeasibilityCost(Clp_Simplex * model); |
| 309 | COINLIBAPI void COINLINKAGE Clp_setInfeasibilityCost(Clp_Simplex * model, double value); |
| 310 | /** Perturbation: |
| 311 | 50 - switch on perturbation |
| 312 | 100 - auto perturb if takes too long (1.0e-6 largest nonzero) |
| 313 | 101 - we are perturbed |
| 314 | 102 - don't try perturbing again |
| 315 | default is 100 |
| 316 | others are for playing |
| 317 | */ |
| 318 | COINLIBAPI int COINLINKAGE Clp_perturbation(Clp_Simplex * model); |
| 319 | COINLIBAPI void COINLINKAGE Clp_setPerturbation(Clp_Simplex * model, int value); |
| 320 | /** Current (or last) algorithm */ |
| 321 | COINLIBAPI int COINLINKAGE Clp_algorithm(Clp_Simplex * model); |
| 322 | /** Set algorithm */ |
| 323 | COINLIBAPI void COINLINKAGE Clp_setAlgorithm(Clp_Simplex * model, int value); |
| 324 | /** Sum of dual infeasibilities */ |
| 325 | COINLIBAPI double COINLINKAGE Clp_sumDualInfeasibilities(Clp_Simplex * model); |
| 326 | /** Number of dual infeasibilities */ |
| 327 | COINLIBAPI int COINLINKAGE Clp_numberDualInfeasibilities(Clp_Simplex * model); |
| 328 | /** Sum of primal infeasibilities */ |
| 329 | COINLIBAPI double COINLINKAGE Clp_sumPrimalInfeasibilities(Clp_Simplex * model); |
| 330 | /** Number of primal infeasibilities */ |
| 331 | COINLIBAPI int COINLINKAGE Clp_numberPrimalInfeasibilities(Clp_Simplex * model); |
| 332 | /** Save model to file, returns 0 if success. This is designed for |
| 333 | use outside algorithms so does not save iterating arrays etc. |
| 334 | It does not save any messaging information. |
| 335 | Does not save scaling values. |
| 336 | It does not know about all types of virtual functions. |
| 337 | */ |
| 338 | COINLIBAPI int COINLINKAGE Clp_saveModel(Clp_Simplex * model, const char * fileName); |
| 339 | /** Restore model from file, returns 0 if success, |
| 340 | deletes current model */ |
| 341 | COINLIBAPI int COINLINKAGE Clp_restoreModel(Clp_Simplex * model, const char * fileName); |
| 342 | |
| 343 | /** Just check solution (for external use) - sets sum of |
| 344 | infeasibilities etc */ |
| 345 | COINLIBAPI void COINLINKAGE Clp_checkSolution(Clp_Simplex * model); |
| 346 | /*@}*/ |
| 347 | |
| 348 | /******************** End of most useful part **************/ |
| 349 | /**@name gets and sets - some synonyms */ |
| 350 | /*@{*/ |
| 351 | /** Number of rows */ |
| 352 | COINLIBAPI int COINLINKAGE Clp_getNumRows(Clp_Simplex * model); |
| 353 | /** Number of columns */ |
| 354 | COINLIBAPI int COINLINKAGE Clp_getNumCols(Clp_Simplex * model); |
| 355 | /** Number of iterations */ |
| 356 | COINLIBAPI int COINLINKAGE Clp_getIterationCount(Clp_Simplex * model); |
| 357 | /** Are there a numerical difficulties? */ |
| 358 | COINLIBAPI int COINLINKAGE Clp_isAbandoned(Clp_Simplex * model); |
| 359 | /** Is optimality proven? */ |
| 360 | COINLIBAPI int COINLINKAGE Clp_isProvenOptimal(Clp_Simplex * model); |
| 361 | /** Is primal infeasiblity proven? */ |
| 362 | COINLIBAPI int COINLINKAGE Clp_isProvenPrimalInfeasible(Clp_Simplex * model); |
| 363 | /** Is dual infeasiblity proven? */ |
| 364 | COINLIBAPI int COINLINKAGE Clp_isProvenDualInfeasible(Clp_Simplex * model); |
| 365 | /** Is the given primal objective limit reached? */ |
| 366 | COINLIBAPI int COINLINKAGE Clp_isPrimalObjectiveLimitReached(Clp_Simplex * model) ; |
| 367 | /** Is the given dual objective limit reached? */ |
| 368 | COINLIBAPI int COINLINKAGE Clp_isDualObjectiveLimitReached(Clp_Simplex * model) ; |
| 369 | /** Iteration limit reached? */ |
| 370 | COINLIBAPI int COINLINKAGE Clp_isIterationLimitReached(Clp_Simplex * model); |
| 371 | /** Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore */ |
| 372 | COINLIBAPI double COINLINKAGE Clp_getObjSense(Clp_Simplex * model); |
| 373 | /** Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore */ |
| 374 | COINLIBAPI void COINLINKAGE Clp_setObjSense(Clp_Simplex * model, double objsen); |
| 375 | /** Primal row solution */ |
| 376 | COINLIBAPI const double * COINLINKAGE Clp_getRowActivity(Clp_Simplex * model); |
| 377 | /** Primal column solution */ |
| 378 | COINLIBAPI const double * COINLINKAGE Clp_getColSolution(Clp_Simplex * model); |
| 379 | COINLIBAPI void COINLINKAGE Clp_setColSolution(Clp_Simplex * model, const double * input); |
| 380 | /** Dual row solution */ |
| 381 | COINLIBAPI const double * COINLINKAGE Clp_getRowPrice(Clp_Simplex * model); |
| 382 | /** Reduced costs */ |
| 383 | COINLIBAPI const double * COINLINKAGE Clp_getReducedCost(Clp_Simplex * model); |
| 384 | /** Row lower */ |
| 385 | COINLIBAPI const double* COINLINKAGE Clp_getRowLower(Clp_Simplex * model); |
| 386 | /** Row upper */ |
| 387 | COINLIBAPI const double* COINLINKAGE Clp_getRowUpper(Clp_Simplex * model); |
| 388 | /** Objective */ |
| 389 | COINLIBAPI const double * COINLINKAGE Clp_getObjCoefficients(Clp_Simplex * model); |
| 390 | /** Column Lower */ |
| 391 | COINLIBAPI const double * COINLINKAGE Clp_getColLower(Clp_Simplex * model); |
| 392 | /** Column Upper */ |
| 393 | COINLIBAPI const double * COINLINKAGE Clp_getColUpper(Clp_Simplex * model); |
| 394 | /** Objective value */ |
| 395 | COINLIBAPI double COINLINKAGE Clp_getObjValue(Clp_Simplex * model); |
| 396 | /** Print model for debugging purposes */ |
| 397 | COINLIBAPI void COINLINKAGE Clp_printModel(Clp_Simplex * model, const char * prefix); |
| 398 | /* Small element value - elements less than this set to zero, |
| 399 | default is 1.0e-20 */ |
| 400 | COINLIBAPI double COINLINKAGE Clp_getSmallElementValue(Clp_Simplex * model); |
| 401 | COINLIBAPI void COINLINKAGE Clp_setSmallElementValue(Clp_Simplex * model, double value); |
| 402 | /*@}*/ |
| 403 | #ifdef __cplusplus |
| 404 | } |
| 405 | #endif |
| 406 | #endif |
| 407 | |