1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (C) 2002-2021 Konrad-Zuse-Zentrum */ 7 /* fuer Informationstechnik Berlin */ 8 /* */ 9 /* SCIP is distributed under the terms of the ZIB Academic License. */ 10 /* */ 11 /* You should have received a copy of the ZIB Academic License */ 12 /* along with SCIP; see the file COPYING. If not visit scipopt.org. */ 13 /* */ 14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 16 /**@file scip_sol.h 17 * @ingroup PUBLICCOREAPI 18 * @brief public methods for solutions 19 * @author Tobias Achterberg 20 * @author Timo Berthold 21 * @author Thorsten Koch 22 * @author Alexander Martin 23 * @author Marc Pfetsch 24 * @author Kati Wolter 25 * @author Gregor Hendel 26 * @author Leona Gottwald 27 */ 28 29 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 30 31 #ifndef __SCIP_SCIP_SOL_H__ 32 #define __SCIP_SCIP_SOL_H__ 33 34 35 #include "scip/def.h" 36 #include "scip/type_cons.h" 37 #include "scip/type_heur.h" 38 #include "scip/type_retcode.h" 39 #include "scip/type_scip.h" 40 #include "scip/type_sol.h" 41 #include "scip/type_var.h" 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 /**@addtogroup PublicSolutionMethods 48 * 49 * @{ 50 */ 51 52 /** creates a primal solution, initialized to zero 53 * 54 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 55 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 56 * 57 * @pre This method can be called if SCIP is in one of the following stages: 58 * - \ref SCIP_STAGE_PROBLEM 59 * - \ref SCIP_STAGE_TRANSFORMING 60 * - \ref SCIP_STAGE_TRANSFORMED 61 * - \ref SCIP_STAGE_INITPRESOLVE 62 * - \ref SCIP_STAGE_PRESOLVING 63 * - \ref SCIP_STAGE_EXITPRESOLVE 64 * - \ref SCIP_STAGE_PRESOLVED 65 * - \ref SCIP_STAGE_INITSOLVE 66 * - \ref SCIP_STAGE_SOLVING 67 */ 68 SCIP_EXPORT 69 SCIP_RETCODE SCIPcreateSol( 70 SCIP* scip, /**< SCIP data structure */ 71 SCIP_SOL** sol, /**< pointer to store the solution */ 72 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 73 ); 74 75 /** creates a primal solution, initialized to the current LP solution 76 * 77 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 78 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 79 * 80 * @pre This method can be called if SCIP is in one of the following stages: 81 * - \ref SCIP_STAGE_SOLVING 82 */ 83 SCIP_EXPORT 84 SCIP_RETCODE SCIPcreateLPSol( 85 SCIP* scip, /**< SCIP data structure */ 86 SCIP_SOL** sol, /**< pointer to store the solution */ 87 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 88 ); 89 90 /** creates a primal solution, initialized to the current NLP solution 91 * 92 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 93 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 94 * 95 * @pre This method can be called if SCIP is in one of the following stages: 96 * - \ref SCIP_STAGE_SOLVING 97 */ 98 SCIP_EXPORT 99 SCIP_RETCODE SCIPcreateNLPSol( 100 SCIP* scip, /**< SCIP data structure */ 101 SCIP_SOL** sol, /**< pointer to store the solution */ 102 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 103 ); 104 105 /** creates a primal solution, initialized to the current relaxation solution 106 * 107 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 108 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 109 * 110 * @pre This method can be called if SCIP is in one of the following stages: 111 * - \ref SCIP_STAGE_SOLVING 112 */ 113 SCIP_EXPORT 114 SCIP_RETCODE SCIPcreateRelaxSol( 115 SCIP* scip, /**< SCIP data structure */ 116 SCIP_SOL** sol, /**< pointer to store the solution */ 117 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 118 ); 119 120 /** creates a primal solution, initialized to the current pseudo solution 121 * 122 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 123 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 124 * 125 * @pre This method can be called if SCIP is in one of the following stages: 126 * - \ref SCIP_STAGE_SOLVING 127 */ 128 SCIP_EXPORT 129 SCIP_RETCODE SCIPcreatePseudoSol( 130 SCIP* scip, /**< SCIP data structure */ 131 SCIP_SOL** sol, /**< pointer to store the solution */ 132 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 133 ); 134 135 /** creates a primal solution, initialized to the current LP or pseudo solution, depending on whether the LP was solved 136 * at the current node 137 * 138 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 139 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 140 * 141 * @pre This method can be called if SCIP is in one of the following stages: 142 * - \ref SCIP_STAGE_SOLVING 143 */ 144 SCIP_EXPORT 145 SCIP_RETCODE SCIPcreateCurrentSol( 146 SCIP* scip, /**< SCIP data structure */ 147 SCIP_SOL** sol, /**< pointer to store the solution */ 148 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 149 ); 150 151 /** creates a partial primal solution, initialized to unknown values 152 * 153 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 154 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 155 * 156 * @pre This method can be called if SCIP is in one of the following stages: 157 * - \ref SCIP_STAGE_PROBLEM 158 */ 159 SCIP_EXPORT 160 SCIP_RETCODE SCIPcreatePartialSol( 161 SCIP* scip, /**< SCIP data structure */ 162 SCIP_SOL** sol, /**< pointer to store the solution */ 163 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 164 ); 165 166 /** creates a primal solution, initialized to unknown values 167 * 168 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 169 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 170 * 171 * @pre This method can be called if SCIP is in one of the following stages: 172 * - \ref SCIP_STAGE_TRANSFORMING 173 * - \ref SCIP_STAGE_TRANSFORMED 174 * - \ref SCIP_STAGE_INITPRESOLVE 175 * - \ref SCIP_STAGE_PRESOLVING 176 * - \ref SCIP_STAGE_EXITPRESOLVE 177 * - \ref SCIP_STAGE_PRESOLVED 178 * - \ref SCIP_STAGE_INITSOLVE 179 * - \ref SCIP_STAGE_SOLVING 180 */ 181 SCIP_EXPORT 182 SCIP_RETCODE SCIPcreateUnknownSol( 183 SCIP* scip, /**< SCIP data structure */ 184 SCIP_SOL** sol, /**< pointer to store the solution */ 185 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 186 ); 187 188 /** creates a primal solution living in the original problem space, initialized to zero; 189 * a solution in original space allows to set original variables to values that would be invalid in the 190 * transformed problem due to preprocessing fixings or aggregations 191 * 192 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 193 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 194 * 195 * @pre This method can be called if SCIP is in one of the following stages: 196 * - \ref SCIP_STAGE_PROBLEM 197 * - \ref SCIP_STAGE_TRANSFORMING 198 * - \ref SCIP_STAGE_TRANSFORMED 199 * - \ref SCIP_STAGE_INITPRESOLVE 200 * - \ref SCIP_STAGE_PRESOLVING 201 * - \ref SCIP_STAGE_EXITPRESOLVE 202 * - \ref SCIP_STAGE_PRESOLVED 203 * - \ref SCIP_STAGE_INITSOLVE 204 * - \ref SCIP_STAGE_SOLVING 205 */ 206 SCIP_EXPORT 207 SCIP_RETCODE SCIPcreateOrigSol( 208 SCIP* scip, /**< SCIP data structure */ 209 SCIP_SOL** sol, /**< pointer to store the solution */ 210 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ 211 ); 212 213 /** creates a copy of a primal solution; note that a copy of a linked solution is also linked and needs to be unlinked 214 * if it should stay unaffected from changes in the LP or pseudo solution 215 * 216 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 217 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 218 * 219 * @pre This method can be called if SCIP is in one of the following stages: 220 * - \ref SCIP_STAGE_PROBLEM 221 * - \ref SCIP_STAGE_TRANSFORMING 222 * - \ref SCIP_STAGE_TRANSFORMED 223 * - \ref SCIP_STAGE_INITPRESOLVE 224 * - \ref SCIP_STAGE_PRESOLVING 225 * - \ref SCIP_STAGE_EXITPRESOLVE 226 * - \ref SCIP_STAGE_PRESOLVED 227 * - \ref SCIP_STAGE_INITSOLVE 228 * - \ref SCIP_STAGE_SOLVING 229 */ 230 SCIP_EXPORT 231 SCIP_RETCODE SCIPcreateSolCopy( 232 SCIP* scip, /**< SCIP data structure */ 233 SCIP_SOL** sol, /**< pointer to store the solution */ 234 SCIP_SOL* sourcesol /**< primal CIP solution to copy */ 235 ); 236 237 /** creates a copy of a solution in the original primal solution space 238 * 239 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 240 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 241 * 242 * @pre This method can be called if SCIP is in one of the following stages: 243 * - \ref SCIP_STAGE_PROBLEM 244 * - \ref SCIP_STAGE_TRANSFORMING 245 * - \ref SCIP_STAGE_TRANSFORMED 246 * - \ref SCIP_STAGE_INITPRESOLVE 247 * - \ref SCIP_STAGE_PRESOLVING 248 * - \ref SCIP_STAGE_EXITPRESOLVE 249 * - \ref SCIP_STAGE_PRESOLVED 250 * - \ref SCIP_STAGE_INITSOLVE 251 * - \ref SCIP_STAGE_SOLVING 252 * - \ref SCIP_STAGE_SOLVED 253 * - \ref SCIP_STAGE_EXITSOLVE 254 * - \ref SCIP_STAGE_FREETRANS 255 */ 256 SCIP_EXPORT 257 SCIP_RETCODE SCIPcreateSolCopyOrig( 258 SCIP* scip, /**< SCIP data structure */ 259 SCIP_SOL** sol, /**< pointer to store the solution */ 260 SCIP_SOL* sourcesol /**< primal CIP solution to copy */ 261 ); 262 263 /** creates a copy of a primal solution, thereby replacing infinite fixings of variables by finite values; 264 * the copy is always defined in the original variable space; 265 * success indicates whether the objective value of the solution was changed by removing infinite values 266 * 267 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 268 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 269 * 270 * @pre This method can be called if SCIP is in one of the following stages: 271 * - \ref SCIP_STAGE_PROBLEM 272 * - \ref SCIP_STAGE_TRANSFORMING 273 * - \ref SCIP_STAGE_TRANSFORMED 274 * - \ref SCIP_STAGE_INITPRESOLVE 275 * - \ref SCIP_STAGE_PRESOLVING 276 * - \ref SCIP_STAGE_EXITPRESOLVE 277 * - \ref SCIP_STAGE_PRESOLVED 278 * - \ref SCIP_STAGE_INITSOLVE 279 * - \ref SCIP_STAGE_SOLVING 280 * - \ref SCIP_STAGE_SOLVED 281 * - \ref SCIP_STAGE_EXITSOLVE 282 */ 283 SCIP_EXPORT 284 SCIP_RETCODE SCIPcreateFiniteSolCopy( 285 SCIP* scip, /**< SCIP data structure */ 286 SCIP_SOL** sol, /**< pointer to store the solution */ 287 SCIP_SOL* sourcesol, /**< primal CIP solution to copy */ 288 SCIP_Bool* success /**< does the finite solution have the same objective value? */ 289 ); 290 291 /** frees primal CIP solution 292 * 293 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 294 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 295 * 296 * @pre This method can be called if SCIP is in one of the following stages: 297 * - \ref SCIP_STAGE_PROBLEM 298 * - \ref SCIP_STAGE_TRANSFORMING 299 * - \ref SCIP_STAGE_TRANSFORMED 300 * - \ref SCIP_STAGE_INITPRESOLVE 301 * - \ref SCIP_STAGE_PRESOLVING 302 * - \ref SCIP_STAGE_EXITPRESOLVE 303 * - \ref SCIP_STAGE_PRESOLVED 304 * - \ref SCIP_STAGE_INITSOLVE 305 * - \ref SCIP_STAGE_SOLVING 306 * - \ref SCIP_STAGE_SOLVED 307 * - \ref SCIP_STAGE_EXITSOLVE 308 * - \ref SCIP_STAGE_FREETRANS 309 */ 310 SCIP_EXPORT 311 SCIP_RETCODE SCIPfreeSol( 312 SCIP* scip, /**< SCIP data structure */ 313 SCIP_SOL** sol /**< pointer to the solution */ 314 ); 315 316 /** links a primal solution to the current LP solution 317 * 318 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 319 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 320 * 321 * @pre This method can be called if SCIP is in one of the following stages: 322 * - \ref SCIP_STAGE_SOLVING 323 */ 324 SCIP_EXPORT 325 SCIP_RETCODE SCIPlinkLPSol( 326 SCIP* scip, /**< SCIP data structure */ 327 SCIP_SOL* sol /**< primal solution */ 328 ); 329 330 /** links a primal solution to the current NLP solution 331 * 332 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 333 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 334 * 335 * @pre This method can be called if SCIP is in one of the following stages: 336 * - \ref SCIP_STAGE_SOLVING 337 */ 338 SCIP_EXPORT 339 SCIP_RETCODE SCIPlinkNLPSol( 340 SCIP* scip, /**< SCIP data structure */ 341 SCIP_SOL* sol /**< primal solution */ 342 ); 343 344 /** links a primal solution to the current relaxation solution 345 * 346 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 347 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 348 * 349 * @pre This method can be called if SCIP is in one of the following stages: 350 * - \ref SCIP_STAGE_SOLVING 351 */ 352 SCIP_EXPORT 353 SCIP_RETCODE SCIPlinkRelaxSol( 354 SCIP* scip, /**< SCIP data structure */ 355 SCIP_SOL* sol /**< primal solution */ 356 ); 357 358 /** links a primal solution to the current pseudo solution 359 * 360 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 361 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 362 * 363 * @pre This method can be called if SCIP is in one of the following stages: 364 * - \ref SCIP_STAGE_PRESOLVING 365 * - \ref SCIP_STAGE_SOLVING 366 */ 367 SCIP_EXPORT 368 SCIP_RETCODE SCIPlinkPseudoSol( 369 SCIP* scip, /**< SCIP data structure */ 370 SCIP_SOL* sol /**< primal solution */ 371 ); 372 373 /** links a primal solution to the current LP or pseudo solution 374 * 375 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 376 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 377 * 378 * @pre This method can be called if SCIP is in one of the following stages: 379 * - \ref SCIP_STAGE_SOLVING 380 */ 381 SCIP_EXPORT 382 SCIP_RETCODE SCIPlinkCurrentSol( 383 SCIP* scip, /**< SCIP data structure */ 384 SCIP_SOL* sol /**< primal solution */ 385 ); 386 387 /** clears a primal solution 388 * 389 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 390 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 391 * 392 * @pre This method can be called if SCIP is in one of the following stages: 393 * - \ref SCIP_STAGE_PROBLEM 394 * - \ref SCIP_STAGE_TRANSFORMING 395 * - \ref SCIP_STAGE_TRANSFORMED 396 * - \ref SCIP_STAGE_INITPRESOLVE 397 * - \ref SCIP_STAGE_PRESOLVING 398 * - \ref SCIP_STAGE_EXITPRESOLVE 399 * - \ref SCIP_STAGE_PRESOLVED 400 * - \ref SCIP_STAGE_INITSOLVE 401 * - \ref SCIP_STAGE_SOLVING 402 * - \ref SCIP_STAGE_SOLVED 403 * - \ref SCIP_STAGE_EXITSOLVE 404 * - \ref SCIP_STAGE_FREETRANS 405 */ 406 SCIP_EXPORT 407 SCIP_RETCODE SCIPclearSol( 408 SCIP* scip, /**< SCIP data structure */ 409 SCIP_SOL* sol /**< primal solution */ 410 ); 411 412 /** stores solution values of variables in solution's own array 413 * 414 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 415 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 416 * 417 * @pre This method can be called if SCIP is in one of the following stages: 418 * - \ref SCIP_STAGE_TRANSFORMING 419 * - \ref SCIP_STAGE_TRANSFORMED 420 * - \ref SCIP_STAGE_PRESOLVING 421 * - \ref SCIP_STAGE_PRESOLVED 422 * - \ref SCIP_STAGE_INITSOLVE 423 * - \ref SCIP_STAGE_SOLVING 424 * - \ref SCIP_STAGE_SOLVED 425 * - \ref SCIP_STAGE_EXITSOLVE 426 * - \ref SCIP_STAGE_FREETRANS 427 */ 428 SCIP_EXPORT 429 SCIP_RETCODE SCIPunlinkSol( 430 SCIP* scip, /**< SCIP data structure */ 431 SCIP_SOL* sol /**< primal solution */ 432 ); 433 434 /** sets value of variable in primal CIP solution 435 * 436 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 437 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 438 * 439 * @pre This method can be called if SCIP is in one of the following stages: 440 * - \ref SCIP_STAGE_PROBLEM 441 * - \ref SCIP_STAGE_TRANSFORMING 442 * - \ref SCIP_STAGE_TRANSFORMED 443 * - \ref SCIP_STAGE_INITPRESOLVE 444 * - \ref SCIP_STAGE_PRESOLVING 445 * - \ref SCIP_STAGE_EXITPRESOLVE 446 * - \ref SCIP_STAGE_PRESOLVED 447 * - \ref SCIP_STAGE_INITSOLVE 448 * - \ref SCIP_STAGE_SOLVING 449 * - \ref SCIP_STAGE_SOLVED 450 * - \ref SCIP_STAGE_EXITSOLVE 451 * - \ref SCIP_STAGE_FREETRANS 452 */ 453 SCIP_EXPORT 454 SCIP_RETCODE SCIPsetSolVal( 455 SCIP* scip, /**< SCIP data structure */ 456 SCIP_SOL* sol, /**< primal solution */ 457 SCIP_VAR* var, /**< variable to add to solution */ 458 SCIP_Real val /**< solution value of variable */ 459 ); 460 461 /** sets values of multiple variables in primal CIP solution 462 * 463 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 464 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 465 * 466 * @pre This method can be called if SCIP is in one of the following stages: 467 * - \ref SCIP_STAGE_PROBLEM 468 * - \ref SCIP_STAGE_TRANSFORMING 469 * - \ref SCIP_STAGE_TRANSFORMED 470 * - \ref SCIP_STAGE_INITPRESOLVE 471 * - \ref SCIP_STAGE_PRESOLVING 472 * - \ref SCIP_STAGE_EXITPRESOLVE 473 * - \ref SCIP_STAGE_PRESOLVED 474 * - \ref SCIP_STAGE_INITSOLVE 475 * - \ref SCIP_STAGE_SOLVING 476 * - \ref SCIP_STAGE_SOLVED 477 * - \ref SCIP_STAGE_EXITSOLVE 478 * - \ref SCIP_STAGE_FREETRANS 479 */ 480 SCIP_EXPORT 481 SCIP_RETCODE SCIPsetSolVals( 482 SCIP* scip, /**< SCIP data structure */ 483 SCIP_SOL* sol, /**< primal solution */ 484 int nvars, /**< number of variables to set solution value for */ 485 SCIP_VAR** vars, /**< array with variables to add to solution */ 486 SCIP_Real* vals /**< array with solution values of variables */ 487 ); 488 489 /** increases value of variable in primal CIP solution 490 * 491 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 492 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 493 * 494 * @pre This method can be called if SCIP is in one of the following stages: 495 * - \ref SCIP_STAGE_PROBLEM 496 * - \ref SCIP_STAGE_TRANSFORMING 497 * - \ref SCIP_STAGE_TRANSFORMED 498 * - \ref SCIP_STAGE_INITPRESOLVE 499 * - \ref SCIP_STAGE_PRESOLVING 500 * - \ref SCIP_STAGE_EXITPRESOLVE 501 * - \ref SCIP_STAGE_PRESOLVED 502 * - \ref SCIP_STAGE_INITSOLVE 503 * - \ref SCIP_STAGE_SOLVING 504 * - \ref SCIP_STAGE_SOLVED 505 * - \ref SCIP_STAGE_EXITSOLVE 506 * - \ref SCIP_STAGE_FREETRANS 507 */ 508 SCIP_EXPORT 509 SCIP_RETCODE SCIPincSolVal( 510 SCIP* scip, /**< SCIP data structure */ 511 SCIP_SOL* sol, /**< primal solution */ 512 SCIP_VAR* var, /**< variable to increase solution value for */ 513 SCIP_Real incval /**< increment for solution value of variable */ 514 ); 515 516 /** returns value of variable in primal CIP solution, or in current LP/pseudo solution 517 * 518 * @return value of variable in primal CIP solution, or in current LP/pseudo solution 519 * 520 * @pre In case the solution pointer @p sol is @b NULL, that means it is asked for the LP or pseudo solution, this method 521 * can only be called if @p scip is in the solving stage \ref SCIP_STAGE_SOLVING. In any other case, this method 522 * can be called if @p scip is in one of the following stages: 523 * - \ref SCIP_STAGE_PROBLEM 524 * - \ref SCIP_STAGE_TRANSFORMING 525 * - \ref SCIP_STAGE_TRANSFORMED 526 * - \ref SCIP_STAGE_INITPRESOLVE 527 * - \ref SCIP_STAGE_PRESOLVING 528 * - \ref SCIP_STAGE_EXITPRESOLVE 529 * - \ref SCIP_STAGE_PRESOLVED 530 * - \ref SCIP_STAGE_INITSOLVE 531 * - \ref SCIP_STAGE_SOLVING 532 * - \ref SCIP_STAGE_SOLVED 533 * - \ref SCIP_STAGE_EXITSOLVE 534 * - \ref SCIP_STAGE_FREETRANS 535 */ 536 SCIP_EXPORT 537 SCIP_Real SCIPgetSolVal( 538 SCIP* scip, /**< SCIP data structure */ 539 SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ 540 SCIP_VAR* var /**< variable to get value for */ 541 ); 542 543 /** gets values of multiple variables in primal CIP solution 544 * 545 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 546 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 547 * 548 * @pre This method can be called if SCIP is in one of the following stages: 549 * - \ref SCIP_STAGE_PROBLEM 550 * - \ref SCIP_STAGE_TRANSFORMING 551 * - \ref SCIP_STAGE_TRANSFORMED 552 * - \ref SCIP_STAGE_INITPRESOLVE 553 * - \ref SCIP_STAGE_PRESOLVING 554 * - \ref SCIP_STAGE_EXITPRESOLVE 555 * - \ref SCIP_STAGE_PRESOLVED 556 * - \ref SCIP_STAGE_INITSOLVE 557 * - \ref SCIP_STAGE_SOLVING 558 * - \ref SCIP_STAGE_SOLVED 559 * - \ref SCIP_STAGE_EXITSOLVE 560 * - \ref SCIP_STAGE_FREETRANS 561 */ 562 SCIP_EXPORT 563 SCIP_RETCODE SCIPgetSolVals( 564 SCIP* scip, /**< SCIP data structure */ 565 SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ 566 int nvars, /**< number of variables to get solution value for */ 567 SCIP_VAR** vars, /**< array with variables to get value for */ 568 SCIP_Real* vals /**< array to store solution values of variables */ 569 ); 570 571 /** returns objective value of primal CIP solution w.r.t. original problem, or current LP/pseudo objective value 572 * 573 * @return objective value of primal CIP solution w.r.t. original problem, or current LP/pseudo objective value 574 * 575 * @pre This method can be called if SCIP is in one of the following stages: 576 * - \ref SCIP_STAGE_PROBLEM 577 * - \ref SCIP_STAGE_TRANSFORMING 578 * - \ref SCIP_STAGE_TRANSFORMED 579 * - \ref SCIP_STAGE_INITPRESOLVE 580 * - \ref SCIP_STAGE_PRESOLVING 581 * - \ref SCIP_STAGE_EXITPRESOLVE 582 * - \ref SCIP_STAGE_PRESOLVED 583 * - \ref SCIP_STAGE_INITSOLVE 584 * - \ref SCIP_STAGE_SOLVING 585 * - \ref SCIP_STAGE_SOLVED 586 * - \ref SCIP_STAGE_EXITSOLVE 587 * - \ref SCIP_STAGE_FREETRANS 588 */ 589 SCIP_EXPORT 590 SCIP_Real SCIPgetSolOrigObj( 591 SCIP* scip, /**< SCIP data structure */ 592 SCIP_SOL* sol /**< primal solution, or NULL for current LP/pseudo objective value */ 593 ); 594 595 /** returns transformed objective value of primal CIP solution, or transformed current LP/pseudo objective value 596 * 597 * @return transformed objective value of primal CIP solution, or transformed current LP/pseudo objective value 598 * 599 * @pre This method can be called if SCIP is in one of the following stages: 600 * - \ref SCIP_STAGE_TRANSFORMING 601 * - \ref SCIP_STAGE_TRANSFORMED 602 * - \ref SCIP_STAGE_INITPRESOLVE 603 * - \ref SCIP_STAGE_PRESOLVING 604 * - \ref SCIP_STAGE_EXITPRESOLVE 605 * - \ref SCIP_STAGE_PRESOLVED 606 * - \ref SCIP_STAGE_INITSOLVE 607 * - \ref SCIP_STAGE_SOLVING 608 * - \ref SCIP_STAGE_SOLVED 609 * - \ref SCIP_STAGE_EXITSOLVE 610 * - \ref SCIP_STAGE_FREETRANS 611 */ 612 SCIP_EXPORT 613 SCIP_Real SCIPgetSolTransObj( 614 SCIP* scip, /**< SCIP data structure */ 615 SCIP_SOL* sol /**< primal solution, or NULL for current LP/pseudo objective value */ 616 ); 617 618 /** recomputes the objective value of an original solution, e.g., when transferring solutions 619 * from the solution pool (objective coefficients might have changed in the meantime) 620 * 621 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 622 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 623 * 624 * @pre This method can be called if SCIP is in one of the following stages: 625 * - \ref SCIP_STAGE_PRESOLVING 626 * - \ref SCIP_STAGE_SOLVING 627 * 628 */ 629 SCIP_EXPORT 630 SCIP_RETCODE SCIPrecomputeSolObj( 631 SCIP* scip, 632 SCIP_SOL* sol 633 ); 634 635 /** maps original space objective value into transformed objective value 636 * 637 * @return transformed objective value 638 * 639 * @pre This method can be called if SCIP is in one of the following stages: 640 * - \ref SCIP_STAGE_TRANSFORMING 641 * - \ref SCIP_STAGE_TRANSFORMED 642 * - \ref SCIP_STAGE_INITPRESOLVE 643 * - \ref SCIP_STAGE_PRESOLVING 644 * - \ref SCIP_STAGE_EXITPRESOLVE 645 * - \ref SCIP_STAGE_PRESOLVED 646 * - \ref SCIP_STAGE_INITSOLVE 647 * - \ref SCIP_STAGE_SOLVING 648 * - \ref SCIP_STAGE_SOLVED 649 */ 650 SCIP_EXPORT 651 SCIP_Real SCIPtransformObj( 652 SCIP* scip, /**< SCIP data structure */ 653 SCIP_Real obj /**< original space objective value to transform */ 654 ); 655 656 /** maps transformed objective value into original space 657 * 658 * @return objective value into original space 659 * 660 * @pre This method can be called if SCIP is in one of the following stages: 661 * - \ref SCIP_STAGE_TRANSFORMING 662 * - \ref SCIP_STAGE_TRANSFORMED 663 * - \ref SCIP_STAGE_INITPRESOLVE 664 * - \ref SCIP_STAGE_PRESOLVING 665 * - \ref SCIP_STAGE_EXITPRESOLVE 666 * - \ref SCIP_STAGE_PRESOLVED 667 * - \ref SCIP_STAGE_INITSOLVE 668 * - \ref SCIP_STAGE_SOLVING 669 * - \ref SCIP_STAGE_SOLVED 670 */ 671 SCIP_EXPORT 672 SCIP_Real SCIPretransformObj( 673 SCIP* scip, /**< SCIP data structure */ 674 SCIP_Real obj /**< transformed objective value to retransform in original space */ 675 ); 676 677 /** gets clock time, when this solution was found 678 * 679 * @return clock time, when this solution was found 680 * 681 * @pre This method can be called if SCIP is in one of the following stages: 682 * - \ref SCIP_STAGE_TRANSFORMING 683 * - \ref SCIP_STAGE_TRANSFORMED 684 * - \ref SCIP_STAGE_INITPRESOLVE 685 * - \ref SCIP_STAGE_PRESOLVING 686 * - \ref SCIP_STAGE_EXITPRESOLVE 687 * - \ref SCIP_STAGE_PRESOLVED 688 * - \ref SCIP_STAGE_INITSOLVE 689 * - \ref SCIP_STAGE_SOLVING 690 * - \ref SCIP_STAGE_SOLVED 691 * - \ref SCIP_STAGE_EXITSOLVE 692 * - \ref SCIP_STAGE_FREETRANS 693 */ 694 SCIP_EXPORT 695 SCIP_Real SCIPgetSolTime( 696 SCIP* scip, /**< SCIP data structure */ 697 SCIP_SOL* sol /**< primal solution */ 698 ); 699 700 /** gets branch and bound run number, where this solution was found 701 * 702 * @return branch and bound run number, where this solution was found 703 * 704 * @pre This method can be called if SCIP is in one of the following stages: 705 * - \ref SCIP_STAGE_TRANSFORMING 706 * - \ref SCIP_STAGE_TRANSFORMED 707 * - \ref SCIP_STAGE_INITPRESOLVE 708 * - \ref SCIP_STAGE_PRESOLVING 709 * - \ref SCIP_STAGE_EXITPRESOLVE 710 * - \ref SCIP_STAGE_PRESOLVED 711 * - \ref SCIP_STAGE_INITSOLVE 712 * - \ref SCIP_STAGE_SOLVING 713 * - \ref SCIP_STAGE_SOLVED 714 * - \ref SCIP_STAGE_EXITSOLVE 715 * - \ref SCIP_STAGE_FREETRANS 716 */ 717 SCIP_EXPORT 718 int SCIPgetSolRunnum( 719 SCIP* scip, /**< SCIP data structure */ 720 SCIP_SOL* sol /**< primal solution */ 721 ); 722 723 /** gets node number of the specific branch and bound run, where this solution was found 724 * 725 * @return node number of the specific branch and bound run, where this solution was found 726 * 727 * @pre This method can be called if SCIP is in one of the following stages: 728 * - \ref SCIP_STAGE_TRANSFORMING 729 * - \ref SCIP_STAGE_TRANSFORMED 730 * - \ref SCIP_STAGE_INITPRESOLVE 731 * - \ref SCIP_STAGE_PRESOLVING 732 * - \ref SCIP_STAGE_EXITPRESOLVE 733 * - \ref SCIP_STAGE_PRESOLVED 734 * - \ref SCIP_STAGE_INITSOLVE 735 * - \ref SCIP_STAGE_SOLVING 736 * - \ref SCIP_STAGE_SOLVED 737 * - \ref SCIP_STAGE_EXITSOLVE 738 * - \ref SCIP_STAGE_FREETRANS 739 */ 740 SCIP_EXPORT 741 SCIP_Longint SCIPgetSolNodenum( 742 SCIP* scip, /**< SCIP data structure */ 743 SCIP_SOL* sol /**< primal solution */ 744 ); 745 746 /** gets heuristic, that found this solution (or NULL if it's from the tree) 747 * 748 * @return heuristic, that found this solution (or NULL if it's from the tree) 749 * 750 * @pre This method can be called if SCIP is in one of the following stages: 751 * - \ref SCIP_STAGE_TRANSFORMING 752 * - \ref SCIP_STAGE_TRANSFORMED 753 * - \ref SCIP_STAGE_INITPRESOLVE 754 * - \ref SCIP_STAGE_PRESOLVING 755 * - \ref SCIP_STAGE_EXITPRESOLVE 756 * - \ref SCIP_STAGE_PRESOLVED 757 * - \ref SCIP_STAGE_INITSOLVE 758 * - \ref SCIP_STAGE_SOLVING 759 * - \ref SCIP_STAGE_SOLVED 760 * - \ref SCIP_STAGE_EXITSOLVE 761 * - \ref SCIP_STAGE_FREETRANS 762 */ 763 SCIP_EXPORT 764 SCIP_HEUR* SCIPgetSolHeur( 765 SCIP* scip, /**< SCIP data structure */ 766 SCIP_SOL* sol /**< primal solution */ 767 ); 768 769 /** returns whether two given solutions are exactly equal 770 * 771 * @return returns whether two given solutions are exactly equal 772 * 773 * @pre This method can be called if SCIP is in one of the following stages: 774 * - \ref SCIP_STAGE_PROBLEM 775 * - \ref SCIP_STAGE_TRANSFORMING 776 * - \ref SCIP_STAGE_TRANSFORMED 777 * - \ref SCIP_STAGE_INITPRESOLVE 778 * - \ref SCIP_STAGE_PRESOLVING 779 * - \ref SCIP_STAGE_EXITPRESOLVE 780 * - \ref SCIP_STAGE_PRESOLVED 781 * - \ref SCIP_STAGE_INITSOLVE 782 * - \ref SCIP_STAGE_SOLVING 783 * - \ref SCIP_STAGE_SOLVED 784 * - \ref SCIP_STAGE_EXITSOLVE 785 * - \ref SCIP_STAGE_FREETRANS 786 */ 787 SCIP_EXPORT 788 SCIP_Bool SCIPareSolsEqual( 789 SCIP* scip, /**< SCIP data structure */ 790 SCIP_SOL* sol1, /**< first primal CIP solution */ 791 SCIP_SOL* sol2 /**< second primal CIP solution */ 792 ); 793 794 /** adjusts solution values of implicit integer variables in handed solution. Solution objective value is not 795 * deteriorated by this method. 796 * 797 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 798 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 799 * 800 * @pre This method can be called if SCIP is in one of the following stages: 801 * - \ref SCIP_STAGE_SOLVING 802 */ 803 SCIP_EXPORT 804 SCIP_RETCODE SCIPadjustImplicitSolVals( 805 SCIP* scip, /**< SCIP data structure */ 806 SCIP_SOL* sol, /**< primal CIP solution */ 807 SCIP_Bool uselprows /**< should LP row information be considered for none-objective variables */ 808 ); 809 810 /** outputs non-zero variables of solution in original problem space to the given file stream 811 * 812 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 813 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 814 * 815 * @pre In case the solution pointer @p sol is NULL (askinking for the current LP/pseudo solution), this method can be 816 * called if @p scip is in one of the following stages: 817 * - \ref SCIP_STAGE_PRESOLVING 818 * - \ref SCIP_STAGE_EXITPRESOLVE 819 * - \ref SCIP_STAGE_PRESOLVED 820 * - \ref SCIP_STAGE_INITSOLVE 821 * - \ref SCIP_STAGE_SOLVING 822 * - \ref SCIP_STAGE_SOLVED 823 * - \ref SCIP_STAGE_EXITSOLVE 824 * 825 * @pre In case the solution pointer @p sol is @b not NULL, this method can be called if @p scip is in one of the 826 * following stages: 827 * - \ref SCIP_STAGE_PROBLEM 828 * - \ref SCIP_STAGE_TRANSFORMED 829 * - \ref SCIP_STAGE_INITPRESOLVE 830 * - \ref SCIP_STAGE_PRESOLVING 831 * - \ref SCIP_STAGE_EXITPRESOLVE 832 * - \ref SCIP_STAGE_PRESOLVED 833 * - \ref SCIP_STAGE_INITSOLVE 834 * - \ref SCIP_STAGE_SOLVING 835 * - \ref SCIP_STAGE_SOLVED 836 * - \ref SCIP_STAGE_EXITSOLVE 837 */ 838 SCIP_EXPORT 839 SCIP_RETCODE SCIPprintSol( 840 SCIP* scip, /**< SCIP data structure */ 841 SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ 842 FILE* file, /**< output file (or NULL for standard output) */ 843 SCIP_Bool printzeros /**< should variables set to zero be printed? */ 844 ); 845 846 /** outputs non-zero variables of solution in transformed problem space to file stream 847 * 848 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 849 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 850 * 851 * @pre This method can be called if SCIP is in one of the following stages: 852 * - \ref SCIP_STAGE_TRANSFORMED 853 * - \ref SCIP_STAGE_INITPRESOLVE 854 * - \ref SCIP_STAGE_PRESOLVING 855 * - \ref SCIP_STAGE_EXITPRESOLVE 856 * - \ref SCIP_STAGE_PRESOLVED 857 * - \ref SCIP_STAGE_INITSOLVE 858 * - \ref SCIP_STAGE_SOLVING 859 * - \ref SCIP_STAGE_SOLVED 860 * - \ref SCIP_STAGE_EXITSOLVE 861 */ 862 SCIP_EXPORT 863 SCIP_RETCODE SCIPprintTransSol( 864 SCIP* scip, /**< SCIP data structure */ 865 SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ 866 FILE* file, /**< output file (or NULL for standard output) */ 867 SCIP_Bool printzeros /**< should variables set to zero be printed? */ 868 ); 869 870 /** outputs discrete variables of solution in original problem space to the given file stream 871 * 872 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 873 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 874 * 875 * @pre This method can be called if @p scip is in one of the following stages: 876 * - \ref SCIP_STAGE_PROBLEM 877 * - \ref SCIP_STAGE_TRANSFORMED 878 * - \ref SCIP_STAGE_INITPRESOLVE 879 * - \ref SCIP_STAGE_PRESOLVING 880 * - \ref SCIP_STAGE_EXITPRESOLVE 881 * - \ref SCIP_STAGE_PRESOLVED 882 * - \ref SCIP_STAGE_INITSOLVE 883 * - \ref SCIP_STAGE_SOLVING 884 * - \ref SCIP_STAGE_SOLVED 885 * - \ref SCIP_STAGE_EXITSOLVE 886 */ 887 SCIP_EXPORT 888 SCIP_RETCODE SCIPprintMIPStart( 889 SCIP* scip, /**< SCIP data structure */ 890 SCIP_SOL* sol, /**< primal solution */ 891 FILE* file /**< output file (or NULL for standard output) */ 892 ); 893 894 /** returns dual solution value of a constraint */ 895 SCIP_EXPORT 896 SCIP_RETCODE SCIPgetDualSolVal( 897 SCIP* scip, /**< SCIP data structure */ 898 SCIP_CONS* cons, /**< constraint for which the dual solution should be returned */ 899 SCIP_Real* dualsolval, /**< pointer to store the dual solution value */ 900 SCIP_Bool* boundconstraint /**< pointer to store whether the constraint is a bound constraint (or NULL) */ 901 ); 902 903 /** check whether the dual solution is available 904 * 905 * @note This is used when calling \ref SCIPprintDualSol() 906 * 907 * @return is dual solution available? 908 * 909 * @pre This method can be called if SCIP is in one of the following stages: 910 * - \ref SCIP_STAGE_SOLVED 911 */ 912 SCIP_EXPORT 913 SCIP_Bool SCIPisDualSolAvailable( 914 SCIP* scip, /**< SCIP data structure */ 915 SCIP_Bool printreason /**< print warning message if dualsol is not available? */ 916 ); 917 918 /** outputs dual solution from LP solver to file stream 919 * 920 * @note This only works if no presolving has been performed, which can be checked by calling method \ref 921 * SCIPhasPerformedPresolve(). 922 * 923 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 924 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 925 * 926 * @pre This method can be called if SCIP is in one of the following stages: 927 * - \ref SCIP_STAGE_SOLVED 928 */ 929 SCIP_EXPORT 930 SCIP_RETCODE SCIPprintDualSol( 931 SCIP* scip, /**< SCIP data structure */ 932 FILE* file, /**< output file (or NULL for standard output) */ 933 SCIP_Bool printzeros /**< should variables set to zero be printed? */ 934 ); 935 936 937 /** outputs non-zero variables of solution representing a ray in original problem space to file stream 938 * 939 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 940 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 941 * 942 * @pre This method can be called if SCIP is in one of the following stages: 943 * - \ref SCIP_STAGE_PROBLEM 944 * - \ref SCIP_STAGE_TRANSFORMED 945 * - \ref SCIP_STAGE_INITPRESOLVE 946 * - \ref SCIP_STAGE_PRESOLVING 947 * - \ref SCIP_STAGE_EXITPRESOLVE 948 * - \ref SCIP_STAGE_PRESOLVED 949 * - \ref SCIP_STAGE_INITSOLVE 950 * - \ref SCIP_STAGE_SOLVING 951 * - \ref SCIP_STAGE_SOLVED 952 * - \ref SCIP_STAGE_EXITSOLVE 953 */ 954 SCIP_EXPORT 955 SCIP_RETCODE SCIPprintRay( 956 SCIP* scip, /**< SCIP data structure */ 957 SCIP_SOL* sol, /**< primal solution representing ray */ 958 FILE* file, /**< output file (or NULL for standard output) */ 959 SCIP_Bool printzeros /**< should variables set to zero be printed? */ 960 ); 961 962 /** gets number of feasible primal solutions stored in the solution storage in case the problem is transformed; 963 * in case the problem stage is SCIP_STAGE_PROBLEM, the number of solution in the original solution candidate 964 * storage is returned 965 * 966 * @return number of feasible primal solutions stored in the solution storage in case the problem is transformed; or 967 * number of solution in the original solution candidate storage if the problem stage is SCIP_STAGE_PROBLEM 968 * 969 * @pre This method can be called if SCIP is in one of the following stages: 970 * - \ref SCIP_STAGE_PROBLEM 971 * - \ref SCIP_STAGE_TRANSFORMED 972 * - \ref SCIP_STAGE_INITPRESOLVE 973 * - \ref SCIP_STAGE_PRESOLVING 974 * - \ref SCIP_STAGE_EXITPRESOLVE 975 * - \ref SCIP_STAGE_PRESOLVED 976 * - \ref SCIP_STAGE_INITSOLVE 977 * - \ref SCIP_STAGE_SOLVING 978 * - \ref SCIP_STAGE_SOLVED 979 * - \ref SCIP_STAGE_EXITSOLVE 980 */ 981 SCIP_EXPORT 982 int SCIPgetNSols( 983 SCIP* scip /**< SCIP data structure */ 984 ); 985 986 /** gets array of feasible primal solutions stored in the solution storage in case the problem is transformed; in case 987 * if the problem stage is in SCIP_STAGE_PROBLEM, it returns the number array of solution candidate stored 988 * 989 * @return array of feasible primal solutions 990 * 991 * @pre This method can be called if SCIP is in one of the following stages: 992 * - \ref SCIP_STAGE_PROBLEM 993 * - \ref SCIP_STAGE_TRANSFORMED 994 * - \ref SCIP_STAGE_INITPRESOLVE 995 * - \ref SCIP_STAGE_PRESOLVING 996 * - \ref SCIP_STAGE_EXITPRESOLVE 997 * - \ref SCIP_STAGE_PRESOLVED 998 * - \ref SCIP_STAGE_INITSOLVE 999 * - \ref SCIP_STAGE_SOLVING 1000 * - \ref SCIP_STAGE_SOLVED 1001 * - \ref SCIP_STAGE_EXITSOLVE 1002 */ 1003 SCIP_EXPORT 1004 SCIP_SOL** SCIPgetSols( 1005 SCIP* scip /**< SCIP data structure */ 1006 ); 1007 1008 /** gets best feasible primal solution found so far if the problem is transformed; in case the problem is in 1009 * SCIP_STAGE_PROBLEM it returns the best solution candidate, or NULL if no solution has been found or the candidate 1010 * store is empty; 1011 * 1012 * @return best feasible primal solution so far 1013 * 1014 * @pre This method can be called if SCIP is in one of the following stages: 1015 * - \ref SCIP_STAGE_PROBLEM 1016 * - \ref SCIP_STAGE_TRANSFORMED 1017 * - \ref SCIP_STAGE_INITPRESOLVE 1018 * - \ref SCIP_STAGE_PRESOLVING 1019 * - \ref SCIP_STAGE_EXITPRESOLVE 1020 * - \ref SCIP_STAGE_PRESOLVED 1021 * - \ref SCIP_STAGE_INITSOLVE 1022 * - \ref SCIP_STAGE_SOLVING 1023 * - \ref SCIP_STAGE_SOLVED 1024 * - \ref SCIP_STAGE_EXITSOLVE 1025 */ 1026 SCIP_EXPORT 1027 SCIP_SOL* SCIPgetBestSol( 1028 SCIP* scip /**< SCIP data structure */ 1029 ); 1030 1031 /** outputs best feasible primal solution found so far to file stream 1032 * 1033 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1034 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1035 * 1036 * @pre This method can be called if SCIP is in one of the following stages: 1037 * - \ref SCIP_STAGE_INIT 1038 * - \ref SCIP_STAGE_PROBLEM 1039 * - \ref SCIP_STAGE_TRANSFORMING 1040 * - \ref SCIP_STAGE_TRANSFORMED 1041 * - \ref SCIP_STAGE_INITPRESOLVE 1042 * - \ref SCIP_STAGE_PRESOLVING 1043 * - \ref SCIP_STAGE_EXITPRESOLVE 1044 * - \ref SCIP_STAGE_PRESOLVED 1045 * - \ref SCIP_STAGE_INITSOLVE 1046 * - \ref SCIP_STAGE_SOLVING 1047 * - \ref SCIP_STAGE_SOLVED 1048 * - \ref SCIP_STAGE_EXITSOLVE 1049 * - \ref SCIP_STAGE_FREE 1050 */ 1051 SCIP_EXPORT 1052 SCIP_RETCODE SCIPprintBestSol( 1053 SCIP* scip, /**< SCIP data structure */ 1054 FILE* file, /**< output file (or NULL for standard output) */ 1055 SCIP_Bool printzeros /**< should variables set to zero be printed? */ 1056 ); 1057 1058 /** outputs best feasible primal solution found so far in transformed variables to file stream 1059 * 1060 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1061 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1062 * 1063 * @pre This method can be called if SCIP is in one of the following stages: 1064 * - \ref SCIP_STAGE_INIT 1065 * - \ref SCIP_STAGE_PROBLEM 1066 * - \ref SCIP_STAGE_TRANSFORMING 1067 * - \ref SCIP_STAGE_TRANSFORMED 1068 * - \ref SCIP_STAGE_INITPRESOLVE 1069 * - \ref SCIP_STAGE_PRESOLVING 1070 * - \ref SCIP_STAGE_EXITPRESOLVE 1071 * - \ref SCIP_STAGE_PRESOLVED 1072 * - \ref SCIP_STAGE_INITSOLVE 1073 * - \ref SCIP_STAGE_SOLVING 1074 * - \ref SCIP_STAGE_SOLVED 1075 * - \ref SCIP_STAGE_EXITSOLVE 1076 * - \ref SCIP_STAGE_FREE 1077 */ 1078 SCIP_EXPORT 1079 SCIP_RETCODE SCIPprintBestTransSol( 1080 SCIP* scip, /**< SCIP data structure */ 1081 FILE* file, /**< output file (or NULL for standard output) */ 1082 SCIP_Bool printzeros /**< should variables set to zero be printed? */ 1083 ); 1084 1085 /** try to round given solution 1086 * 1087 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1088 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1089 * 1090 * @pre This method can be called if SCIP is in one of the following stages: 1091 * - \ref SCIP_STAGE_SOLVING 1092 */ 1093 SCIP_EXPORT 1094 SCIP_RETCODE SCIProundSol( 1095 SCIP* scip, /**< SCIP data structure */ 1096 SCIP_SOL* sol, /**< primal solution */ 1097 SCIP_Bool* success /**< pointer to store whether rounding was successful */ 1098 ); 1099 1100 /** retransforms solution to original problem space 1101 * 1102 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1103 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1104 * 1105 * @pre This method can be called if SCIP is in one of the following stages: 1106 * - \ref SCIP_STAGE_PROBLEM 1107 * - \ref SCIP_STAGE_TRANSFORMING 1108 * - \ref SCIP_STAGE_TRANSFORMED 1109 * - \ref SCIP_STAGE_INITPRESOLVE 1110 * - \ref SCIP_STAGE_PRESOLVING 1111 * - \ref SCIP_STAGE_EXITPRESOLVE 1112 * - \ref SCIP_STAGE_PRESOLVED 1113 * - \ref SCIP_STAGE_INITSOLVE 1114 * - \ref SCIP_STAGE_SOLVING 1115 * - \ref SCIP_STAGE_SOLVED 1116 * - \ref SCIP_STAGE_EXITSOLVE 1117 * - \ref SCIP_STAGE_FREETRANS 1118 */ 1119 SCIP_EXPORT 1120 SCIP_RETCODE SCIPretransformSol( 1121 SCIP* scip, /**< SCIP data structure */ 1122 SCIP_SOL* sol /**< primal CIP solution */ 1123 ); 1124 1125 /** reads a given solution file 1126 * 1127 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1128 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1129 * 1130 * @pre This method can be called if SCIP is in one of the following stages: 1131 * - \ref SCIP_STAGE_PROBLEM 1132 * - \ref SCIP_STAGE_TRANSFORMED 1133 * - \ref SCIP_STAGE_INITPRESOLVE 1134 * - \ref SCIP_STAGE_PRESOLVING 1135 * - \ref SCIP_STAGE_EXITPRESOLVE 1136 * - \ref SCIP_STAGE_PRESOLVED 1137 * - \ref SCIP_STAGE_INITSOLVE 1138 * - \ref SCIP_STAGE_SOLVING 1139 */ 1140 SCIP_EXPORT 1141 SCIP_RETCODE SCIPreadSol( 1142 SCIP* scip, /**< SCIP data structure */ 1143 const char* filename /**< name of the input file */ 1144 ); 1145 1146 /** reads a given solution file and store the solution values in the given solution pointer 1147 * 1148 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1149 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1150 * 1151 * @pre This method can be called if SCIP is in one of the following stages: 1152 * - \ref SCIP_STAGE_PROBLEM 1153 * - \ref SCIP_STAGE_TRANSFORMED 1154 * - \ref SCIP_STAGE_INITPRESOLVE 1155 * - \ref SCIP_STAGE_PRESOLVING 1156 * - \ref SCIP_STAGE_EXITPRESOLVE 1157 * - \ref SCIP_STAGE_PRESOLVED 1158 * - \ref SCIP_STAGE_INITSOLVE 1159 * - \ref SCIP_STAGE_SOLVING 1160 */ 1161 SCIP_EXPORT 1162 SCIP_RETCODE SCIPreadSolFile( 1163 SCIP* scip, /**< SCIP data structure */ 1164 const char* filename, /**< name of the input file */ 1165 SCIP_SOL* sol, /**< solution pointer */ 1166 SCIP_Bool xml, /**< true, iff the given solution in written in XML */ 1167 SCIP_Bool* partial, /**< pointer to store if the solution is partial */ 1168 SCIP_Bool* error /**< pointer store if an error occured */ 1169 ); 1170 1171 /** adds feasible primal solution to solution storage by copying it 1172 * 1173 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1174 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1175 * 1176 * @pre This method can be called if SCIP is in one of the following stages: 1177 * - \ref SCIP_STAGE_PROBLEM 1178 * - \ref SCIP_STAGE_TRANSFORMED 1179 * - \ref SCIP_STAGE_INITPRESOLVE 1180 * - \ref SCIP_STAGE_PRESOLVING 1181 * - \ref SCIP_STAGE_EXITPRESOLVE 1182 * - \ref SCIP_STAGE_PRESOLVED 1183 * - \ref SCIP_STAGE_SOLVING 1184 * - \ref SCIP_STAGE_FREETRANS 1185 * 1186 * @note Do not call during propagation, use heur_trysol instead. 1187 */ 1188 SCIP_EXPORT 1189 SCIP_RETCODE SCIPaddSol( 1190 SCIP* scip, /**< SCIP data structure */ 1191 SCIP_SOL* sol, /**< primal CIP solution */ 1192 SCIP_Bool* stored /**< stores whether given solution was good enough to keep */ 1193 ); 1194 1195 /** adds primal solution to solution storage, frees the solution afterwards 1196 * 1197 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1198 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1199 * 1200 * @pre This method can be called if SCIP is in one of the following stages: 1201 * - \ref SCIP_STAGE_PROBLEM 1202 * - \ref SCIP_STAGE_TRANSFORMED 1203 * - \ref SCIP_STAGE_INITPRESOLVE 1204 * - \ref SCIP_STAGE_PRESOLVING 1205 * - \ref SCIP_STAGE_EXITPRESOLVE 1206 * - \ref SCIP_STAGE_PRESOLVED 1207 * - \ref SCIP_STAGE_SOLVING 1208 * - \ref SCIP_STAGE_FREETRANS 1209 * 1210 * @note Do not call during propagation, use heur_trysol instead. 1211 */ 1212 SCIP_EXPORT 1213 SCIP_RETCODE SCIPaddSolFree( 1214 SCIP* scip, /**< SCIP data structure */ 1215 SCIP_SOL** sol, /**< pointer to primal CIP solution; is cleared in function call */ 1216 SCIP_Bool* stored /**< stores whether given solution was good enough to keep */ 1217 ); 1218 1219 /** adds current LP/pseudo solution to solution storage 1220 * 1221 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1222 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1223 * 1224 * @pre This method can be called if SCIP is in one of the following stages: 1225 * - \ref SCIP_STAGE_PRESOLVED 1226 * - \ref SCIP_STAGE_SOLVING 1227 */ 1228 SCIP_EXPORT 1229 SCIP_RETCODE SCIPaddCurrentSol( 1230 SCIP* scip, /**< SCIP data structure */ 1231 SCIP_HEUR* heur, /**< heuristic that found the solution */ 1232 SCIP_Bool* stored /**< stores whether given solution was good enough to keep */ 1233 ); 1234 1235 /** checks solution for feasibility; if possible, adds it to storage by copying 1236 * 1237 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1238 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1239 * 1240 * @pre This method can be called if SCIP is in one of the following stages: 1241 * - \ref SCIP_STAGE_TRANSFORMED 1242 * - \ref SCIP_STAGE_INITPRESOLVE 1243 * - \ref SCIP_STAGE_PRESOLVING 1244 * - \ref SCIP_STAGE_EXITPRESOLVE 1245 * - \ref SCIP_STAGE_PRESOLVED 1246 * - \ref SCIP_STAGE_SOLVING 1247 * 1248 * @note Do not call during propagation, use heur_trysol instead. 1249 */ 1250 SCIP_EXPORT 1251 SCIP_RETCODE SCIPtrySol( 1252 SCIP* scip, /**< SCIP data structure */ 1253 SCIP_SOL* sol, /**< primal CIP solution */ 1254 SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ 1255 SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ 1256 SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */ 1257 SCIP_Bool checkintegrality, /**< Has integrality to be checked? */ 1258 SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */ 1259 SCIP_Bool* stored /**< stores whether given solution was feasible and good enough to keep */ 1260 ); 1261 1262 /** checks primal solution; if feasible, adds it to storage; solution is freed afterwards 1263 * 1264 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1265 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1266 * 1267 * @pre This method can be called if SCIP is in one of the following stages: 1268 * - \ref SCIP_STAGE_TRANSFORMED 1269 * - \ref SCIP_STAGE_INITPRESOLVE 1270 * - \ref SCIP_STAGE_PRESOLVING 1271 * - \ref SCIP_STAGE_EXITPRESOLVE 1272 * - \ref SCIP_STAGE_PRESOLVED 1273 * - \ref SCIP_STAGE_SOLVING 1274 * 1275 * @note Do not call during propagation, use heur_trysol instead. 1276 */ 1277 SCIP_EXPORT 1278 SCIP_RETCODE SCIPtrySolFree( 1279 SCIP* scip, /**< SCIP data structure */ 1280 SCIP_SOL** sol, /**< pointer to primal CIP solution; is cleared in function call */ 1281 SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ 1282 SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ 1283 SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */ 1284 SCIP_Bool checkintegrality, /**< Has integrality to be checked? */ 1285 SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */ 1286 SCIP_Bool* stored /**< stores whether solution was feasible and good enough to keep */ 1287 ); 1288 1289 /** checks current LP/pseudo solution for feasibility; if possible, adds it to storage 1290 * 1291 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1292 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1293 * 1294 * @pre This method can be called if SCIP is in one of the following stages: 1295 * - \ref SCIP_STAGE_PRESOLVED 1296 * - \ref SCIP_STAGE_SOLVING 1297 */ 1298 SCIP_EXPORT 1299 SCIP_RETCODE SCIPtryCurrentSol( 1300 SCIP* scip, /**< SCIP data structure */ 1301 SCIP_HEUR* heur, /**< heuristic that found the solution */ 1302 SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ 1303 SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ 1304 SCIP_Bool checkintegrality, /**< Has integrality to be checked? */ 1305 SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */ 1306 SCIP_Bool* stored /**< stores whether given solution was feasible and good enough to keep */ 1307 ); 1308 1309 /** returns all partial solutions 1310 * 1311 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1312 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1313 * 1314 * @pre This method can be called if SCIP is in one of the following stages: 1315 * - \ref SCIP_STAGE_PROBLEM 1316 * - \ref SCIP_STAGE_PRESOLVING 1317 * - \ref SCIP_STAGE_SOLVING 1318 * - \ref SCIP_STAGE_SOLVED 1319 */ 1320 SCIP_EXPORT 1321 SCIP_SOL** SCIPgetPartialSols( 1322 SCIP* scip /**< SCIP data structure */ 1323 ); 1324 1325 /** returns number of partial solutions 1326 * 1327 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1328 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1329 * 1330 * @pre This method can be called if SCIP is in one of the following stages: 1331 * - \ref SCIP_STAGE_PROBLEM 1332 * - \ref SCIP_STAGE_PRESOLVING 1333 * - \ref SCIP_STAGE_SOLVING 1334 * - \ref SCIP_STAGE_SOLVED 1335 */ 1336 int SCIPgetNPartialSols( 1337 SCIP* scip /**< SCIP data structure */ 1338 ); 1339 1340 /** checks solution for feasibility without adding it to the solution store 1341 * 1342 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1343 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1344 * 1345 * @pre This method can be called if SCIP is in one of the following stages: 1346 * - \ref SCIP_STAGE_PROBLEM 1347 * - \ref SCIP_STAGE_TRANSFORMED 1348 * - \ref SCIP_STAGE_INITPRESOLVE 1349 * - \ref SCIP_STAGE_PRESOLVING 1350 * - \ref SCIP_STAGE_EXITPRESOLVE 1351 * - \ref SCIP_STAGE_PRESOLVED 1352 * - \ref SCIP_STAGE_INITSOLVE 1353 * - \ref SCIP_STAGE_SOLVING 1354 * - \ref SCIP_STAGE_SOLVED 1355 */ 1356 SCIP_EXPORT 1357 SCIP_RETCODE SCIPcheckSol( 1358 SCIP* scip, /**< SCIP data structure */ 1359 SCIP_SOL* sol, /**< primal CIP solution */ 1360 SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ 1361 SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ 1362 SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */ 1363 SCIP_Bool checkintegrality, /**< Has integrality to be checked? */ 1364 SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */ 1365 SCIP_Bool* feasible /**< stores whether given solution is feasible */ 1366 ); 1367 1368 /** checks solution for feasibility in original problem without adding it to the solution store; 1369 * this method is used to double check a solution in order to validate the presolving process 1370 * 1371 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1372 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1373 * 1374 * @pre This method can be called if SCIP is in one of the following stages: 1375 * - \ref SCIP_STAGE_PROBLEM 1376 * - \ref SCIP_STAGE_TRANSFORMED 1377 * - \ref SCIP_STAGE_INITPRESOLVE 1378 * - \ref SCIP_STAGE_PRESOLVING 1379 * - \ref SCIP_STAGE_EXITPRESOLVE 1380 * - \ref SCIP_STAGE_PRESOLVED 1381 * - \ref SCIP_STAGE_INITSOLVE 1382 * - \ref SCIP_STAGE_SOLVING 1383 * - \ref SCIP_STAGE_SOLVED 1384 */ 1385 SCIP_EXPORT 1386 SCIP_RETCODE SCIPcheckSolOrig( 1387 SCIP* scip, /**< SCIP data structure */ 1388 SCIP_SOL* sol, /**< primal CIP solution */ 1389 SCIP_Bool* feasible, /**< stores whether given solution is feasible */ 1390 SCIP_Bool printreason, /**< should the reason for the violation be printed? */ 1391 SCIP_Bool completely /**< Should all violations be checked if printreason is true? */ 1392 ); 1393 1394 /** update integrality violation of a solution */ 1395 SCIP_EXPORT 1396 void SCIPupdateSolIntegralityViolation( 1397 SCIP* scip, /**< SCIP data structure */ 1398 SCIP_SOL* sol, /**< primal CIP solution */ 1399 SCIP_Real absviol /**< absolute violation */ 1400 ); 1401 1402 /** update bound violation of a solution */ 1403 SCIP_EXPORT 1404 void SCIPupdateSolBoundViolation( 1405 SCIP* scip, /**< SCIP data structure */ 1406 SCIP_SOL* sol, /**< primal CIP solution */ 1407 SCIP_Real absviol, /**< absolute violation */ 1408 SCIP_Real relviol /**< relative violation */ 1409 ); 1410 1411 /** update LP row violation of a solution */ 1412 SCIP_EXPORT 1413 void SCIPupdateSolLPRowViolation( 1414 SCIP* scip, /**< SCIP data structure */ 1415 SCIP_SOL* sol, /**< primal CIP solution */ 1416 SCIP_Real absviol, /**< absolute violation */ 1417 SCIP_Real relviol /**< relative violation */ 1418 ); 1419 1420 /** update constraint violation of a solution */ 1421 SCIP_EXPORT 1422 void SCIPupdateSolConsViolation( 1423 SCIP* scip, /**< SCIP data structure */ 1424 SCIP_SOL* sol, /**< primal CIP solution */ 1425 SCIP_Real absviol, /**< absolute violation */ 1426 SCIP_Real relviol /**< relative violation */ 1427 ); 1428 1429 /** update LP row and constraint violations of a solution */ 1430 SCIP_EXPORT 1431 void SCIPupdateSolLPConsViolation( 1432 SCIP* scip, /**< SCIP data structure */ 1433 SCIP_SOL* sol, /**< primal CIP solution */ 1434 SCIP_Real absviol, /**< absolute violation */ 1435 SCIP_Real relviol /**< relative violation */ 1436 ); 1437 1438 /** allow violation updates */ 1439 SCIP_EXPORT 1440 void SCIPactivateSolViolationUpdates( 1441 SCIP* scip /**< SCIP data structure */ 1442 ); 1443 1444 /** disallow violation updates */ 1445 SCIP_EXPORT 1446 void SCIPdeactivateSolViolationUpdates( 1447 SCIP* scip /**< SCIP data structure */ 1448 ); 1449 1450 /** return whether a primal ray is stored that proves unboundedness of the LP relaxation 1451 * 1452 * @return return whether a primal ray is stored that proves unboundedness of the LP relaxation 1453 * 1454 * @pre This method can be called if SCIP is in one of the following stages: 1455 * - \ref SCIP_STAGE_SOLVING 1456 * - \ref SCIP_STAGE_SOLVED 1457 */ 1458 SCIP_EXPORT 1459 SCIP_Bool SCIPhasPrimalRay( 1460 SCIP* scip /**< SCIP data structure */ 1461 ); 1462 1463 /** gets value of given variable in primal ray causing unboundedness of the LP relaxation; 1464 * should only be called if such a ray is stored (check with SCIPhasPrimalRay()) 1465 * 1466 * @return value of given variable in primal ray causing unboundedness of the LP relaxation 1467 * 1468 * @pre This method can be called if SCIP is in one of the following stages: 1469 * - \ref SCIP_STAGE_SOLVING 1470 * - \ref SCIP_STAGE_SOLVED 1471 */ 1472 SCIP_EXPORT 1473 SCIP_Real SCIPgetPrimalRayVal( 1474 SCIP* scip, /**< SCIP data structure */ 1475 SCIP_VAR* var /**< variable to get value for */ 1476 ); 1477 1478 /** updates the primal ray thats proves unboundedness 1479 * 1480 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 1481 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 1482 * 1483 * @pre This method can be called if @p scip is in one of the following stages: 1484 * - \ref SCIP_STAGE_PRESOLVING 1485 * - \ref SCIP_STAGE_PRESOLVED 1486 * - \ref SCIP_STAGE_SOLVING 1487 * - \ref SCIP_STAGE_SOLVED 1488 * 1489 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages. 1490 */ 1491 SCIP_EXPORT 1492 SCIP_RETCODE SCIPupdatePrimalRay( 1493 SCIP* scip, /**< SCIP data structure */ 1494 SCIP_SOL* primalray /**< the new primal ray */ 1495 ); 1496 1497 /**@} */ 1498 1499 #ifdef __cplusplus 1500 } 1501 #endif 1502 1503 #endif 1504