[1271] | 1 | /* $Id: Cbc_C_Interface.h 2478 2019-01-28 13:40:56Z unxusr $ */ |
---|
[1573] | 2 | /* |
---|
| 3 | Copyright (C) 2004 International Business Machines Corporation and others. |
---|
| 4 | All Rights Reserved. |
---|
| 5 | |
---|
| 6 | This code is licensed under the terms of the Eclipse Public License (EPL). |
---|
| 7 | */ |
---|
[2] | 8 | #ifndef CbcModelC_H |
---|
| 9 | #define CbcModelC_H |
---|
| 10 | |
---|
| 11 | /* include all defines and ugly stuff */ |
---|
| 12 | #include "Coin_C_defines.h" |
---|
[2021] | 13 | #include <stddef.h> |
---|
[2] | 14 | |
---|
[2037] | 15 | /* |
---|
[2457] | 16 | * Original version contributed by Bob Entriken, |
---|
[2037] | 17 | * significantly updated by Miles Lubin. |
---|
[2457] | 18 | * 2018: several updates by Haroldo |
---|
| 19 | */ |
---|
[2] | 20 | |
---|
| 21 | #ifdef __cplusplus |
---|
[1286] | 22 | extern "C" { |
---|
[2] | 23 | #endif |
---|
| 24 | |
---|
[2457] | 25 | /** Current version of Cbc */ |
---|
[2464] | 26 | COINLIBAPI const char *COINLINKAGE Cbc_getVersion(void); |
---|
[703] | 27 | |
---|
[2457] | 28 | /** \name Problem creation and modification routines */ |
---|
| 29 | //@{ |
---|
| 30 | |
---|
[2464] | 31 | /** @brief Creates an empty problem */ |
---|
| 32 | COINLIBAPI Cbc_Model *COINLINKAGE |
---|
| 33 | Cbc_newModel(void); |
---|
[2457] | 34 | |
---|
[2464] | 35 | /** @brief Sets problem name. |
---|
[2457] | 36 | * |
---|
| 37 | * @param model problem object |
---|
| 38 | * @param array string with problem name |
---|
| 39 | **/ |
---|
[2464] | 40 | COINLIBAPI int COINLINKAGE |
---|
| 41 | Cbc_setProblemName(Cbc_Model *model, const char *array); |
---|
[2457] | 42 | |
---|
[2464] | 43 | /** @brief Creates a new column |
---|
[2457] | 44 | * |
---|
| 45 | * Creates a new column (variable) |
---|
| 46 | * |
---|
| 47 | * @param model problem object |
---|
| 48 | * @param name variable name |
---|
| 49 | * @param lb column lower bound |
---|
| 50 | * @param ub column upper bound |
---|
| 51 | * @param obj objective function coefficient |
---|
| 52 | * @param isInteger 1 if variable is integral, 0 otherwise |
---|
| 53 | * @param nz number of rows (constraints) where this column appears, can be 0 if constraints will be added later |
---|
| 54 | * @param rows index of rows where this column appears, NULL if rows will be added later |
---|
| 55 | * @param coefs coefficients that this column appears in its rows, NULL if rows will be added later |
---|
| 56 | ***/ |
---|
[2464] | 57 | COINLIBAPI void COINLINKAGE |
---|
| 58 | Cbc_addCol(Cbc_Model *model, const char *name, double lb, |
---|
| 59 | double ub, double obj, char isInteger, |
---|
| 60 | int nz, int *rows, double *coefs); |
---|
[2457] | 61 | |
---|
[2464] | 62 | /** @brief Adds a new row |
---|
[2457] | 63 | * |
---|
| 64 | * Adds a new row (linear constraint) to the problem |
---|
| 65 | * |
---|
| 66 | * @param model problem object |
---|
| 67 | * @param name constraint name |
---|
| 68 | * @param nz number of variables with non-zero coefficients in this row |
---|
| 69 | * @param cols index of variables that appear in this row |
---|
| 70 | * @param coefs cofficients that that variables appear |
---|
| 71 | * @param sense constraint sense: L if <=, G if >=, E if =, R if ranged and N if free |
---|
| 72 | * @param rhs right hand size |
---|
| 73 | * */ |
---|
[2464] | 74 | COINLIBAPI void COINLINKAGE |
---|
| 75 | Cbc_addRow(Cbc_Model *model, const char *name, int nz, |
---|
| 76 | const int *cols, const double *coefs, char sense, double rhs); |
---|
[2] | 77 | |
---|
[2464] | 78 | /** @brief Add SOS constraints to the model using row-order matrix */ |
---|
| 79 | COINLIBAPI void COINLINKAGE |
---|
| 80 | Cbc_addSOS(Cbc_Model *model, int numRows, const int *rowStarts, |
---|
| 81 | const int *colIndices, const double *weights, const int type); |
---|
| 82 | |
---|
| 83 | /** Loads a problem (the constraints on the |
---|
[1286] | 84 | rows are given by lower and upper bounds). If a pointer is NULL then the |
---|
| 85 | following values are the default: |
---|
| 86 | <ul> |
---|
| 87 | <li> <code>colub</code>: all columns have upper bound infinity |
---|
| 88 | <li> <code>collb</code>: all columns have lower bound 0 |
---|
| 89 | <li> <code>rowub</code>: all rows have upper bound infinity |
---|
| 90 | <li> <code>rowlb</code>: all rows have lower bound -infinity |
---|
| 91 | <li> <code>obj</code>: all variables have 0 objective coefficient |
---|
| 92 | </ul> |
---|
[2] | 93 | |
---|
[2021] | 94 | The constraint matrix is |
---|
| 95 | given in standard compressed sparse column (without gaps). |
---|
| 96 | <ul> |
---|
| 97 | <li> <code>start[i]</code> stores the starting index of the ith column |
---|
| 98 | <li> <code>index[k]</code> stores the row index of the kth nonzero element |
---|
| 99 | <li> <code>value[k]</code> stores the coefficient of the kth nonzero element |
---|
| 100 | </ul> |
---|
[1286] | 101 | */ |
---|
[2464] | 102 | COINLIBAPI void COINLINKAGE |
---|
| 103 | Cbc_loadProblem(Cbc_Model *model, const int numcols, const int numrows, |
---|
| 104 | const CoinBigIndex *start, const int *index, |
---|
| 105 | const double *value, |
---|
| 106 | const double *collb, const double *colub, |
---|
| 107 | const double *obj, |
---|
| 108 | const double *rowlb, const double *rowub); |
---|
[2457] | 109 | |
---|
[2464] | 110 | /** @brief Set the name of a column |
---|
[2457] | 111 | * |
---|
| 112 | * @param model problem object |
---|
| 113 | * @param iColumn column index |
---|
| 114 | * @param column name |
---|
| 115 | **/ |
---|
[2464] | 116 | COINLIBAPI void COINLINKAGE |
---|
| 117 | Cbc_setColName(Cbc_Model *model, int iColumn, const char *name); |
---|
[2457] | 118 | |
---|
[2464] | 119 | /** @brief Set the name of a row |
---|
[2457] | 120 | * |
---|
| 121 | * @param model problem object |
---|
| 122 | * @param iRow row index |
---|
| 123 | * @param name row name |
---|
| 124 | **/ |
---|
[2464] | 125 | COINLIBAPI void COINLINKAGE |
---|
| 126 | Cbc_setRowName(Cbc_Model *model, int iRow, const char *name); |
---|
[2457] | 127 | |
---|
[2464] | 128 | /** @brief Sets optimization direction |
---|
[2457] | 129 | * |
---|
| 130 | * @param model problem object |
---|
| 131 | * @param sense: direction of optimization (1 - minimize, -1 - maximize, 0 - ignore) |
---|
| 132 | **/ |
---|
[2464] | 133 | COINLIBAPI void COINLINKAGE |
---|
| 134 | Cbc_setObjSense(Cbc_Model *model, double sense); |
---|
[2457] | 135 | |
---|
[2464] | 136 | /** @brief Set the lower bound of a single constraint |
---|
[2457] | 137 | * |
---|
| 138 | * @param model problem object |
---|
| 139 | * @param index row index |
---|
| 140 | * @param value new row lower bound |
---|
| 141 | **/ |
---|
[2464] | 142 | COINLIBAPI void COINLINKAGE |
---|
| 143 | Cbc_setRowLower(Cbc_Model *model, int index, double value); |
---|
[2457] | 144 | |
---|
[2464] | 145 | /** @brief Set the upper bound of a single constraint |
---|
[2457] | 146 | * |
---|
| 147 | * @param model problem object |
---|
| 148 | * @param index row index |
---|
| 149 | * @param value new row upper bound |
---|
| 150 | **/ |
---|
[2464] | 151 | COINLIBAPI void COINLINKAGE |
---|
| 152 | Cbc_setRowUpper(Cbc_Model *model, int index, double value); |
---|
[2457] | 153 | |
---|
[2464] | 154 | /** @brief Set the objective coefficient of a single variable |
---|
[2457] | 155 | * |
---|
| 156 | * @param model problem object |
---|
| 157 | * @param index variable index |
---|
| 158 | * @param value new objective function coefficient for this variable |
---|
| 159 | **/ |
---|
[2464] | 160 | COINLIBAPI void COINLINKAGE |
---|
| 161 | Cbc_setObjCoeff(Cbc_Model *model, int index, double value); |
---|
[2457] | 162 | |
---|
[2464] | 163 | /** @brief Set the lower bound of a single variable |
---|
[2457] | 164 | * |
---|
| 165 | * @param model problem object |
---|
| 166 | * @param index variable index |
---|
| 167 | * @param value variable lower bound |
---|
| 168 | **/ |
---|
[2464] | 169 | COINLIBAPI void COINLINKAGE |
---|
| 170 | Cbc_setColLower(Cbc_Model *model, int index, double value); |
---|
[2457] | 171 | |
---|
[2464] | 172 | /** @brief Set the upper bound of a single variable |
---|
[2457] | 173 | * |
---|
| 174 | * @param model problem object |
---|
| 175 | * @param index variable index |
---|
| 176 | * @param value new variable upper bound |
---|
| 177 | **/ |
---|
[2464] | 178 | COINLIBAPI void COINLINKAGE |
---|
| 179 | Cbc_setColUpper(Cbc_Model *model, int index, double value); |
---|
| 180 | |
---|
| 181 | /** @brief Set this variable to be continuous |
---|
[2457] | 182 | * |
---|
| 183 | * @param model problem object |
---|
| 184 | * @param iColumn column index |
---|
| 185 | **/ |
---|
[2464] | 186 | COINLIBAPI void COINLINKAGE |
---|
| 187 | Cbc_setContinuous(Cbc_Model *model, int iColumn); |
---|
[2457] | 188 | |
---|
[2464] | 189 | /** @brief Set this variable to be integer |
---|
[2457] | 190 | * |
---|
| 191 | * @param model problem object |
---|
| 192 | * @param iColumn column index |
---|
| 193 | **/ |
---|
[2464] | 194 | COINLIBAPI void COINLINKAGE |
---|
| 195 | Cbc_setInteger(Cbc_Model *model, int iColumn); |
---|
[2457] | 196 | |
---|
[2464] | 197 | /** @brief Cbc_Model destructor */ |
---|
| 198 | COINLIBAPI void COINLINKAGE |
---|
| 199 | Cbc_deleteModel(Cbc_Model *model); |
---|
[2457] | 200 | |
---|
[2464] | 201 | /** @brief Enter initial feasible solution |
---|
[2462] | 202 | * |
---|
| 203 | * Enter an initial feasible solution. Only the non-zero main |
---|
| 204 | * binary/integer decision variables need to be informed. |
---|
| 205 | * Auxiliary and/or continuous variables are computed |
---|
| 206 | * automatically. |
---|
| 207 | * |
---|
| 208 | * @param model problem object |
---|
| 209 | * @param count number of variables |
---|
| 210 | * @param colNames names of variables |
---|
| 211 | * @param colValues variable values |
---|
| 212 | * |
---|
| 213 | **/ |
---|
[2464] | 214 | COINLIBAPI void COINLINKAGE |
---|
| 215 | Cbc_setMIPStart(Cbc_Model *model, int count, const char **colNames, const double colValues[]); |
---|
[2462] | 216 | |
---|
[2464] | 217 | /** @brief Enter initial feasible solution |
---|
[2463] | 218 | * |
---|
| 219 | * Enter an initial feasible solution. Only the non-zero main |
---|
| 220 | * binary/integer decision variables need to be informed. |
---|
| 221 | * Auxiliary and/or continuous variables are computed |
---|
| 222 | * automatically. Same as setMIPStart but using variable indexes. |
---|
| 223 | * |
---|
| 224 | * @param model problem object |
---|
| 225 | * @param count number of variables |
---|
| 226 | * @param colIdxs indexes of variables |
---|
| 227 | * @param colValues variable values |
---|
| 228 | * |
---|
| 229 | **/ |
---|
[2464] | 230 | COINLIBAPI void COINLINKAGE |
---|
| 231 | Cbc_setMIPStartI(Cbc_Model *model, int count, const int colIdxs[], const double colValues[]); |
---|
[2463] | 232 | |
---|
[2464] | 233 | /** @brief Creates a copy of the current model |
---|
[2461] | 234 | * |
---|
| 235 | * @param model problem object |
---|
| 236 | * @return model copy |
---|
| 237 | **/ |
---|
[2464] | 238 | COINLIBAPI Cbc_Model *COINLINKAGE |
---|
| 239 | Cbc_clone(Cbc_Model *model); |
---|
[2461] | 240 | |
---|
[2464] | 241 | //@} |
---|
[2461] | 242 | |
---|
| 243 | /** \name Routines to query problem contents |
---|
| 244 | */ |
---|
| 245 | //@{ |
---|
[2457] | 246 | |
---|
[2464] | 247 | /** @brief Queries problem name |
---|
[2457] | 248 | * |
---|
| 249 | * @param model problem object |
---|
| 250 | * @param maxNumberCharacters space in string array |
---|
| 251 | * @param array string where problem name will be saved |
---|
| 252 | **/ |
---|
[2464] | 253 | COINLIBAPI void COINLINKAGE |
---|
| 254 | Cbc_problemName(Cbc_Model *model, int maxNumberCharacters, char *array); |
---|
[2021] | 255 | |
---|
[2464] | 256 | /** @brief Number of nonzero elements in constraint matrix |
---|
[2457] | 257 | * |
---|
| 258 | * @param model problem object |
---|
| 259 | * @return number of non-zero entries in constraint matrix |
---|
| 260 | **/ |
---|
[2464] | 261 | COINLIBAPI int COINLINKAGE |
---|
| 262 | Cbc_getNumElements(Cbc_Model *model); |
---|
[2457] | 263 | |
---|
[2464] | 264 | /** @brief Number of variables in the model |
---|
[2457] | 265 | * @param model problem object |
---|
| 266 | * @return number of columns (variables) |
---|
| 267 | **/ |
---|
[2464] | 268 | COINLIBAPI int COINLINKAGE |
---|
| 269 | Cbc_getNumCols(Cbc_Model *model); |
---|
[2457] | 270 | |
---|
[2464] | 271 | /** @brief Number of integer variables in the model |
---|
[2457] | 272 | * |
---|
| 273 | * @param model problem object |
---|
| 274 | * @return number of integer variables in this model |
---|
| 275 | **/ |
---|
[2464] | 276 | COINLIBAPI int COINLINKAGE |
---|
| 277 | Cbc_getNumIntegers(Cbc_Model *model); |
---|
[2021] | 278 | |
---|
[2464] | 279 | /** Number of constraints in the model |
---|
[2457] | 280 | * @param model problem object |
---|
| 281 | * @return number of rows (constraints) in the model |
---|
| 282 | **/ |
---|
[2464] | 283 | COINLIBAPI int COINLINKAGE |
---|
| 284 | Cbc_getNumRows(Cbc_Model *model); |
---|
| 285 | |
---|
| 286 | /** @brief Queries row name |
---|
[2457] | 287 | * |
---|
| 288 | * @param model problem object |
---|
| 289 | * @param row index |
---|
| 290 | * @param name string where row name will be stored |
---|
| 291 | * @param string where row name will be stored |
---|
| 292 | **/ |
---|
[2464] | 293 | COINLIBAPI void COINLINKAGE |
---|
| 294 | Cbc_getRowName(Cbc_Model *model, int iRow, char *name, size_t maxLength); |
---|
[2457] | 295 | |
---|
[2464] | 296 | /** Queries column name |
---|
[2457] | 297 | * |
---|
| 298 | * @param model problem object |
---|
| 299 | * @param iColumn column index |
---|
| 300 | * @param name where name will be stored |
---|
| 301 | * @param maxLength maximum length of name string |
---|
| 302 | **/ |
---|
[2464] | 303 | COINLIBAPI void COINLINKAGE |
---|
| 304 | Cbc_getColName(Cbc_Model *model, int iColumn, char *name, size_t maxLength); |
---|
[2457] | 305 | |
---|
[2464] | 306 | /** @brief Number of non-zero entries in a row |
---|
[2457] | 307 | * |
---|
| 308 | * @param model problem object |
---|
| 309 | * @param row row index |
---|
| 310 | * @return number of non-zero entries in row |
---|
| 311 | **/ |
---|
[2464] | 312 | COINLIBAPI int COINLINKAGE |
---|
| 313 | Cbc_getRowNz(Cbc_Model *model, int row); |
---|
[2457] | 314 | |
---|
[2464] | 315 | /** @brief Indices of variables that appear on a row |
---|
[2457] | 316 | * |
---|
| 317 | * @param model problem object |
---|
| 318 | * @param row row index |
---|
| 319 | * @return vector with indexes of columns that appear on this row |
---|
| 320 | **/ |
---|
[2464] | 321 | COINLIBAPI const int *COINLINKAGE |
---|
| 322 | Cbc_getRowIndices(Cbc_Model *model, int row); |
---|
[2457] | 323 | |
---|
[2464] | 324 | /** @brief Coefficients of variables that appear on this row |
---|
[2457] | 325 | * |
---|
| 326 | * @param model problem object |
---|
| 327 | * @param row row index |
---|
| 328 | * @return coefficients of variables that appear on this row |
---|
| 329 | **/ |
---|
[2464] | 330 | COINLIBAPI const double *COINLINKAGE |
---|
| 331 | Cbc_getRowCoeffs(Cbc_Model *model, int row); |
---|
[2457] | 332 | |
---|
[2464] | 333 | /** @brief Number of non-zero entries in a column |
---|
[2457] | 334 | * |
---|
| 335 | * @param model problem object |
---|
| 336 | * @param col column index |
---|
| 337 | * @return numbef of rows that this column appears |
---|
| 338 | **/ |
---|
[2464] | 339 | COINLIBAPI int COINLINKAGE |
---|
| 340 | Cbc_getColNz(Cbc_Model *model, int col); |
---|
[2457] | 341 | |
---|
[2464] | 342 | /** @brief Indices of rows that a column appears |
---|
[2457] | 343 | * |
---|
| 344 | * @param model problem object |
---|
| 345 | * @param col column index |
---|
| 346 | * @return indices of rows that this column appears |
---|
| 347 | **/ |
---|
[2464] | 348 | COINLIBAPI const int *COINLINKAGE |
---|
| 349 | Cbc_getColIndices(Cbc_Model *model, int col); |
---|
[2457] | 350 | |
---|
[2464] | 351 | /** @brief Coefficients that a column appear in rows |
---|
[2457] | 352 | * |
---|
| 353 | * @param model problem object |
---|
| 354 | * @param col column index |
---|
| 355 | * @return coefficients of this column in rows |
---|
| 356 | **/ |
---|
[2464] | 357 | COINLIBAPI const double *COINLINKAGE |
---|
| 358 | Cbc_getColCoeffs(Cbc_Model *model, int col); |
---|
[2457] | 359 | |
---|
[2464] | 360 | /** @brief Right hand side of a row |
---|
[2457] | 361 | * |
---|
| 362 | * @param model problem object |
---|
| 363 | * @param row row index |
---|
| 364 | * @return row right hand side |
---|
| 365 | **/ |
---|
[2464] | 366 | COINLIBAPI double COINLINKAGE |
---|
| 367 | Cbc_getRowRHS(Cbc_Model *model, int row); |
---|
[2457] | 368 | |
---|
[2464] | 369 | /** @brief Sense a row |
---|
[2457] | 370 | * @param model problem object |
---|
| 371 | * @param row row index |
---|
| 372 | * @return row sense: E for =, L for <=, G for >= and R for ranged row |
---|
| 373 | **/ |
---|
[2464] | 374 | COINLIBAPI char COINLINKAGE |
---|
| 375 | Cbc_getRowSense(Cbc_Model *model, int row); |
---|
| 376 | |
---|
| 377 | /** @brief Direction of optimization |
---|
[2457] | 378 | * |
---|
| 379 | * @param model problem object |
---|
| 380 | * @return Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore) |
---|
| 381 | **/ |
---|
[2464] | 382 | COINLIBAPI double COINLINKAGE |
---|
| 383 | Cbc_getObjSense(Cbc_Model *model); |
---|
[2457] | 384 | |
---|
[2464] | 385 | /** @brief Constraint lower bounds |
---|
[2457] | 386 | * |
---|
| 387 | * @param model problem object |
---|
| 388 | * @return vector with lower bounds of constraints |
---|
| 389 | **/ |
---|
[2464] | 390 | COINLIBAPI const double *COINLINKAGE |
---|
| 391 | Cbc_getRowLower(Cbc_Model *model); |
---|
[2457] | 392 | |
---|
[2464] | 393 | /** @brief Constraint upper bounds |
---|
[2457] | 394 | * |
---|
| 395 | * @param model problem object |
---|
| 396 | * @return constraint upper bounds |
---|
| 397 | **/ |
---|
[2464] | 398 | COINLIBAPI const double *COINLINKAGE |
---|
| 399 | Cbc_getRowUpper(Cbc_Model *model); |
---|
[2457] | 400 | |
---|
[2464] | 401 | /** @brief Objective vector |
---|
[2457] | 402 | * |
---|
| 403 | * @param model problem object |
---|
| 404 | * @return vector with coefficients of variables in the objective function |
---|
| 405 | **/ |
---|
[2464] | 406 | COINLIBAPI const double *COINLINKAGE |
---|
| 407 | Cbc_getObjCoefficients(Cbc_Model *model); |
---|
[2457] | 408 | |
---|
[2464] | 409 | /** @brief Variable lower bounds |
---|
[2457] | 410 | * |
---|
| 411 | * @param model problem object |
---|
| 412 | * @return vector with lower bounds of variables |
---|
| 413 | **/ |
---|
[2464] | 414 | COINLIBAPI const double *COINLINKAGE |
---|
| 415 | Cbc_getColLower(Cbc_Model *model); |
---|
[2457] | 416 | |
---|
[2464] | 417 | /** @brief Variable upper bounds |
---|
[2457] | 418 | * |
---|
| 419 | * @param model problem object |
---|
| 420 | * @return vector with column upper bounds |
---|
| 421 | **/ |
---|
[2464] | 422 | COINLIBAPI const double *COINLINKAGE |
---|
| 423 | Cbc_getColUpper(Cbc_Model *model); |
---|
[2457] | 424 | |
---|
[2464] | 425 | /** @brief Determine whether the ith variable is integer restricted |
---|
[2457] | 426 | * |
---|
| 427 | * @param model problem object |
---|
| 428 | * @param i variable index |
---|
| 429 | * @return 1 if variable is integer, 0 otherwise |
---|
| 430 | **/ |
---|
[2464] | 431 | COINLIBAPI int COINLINKAGE |
---|
| 432 | Cbc_isInteger(Cbc_Model *model, int i); |
---|
[2457] | 433 | |
---|
[2473] | 434 | |
---|
[2464] | 435 | //@} |
---|
| 436 | |
---|
[2457] | 437 | /** \name Routines to load and save problems from disk |
---|
| 438 | */ |
---|
| 439 | //@{ |
---|
| 440 | |
---|
[2464] | 441 | /** @brief Read an mps file from the given filename |
---|
[2457] | 442 | * |
---|
| 443 | * @param model problem object |
---|
| 444 | * @param fileName file name |
---|
| 445 | **/ |
---|
[2464] | 446 | COINLIBAPI int COINLINKAGE |
---|
| 447 | Cbc_readMps(Cbc_Model *model, const char *filename); |
---|
[2457] | 448 | |
---|
[2464] | 449 | /** @brief Read an lp file from the given filename |
---|
[2457] | 450 | * |
---|
| 451 | * @param model problem object |
---|
| 452 | * @param fileName file name |
---|
| 453 | **/ |
---|
[2464] | 454 | COINLIBAPI int COINLINKAGE |
---|
| 455 | Cbc_readLp(Cbc_Model *model, const char *filename); |
---|
[2457] | 456 | |
---|
[2464] | 457 | /** @brief Write an mps file from the given filename |
---|
[2457] | 458 | * |
---|
| 459 | * @param model problem object |
---|
| 460 | * @param fileName file name |
---|
| 461 | **/ |
---|
[2464] | 462 | COINLIBAPI void COINLINKAGE |
---|
| 463 | Cbc_writeMps(Cbc_Model *model, const char *filename); |
---|
[2457] | 464 | |
---|
[2464] | 465 | /** @brief Write an lp file from the given filename |
---|
[2457] | 466 | * |
---|
| 467 | * @param model problem object |
---|
| 468 | * @param fileName file name |
---|
| 469 | **/ |
---|
[2464] | 470 | COINLIBAPI void COINLINKAGE |
---|
| 471 | Cbc_writeLp(Cbc_Model *model, const char *filename); |
---|
| 472 | |
---|
[2457] | 473 | //@} |
---|
| 474 | |
---|
[2464] | 475 | /**@name Getting and setting model data |
---|
[2457] | 476 | Note that problem access and modification methods, |
---|
| 477 | such as getColLower and setColLower, |
---|
| 478 | are *not valid* after calling Cbc_solve(). |
---|
| 479 | Therefore it is not recommended to reuse a Cbc_Model |
---|
| 480 | object for multiple solves. A workaround is to call Cbc_clone() |
---|
| 481 | before solving. |
---|
| 482 | * */ |
---|
[2464] | 483 | /*@{*/ |
---|
[2457] | 484 | |
---|
[2464] | 485 | /** Provide an initial feasible solution to accelerate branch-and-bound |
---|
[2457] | 486 | Note that feasibility of the solution is *not* verified. |
---|
| 487 | */ |
---|
[2464] | 488 | COINLIBAPI void COINLINKAGE |
---|
| 489 | Cbc_setInitialSolution(Cbc_Model *model, const double *sol); |
---|
| 490 | /** "Column start" vector of constraint matrix. Same format as Cbc_loadProblem() */ |
---|
| 491 | COINLIBAPI const CoinBigIndex *COINLINKAGE |
---|
| 492 | Cbc_getVectorStarts(Cbc_Model *model); |
---|
| 493 | /** "Row index" vector of constraint matrix */ |
---|
| 494 | COINLIBAPI const int *COINLINKAGE |
---|
| 495 | Cbc_getIndices(Cbc_Model *model); |
---|
| 496 | /** Coefficient vector of constraint matrix */ |
---|
| 497 | COINLIBAPI const double *COINLINKAGE |
---|
| 498 | Cbc_getElements(Cbc_Model *model); |
---|
[2457] | 499 | |
---|
[2464] | 500 | /** Maximum lenght of a row or column name */ |
---|
| 501 | COINLIBAPI size_t COINLINKAGE |
---|
| 502 | Cbc_maxNameLength(Cbc_Model *model); |
---|
| 503 | /** Print the model */ |
---|
| 504 | COINLIBAPI void COINLINKAGE |
---|
| 505 | Cbc_printModel(Cbc_Model *model, const char *argPrefix); |
---|
| 506 | /*@}*/ |
---|
[2457] | 507 | |
---|
[2464] | 508 | /**@name Solver parameters */ |
---|
| 509 | /*@{*/ |
---|
| 510 | /** Set parameter "name" to value "value". Note that this |
---|
[2021] | 511 | * translates directly to using "-name value" as a |
---|
| 512 | * command-line argument to Cbc.*/ |
---|
[2464] | 513 | COINLIBAPI void COINLINKAGE |
---|
| 514 | Cbc_setParameter(Cbc_Model *model, const char *name, const char *value); |
---|
[2021] | 515 | |
---|
[2464] | 516 | /*@}*/ |
---|
| 517 | /**@name Message handling. Call backs are handled by ONE function */ |
---|
| 518 | /*@{*/ |
---|
| 519 | /** Pass in Callback function. |
---|
[1286] | 520 | Message numbers up to 1000000 are Clp, Coin ones have 1000000 added */ |
---|
[2464] | 521 | COINLIBAPI void COINLINKAGE |
---|
| 522 | Cbc_registerCallBack(Cbc_Model *model, |
---|
| 523 | cbc_callback userCallBack); |
---|
[2473] | 524 | |
---|
[2464] | 525 | /** Unset Callback function */ |
---|
| 526 | COINLIBAPI void COINLINKAGE |
---|
| 527 | Cbc_clearCallBack(Cbc_Model *model); |
---|
[2] | 528 | |
---|
[2473] | 529 | COINLIBAPI void COINLINKAGE Cbc_addCutCallback( |
---|
| 530 | Cbc_Model *model, cbc_cut_callback cutcb, |
---|
| 531 | const char *name, void *appData ); |
---|
| 532 | |
---|
[2464] | 533 | /*@}*/ |
---|
[2] | 534 | |
---|
[2464] | 535 | /**@name Solving the model */ |
---|
| 536 | /*@{*/ |
---|
| 537 | /* Solve the model with Cbc (using CbcMain1). |
---|
[2016] | 538 | */ |
---|
[2464] | 539 | COINLIBAPI int COINLINKAGE |
---|
| 540 | Cbc_solve(Cbc_Model *model); |
---|
| 541 | /*@}*/ |
---|
[1286] | 542 | |
---|
[2461] | 543 | /**@name Accessing the solution and optimization status */ |
---|
| 544 | /*@{*/ |
---|
[2021] | 545 | |
---|
[2464] | 546 | /** @brief Best feasible solution vector |
---|
[2458] | 547 | * |
---|
| 548 | * @param model problem object |
---|
| 549 | * @return vector with best solution found |
---|
| 550 | **/ |
---|
[2464] | 551 | COINLIBAPI const double *COINLINKAGE |
---|
| 552 | Cbc_getColSolution(Cbc_Model *model); |
---|
[2459] | 553 | |
---|
[2473] | 554 | |
---|
[2464] | 555 | /** @brief Best known bound on the optimal objective value |
---|
[2459] | 556 | * |
---|
| 557 | * @param model problem object |
---|
| 558 | * @return best possible cost (lower bound) |
---|
| 559 | **/ |
---|
[2464] | 560 | COINLIBAPI double COINLINKAGE |
---|
| 561 | Cbc_getBestPossibleObjValue(Cbc_Model *model); |
---|
[2459] | 562 | |
---|
[2464] | 563 | /** @brief Best integer feasible solution |
---|
[2459] | 564 | * |
---|
| 565 | * Best integer feasible solution or NULL if no integer feas sol found |
---|
| 566 | * |
---|
| 567 | * @param model problem object |
---|
| 568 | * @return vector with the best solution found or NULL if no feasible solution was found |
---|
| 569 | **/ |
---|
[2464] | 570 | COINLIBAPI double *COINLINKAGE |
---|
| 571 | Cbc_bestSolution(Cbc_Model *model); |
---|
[2459] | 572 | |
---|
[2464] | 573 | /** @brief number of integer feasible solution saved |
---|
[2459] | 574 | * |
---|
| 575 | * @param model problem object |
---|
| 576 | * @return number of saved solutions |
---|
| 577 | **/ |
---|
[2464] | 578 | COINLIBAPI int COINLINKAGE |
---|
| 579 | Cbc_numberSavedSolutions(Cbc_Model *model); |
---|
[2459] | 580 | |
---|
[2464] | 581 | /** @brief Vector with the i-th saved solution |
---|
[2459] | 582 | * |
---|
| 583 | * @param model problem object |
---|
| 584 | * @param whichSol index of the solution to be retrieved |
---|
| 585 | * @return vector with integer feasible solution |
---|
| 586 | **/ |
---|
[2464] | 587 | COINLIBAPI const double *COINLINKAGE |
---|
| 588 | Cbc_savedSolution(Cbc_Model *model, int whichSol); |
---|
| 589 | |
---|
| 590 | /** @brief Cost of the whichSol solution |
---|
[2460] | 591 | * |
---|
| 592 | * @param model problem object |
---|
| 593 | * @param whichSol solution index |
---|
| 594 | * @return solution cost |
---|
| 595 | **/ |
---|
[2464] | 596 | COINLIBAPI double COINLINKAGE |
---|
| 597 | Cbc_savedSolutionObj(Cbc_Model *model, int whichSol); |
---|
| 598 | |
---|
| 599 | /** @brief Queries vector of reduced costs |
---|
[2458] | 600 | * |
---|
| 601 | * @param model problem object |
---|
| 602 | * @return reduced cost vector |
---|
| 603 | **/ |
---|
[2464] | 604 | COINLIBAPI const double *COINLINKAGE |
---|
| 605 | Cbc_getReducedCost(Cbc_Model *model); |
---|
[2458] | 606 | |
---|
[2464] | 607 | /** If optimization was abandoned due to numerical difficulties |
---|
[2461] | 608 | * |
---|
| 609 | * @param model problem object |
---|
| 610 | * @return 1 if numerical difficulties interrupted the optimization, 0 otherwise |
---|
| 611 | * */ |
---|
[2464] | 612 | COINLIBAPI int COINLINKAGE |
---|
| 613 | Cbc_isAbandoned(Cbc_Model *model); |
---|
[2461] | 614 | |
---|
[2464] | 615 | /** @brief If the optimal solution was found |
---|
[2461] | 616 | * |
---|
| 617 | * @param model problem object |
---|
| 618 | * @return 1 if optimal solution was found, 0 otherwise |
---|
| 619 | **/ |
---|
[2464] | 620 | COINLIBAPI int COINLINKAGE |
---|
| 621 | Cbc_isProvenOptimal(Cbc_Model *model); |
---|
[2461] | 622 | |
---|
[2464] | 623 | /** @brief If infeasibility was proven |
---|
[2461] | 624 | * |
---|
| 625 | * If model is infeasible, please note that infeasibility can also be declared |
---|
| 626 | * if cutoff is informed and no solution better than the cutoff exists. |
---|
| 627 | * |
---|
| 628 | * @param model problem object |
---|
| 629 | * @return 1 if model is infeasible, 0 otherwise |
---|
| 630 | **/ |
---|
[2464] | 631 | COINLIBAPI int COINLINKAGE |
---|
| 632 | Cbc_isProvenInfeasible(Cbc_Model *model); |
---|
[2461] | 633 | |
---|
[2464] | 634 | /** @brief Is continuous model unbounded ? |
---|
[2461] | 635 | * |
---|
| 636 | * @param model problem object |
---|
| 637 | * @return 1 if model is unbounded, 0 otherwise |
---|
| 638 | * */ |
---|
[2464] | 639 | COINLIBAPI int COINLINKAGE |
---|
| 640 | Cbc_isContinuousUnbounded(Cbc_Model *model); |
---|
[2461] | 641 | |
---|
[2464] | 642 | /** Objective value of best feasible solution |
---|
[2461] | 643 | * |
---|
| 644 | * @param model problem object |
---|
| 645 | * @return cost of the best solution found |
---|
| 646 | * */ |
---|
[2464] | 647 | COINLIBAPI double COINLINKAGE |
---|
| 648 | Cbc_getObjValue(Cbc_Model *model); |
---|
[2461] | 649 | |
---|
[2464] | 650 | /** @brief Final optimization status |
---|
[2461] | 651 | * |
---|
| 652 | * Returns the optimization status. For more info check function |
---|
| 653 | * isProvenOptimal, isProvenInfeasible, etc. Check also secondary status. |
---|
| 654 | * Possible status are: |
---|
| 655 | * |
---|
| 656 | * -1 before branchAndBound |
---|
| 657 | * 0 finished - check isProvenOptimal or isProvenInfeasible to see if solution found (or check value of best solution) |
---|
| 658 | * 1 stopped - on maxnodes, maxsols, maxtime |
---|
| 659 | * 2 execution abandoned due to numerical dificulties |
---|
| 660 | * 5 user programmed interruption |
---|
| 661 | * |
---|
| 662 | * @param model problem object |
---|
| 663 | * @return problem status |
---|
| 664 | */ |
---|
[2464] | 665 | COINLIBAPI int COINLINKAGE Cbc_status(Cbc_Model *model); |
---|
[2461] | 666 | |
---|
[2464] | 667 | /** @brief Secondary status of problem |
---|
[2461] | 668 | * |
---|
| 669 | * Returns additional information regarding the optimization status |
---|
| 670 | * |
---|
| 671 | * -1 unset (status_ will also be -1) |
---|
| 672 | * 0 search completed with solution |
---|
| 673 | * 1 linear relaxation not feasible (or worse than cutoff) |
---|
| 674 | * 2 stopped on gap |
---|
| 675 | * 3 stopped on nodes |
---|
| 676 | * 4 stopped on time |
---|
| 677 | * 5 stopped on user event |
---|
| 678 | * 6 stopped on solutions |
---|
| 679 | * 7 linear relaxation unbounded |
---|
| 680 | * 8 stopped on iteration limit |
---|
| 681 | * |
---|
| 682 | * @model problem object |
---|
| 683 | * @return optimization status |
---|
| 684 | */ |
---|
[2464] | 685 | COINLIBAPI int COINLINKAGE |
---|
| 686 | Cbc_secondaryStatus(Cbc_Model *model); |
---|
[2458] | 687 | |
---|
[2464] | 688 | /** Sum of primal infeasibilities */ |
---|
| 689 | COINLIBAPI double COINLINKAGE |
---|
| 690 | Cbc_sumPrimalInfeasibilities(Cbc_Model *model); |
---|
[1286] | 691 | |
---|
[2464] | 692 | /** Number of primal infeasibilities */ |
---|
| 693 | COINLIBAPI int COINLINKAGE |
---|
| 694 | Cbc_numberPrimalInfeasibilities(Cbc_Model *model); |
---|
| 695 | |
---|
| 696 | /** Just check solution (for external use) - sets sum of |
---|
[1286] | 697 | infeasibilities etc */ |
---|
[2464] | 698 | COINLIBAPI void COINLINKAGE |
---|
| 699 | Cbc_checkSolution(Cbc_Model *model); |
---|
[1286] | 700 | |
---|
[2464] | 701 | /** Number of iterations */ |
---|
| 702 | COINLIBAPI int COINLINKAGE |
---|
| 703 | Cbc_getIterationCount(Cbc_Model *model); |
---|
[2461] | 704 | |
---|
[2464] | 705 | /** Node limit reached? */ |
---|
| 706 | COINLIBAPI int COINLINKAGE |
---|
| 707 | Cbc_isNodeLimitReached(Cbc_Model *model); |
---|
| 708 | /** Time limit reached? */ |
---|
| 709 | COINLIBAPI int COINLINKAGE |
---|
| 710 | Cbc_isSecondsLimitReached(Cbc_Model *model); |
---|
| 711 | /** Solution limit reached? */ |
---|
| 712 | COINLIBAPI int COINLINKAGE |
---|
| 713 | Cbc_isSolutionLimitReached(Cbc_Model *model); |
---|
| 714 | /** Are there numerical difficulties (for initialSolve) ? */ |
---|
| 715 | COINLIBAPI int COINLINKAGE |
---|
| 716 | Cbc_isInitialSolveAbandoned(Cbc_Model *model); |
---|
| 717 | /** Is optimality proven (for initialSolve) ? */ |
---|
| 718 | COINLIBAPI int COINLINKAGE |
---|
| 719 | Cbc_isInitialSolveProvenOptimal(Cbc_Model *model); |
---|
| 720 | /** Is primal infeasiblity proven (for initialSolve) ? */ |
---|
| 721 | COINLIBAPI int COINLINKAGE |
---|
| 722 | Cbc_isInitialSolveProvenPrimalInfeasible(Cbc_Model *model); |
---|
| 723 | /** "row" solution |
---|
[2019] | 724 | * This is the vector A*x, where A is the constraint matrix |
---|
| 725 | * and x is the current solution. */ |
---|
[2464] | 726 | COINLIBAPI const double *COINLINKAGE |
---|
| 727 | Cbc_getRowActivity(Cbc_Model *model); |
---|
| 728 | /** Number of nodes explored in B&B tree */ |
---|
| 729 | COINLIBAPI int COINLINKAGE |
---|
| 730 | Cbc_getNodeCount(Cbc_Model *model); |
---|
| 731 | /** Print the solution */ |
---|
| 732 | COINLIBAPI void COINLINKAGE |
---|
| 733 | Cbc_printSolution(Cbc_Model *model); |
---|
[2461] | 734 | |
---|
[2464] | 735 | /*@}*/ |
---|
[2473] | 736 | |
---|
| 737 | /** \name OsiSolverInterface related routines (used in callbacks) */ |
---|
| 738 | //@{ |
---|
| 739 | |
---|
| 740 | /** @brief Returns number of cols in OsiSolverInterface object */ |
---|
| 741 | COINLIBAPI int COINLINKAGE |
---|
| 742 | Osi_getNumCols( void *osi ); |
---|
| 743 | |
---|
| 744 | /** @brief Returns column name in OsiSolverInterface object */ |
---|
| 745 | COINLIBAPI void COINLINKAGE |
---|
| 746 | Osi_getColName( void *osi, int i, char *name, int maxLen ); |
---|
| 747 | |
---|
| 748 | /** @brief Returns column lower bounds in OsiSolverInterface object */ |
---|
| 749 | COINLIBAPI const double * COINLINKAGE |
---|
| 750 | Osi_getColLower( void *osi ); |
---|
| 751 | |
---|
| 752 | /** @brief Returns column upper bounds in OsiSolverInterface object */ |
---|
| 753 | COINLIBAPI const double * COINLINKAGE |
---|
| 754 | Osi_getColUpper( void *osi ); |
---|
| 755 | |
---|
| 756 | /** @brief Returns integrality information for columns in OsiSolverInterface object */ |
---|
| 757 | COINLIBAPI int COINLINKAGE |
---|
| 758 | Osi_isInteger( void *osi, int col ); |
---|
| 759 | |
---|
| 760 | /** @brief Returns number of rows in OsiSolverInterface object */ |
---|
| 761 | COINLIBAPI int COINLINKAGE |
---|
| 762 | Osi_getNumRows( void *osi ); |
---|
| 763 | |
---|
| 764 | COINLIBAPI int COINLINKAGE |
---|
| 765 | Osi_getRowNz(void *osi, int row); |
---|
| 766 | |
---|
| 767 | /** @brief Indices of variables that appear on a row */ |
---|
| 768 | COINLIBAPI const int *COINLINKAGE |
---|
| 769 | Osi_getRowIndices(void *osi, int row); |
---|
| 770 | |
---|
| 771 | /** @brief Coefficients of variables that appear on this row |
---|
| 772 | * |
---|
| 773 | * @param model problem object |
---|
| 774 | * @param row row index |
---|
| 775 | * @return coefficients of variables that appear on this row |
---|
| 776 | **/ |
---|
| 777 | COINLIBAPI const double *COINLINKAGE |
---|
| 778 | Osi_getRowCoeffs(void *osi, int row); |
---|
| 779 | |
---|
| 780 | /** @brief Right hand side of a row |
---|
| 781 | * |
---|
| 782 | * @param model problem object |
---|
| 783 | * @param row row index |
---|
| 784 | * @return row right hand side |
---|
| 785 | **/ |
---|
| 786 | COINLIBAPI double COINLINKAGE |
---|
| 787 | Osi_getRowRHS(void *osi, int row); |
---|
| 788 | |
---|
| 789 | /** @brief Sense a row |
---|
| 790 | * @param model problem object |
---|
| 791 | * @param row row index |
---|
| 792 | * @return row sense: E for =, L for <=, G for >= and R for ranged row |
---|
| 793 | **/ |
---|
| 794 | COINLIBAPI char COINLINKAGE |
---|
| 795 | Osi_getRowSense(void *osi, int row); |
---|
| 796 | |
---|
| 797 | /** @brief Returns solution vector in OsiSolverInterface object */ |
---|
| 798 | COINLIBAPI const double * COINLINKAGE |
---|
| 799 | Osi_getColSolution( void *osi ); |
---|
| 800 | |
---|
[2478] | 801 | |
---|
[2473] | 802 | /*@}*/ |
---|
| 803 | |
---|
| 804 | /** \name OsiCuts related routines (used in callbacks) */ |
---|
| 805 | //@{ |
---|
| 806 | |
---|
[2478] | 807 | /** adds a row cut (used in callback) */ |
---|
| 808 | COINLIBAPI void COINLINKAGE |
---|
| 809 | OsiCuts_addRowCut( void *osiCuts, int nz, const int *idx, const double *coef, char sense, double rhs ); |
---|
[2473] | 810 | |
---|
| 811 | /*@}*/ |
---|
| 812 | |
---|
[2] | 813 | #ifdef __cplusplus |
---|
[1286] | 814 | } |
---|
[2] | 815 | #endif |
---|
| 816 | #endif |
---|
[2465] | 817 | |
---|
| 818 | /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 |
---|
| 819 | */ |
---|