Scippy

SCIP

Solving Constraint Integer Programs

scip_lp.h
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the program and library */
4/* SCIP --- Solving Constraint Integer Programs */
5/* */
6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file scip_lp.h
26 * @ingroup PUBLICCOREAPI
27 * @brief public methods for the LP relaxation, rows and columns
28 * @author Tobias Achterberg
29 * @author Timo Berthold
30 * @author Thorsten Koch
31 * @author Alexander Martin
32 * @author Marc Pfetsch
33 * @author Kati Wolter
34 * @author Gregor Hendel
35 * @author Leona Gottwald
36 */
37
38/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
39
40#ifndef __SCIP_SCIP_LP_H__
41#define __SCIP_SCIP_LP_H__
42
43
44#include "lpi/type_lpi.h"
45#include "scip/def.h"
46#include "scip/type_cons.h"
47#include "scip/type_lp.h"
48#include "scip/type_misc.h"
49#include "scip/type_retcode.h"
50#include "scip/type_scip.h"
51#include "scip/type_sepa.h"
52#include "scip/type_sol.h"
53#include "scip/type_var.h"
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59/**@addtogroup PublicLPMethods
60 *
61 * @{
62 */
63
64/** returns whether the LP was or is to be solved in the current node
65 *
66 * @return whether the LP was or is to be solved in the current node.
67 *
68 * @pre This method can be called if @p scip is in one of the following stages:
69 * - \ref SCIP_STAGE_SOLVING
70 *
71 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
72 */
73SCIP_EXPORT
75 SCIP* scip /**< SCIP data structure */
76 );
77
78/** returns whether the LP of the current node is already constructed
79 *
80 * @return whether the LP of the current node is already constructed.
81 *
82 * @pre This method can be called if @p scip is in one of the following stages:
83 * - \ref SCIP_STAGE_SOLVING
84 *
85 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
86 */
87SCIP_EXPORT
89 SCIP* scip /**< SCIP data structure */
90 );
91
92/** makes sure that the LP of the current node is loaded and may be accessed through the LP information methods
93 *
94 * @warning Contructing the LP might change the amount of variables known in the transformed problem and therefore also
95 * the variables array of SCIP (returned by SCIPgetVars() and SCIPgetVarsData()), so it might be necessary to
96 * call one of the later method after this one
97 *
98 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
99 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
100 *
101 * @pre This method can be called if @p scip is in one of the following stages:
102 * - \ref SCIP_STAGE_SOLVING
103 *
104 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
105 */
106SCIP_EXPORT
108 SCIP* scip, /**< SCIP data structure */
109 SCIP_Bool* cutoff /**< pointer to store whether the node can be cut off */
110 );
111
112/** makes sure that the LP of the current node is flushed
113 *
114 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
115 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
116 *
117 * @pre This method can be called if @p scip is in one of the following stages:
118 * - \ref SCIP_STAGE_SOLVING
119 *
120 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
121 */
122SCIP_EXPORT
124 SCIP* scip /**< SCIP data structure */
125 );
126
127/** gets solution status of current LP
128 *
129 * @return the solution status of current LP.
130 *
131 * @pre This method can be called if @p scip is in one of the following stages:
132 * - \ref SCIP_STAGE_SOLVING
133 *
134 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
135 */
136SCIP_EXPORT
138 SCIP* scip /**< SCIP data structure */
139 );
140
141/** returns whether the current LP solution passed the primal feasibility check
142 *
143 * @returns whether the current LP solution passed the primal feasibility check.
144 *
145 * @pre This method can be called if @p scip is in one of the following stages:
146 * - \ref SCIP_STAGE_SOLVING
147 *
148 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
149 */
150SCIP_EXPORT
152 SCIP* scip /**< SCIP data structure */
153 );
154
155/** returns whether the current LP solution passed the dual feasibility check
156 *
157 * @returns whether the current LP solution passed the dual feasibility check.
158 *
159 * @pre This method can be called if @p scip is in one of the following stages:
160 * - \ref SCIP_STAGE_SOLVING
161 *
162 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
163 */
164SCIP_EXPORT
166 SCIP* scip /**< SCIP data structure */
167 );
168
169/** returns whether the current lp is a relaxation of the current problem and its optimal objective value is a local lower bound
170 *
171 * @return whether the current lp is a relaxation of the current problem and its optimal objective value is a local lower bound.
172 *
173 * @pre This method can be called if @p scip is in one of the following stages:
174 * - \ref SCIP_STAGE_SOLVING
175 *
176 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
177 */
178SCIP_EXPORT
180 SCIP* scip /**< SCIP data structure */
181 );
182
183/** gets objective value of current LP (which is the sum of column and loose objective value)
184 *
185 * @return the objective value of current LP (which is the sum of column and loose objective value).
186 *
187 * @pre This method can be called if @p scip is in one of the following stages:
188 * - \ref SCIP_STAGE_SOLVING
189 *
190 * @note This method returns the objective value of the current LP solution, which might be primal or dual infeasible
191 * if a limit was hit during solving. It must not be used as a dual bound if the LP solution status returned by
192 * SCIPgetLPSolstat() is SCIP_LPSOLSTAT_ITERLIMIT or SCIP_LPSOLSTAT_TIMELIMIT.
193 *
194 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
195 */
196SCIP_EXPORT
198 SCIP* scip /**< SCIP data structure */
199 );
200
201/** gets part of objective value of current LP that results from COLUMN variables only
202 *
203 * @return the part of objective value of current LP that results from COLUMN variables only.
204 *
205 * @pre This method can be called if @p scip is in one of the following stages:
206 * - \ref SCIP_STAGE_SOLVING
207 *
208 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
209 */
210SCIP_EXPORT
212 SCIP* scip /**< SCIP data structure */
213 );
214
215/** gets part of objective value of current LP that results from LOOSE variables only
216 *
217 * @return part of objective value of current LP that results from LOOSE variables only.
218 *
219 * @pre This method can be called if @p scip is in one of the following stages:
220 * - \ref SCIP_STAGE_SOLVING
221 *
222 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
223 */
224SCIP_EXPORT
226 SCIP* scip /**< SCIP data structure */
227 );
228
229/** gets the global pseudo objective value; that is all variables set to their best (w.r.t. the objective
230 * function) global bound
231 *
232 * @return the global pseudo objective value; that is all variables set to their best (w.r.t. the objective
233 * function) global bound.
234 *
235 * @pre This method can be called if @p scip is in one of the following stages:
236 * - \ref SCIP_STAGE_INITPRESOLVE
237 * - \ref SCIP_STAGE_PRESOLVING
238 * - \ref SCIP_STAGE_EXITPRESOLVE
239 * - \ref SCIP_STAGE_PRESOLVED
240 * - \ref SCIP_STAGE_INITSOLVE
241 * - \ref SCIP_STAGE_SOLVING
242 *
243 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
244 */
245SCIP_EXPORT
247 SCIP* scip /**< SCIP data structure */
248 );
249
250/** gets the pseudo objective value for the current search node; that is all variables set to their best (w.r.t. the
251 * objective function) local bound
252 *
253 * @return the pseudo objective value for the current search node; that is all variables set to their best (w.r.t. the
254 * objective function) local bound.
255 *
256 * @pre This method can be called if @p scip is in one of the following stages:
257 * - \ref SCIP_STAGE_INITPRESOLVE
258 * - \ref SCIP_STAGE_PRESOLVING
259 * - \ref SCIP_STAGE_EXITPRESOLVE
260 * - \ref SCIP_STAGE_PRESOLVED
261 * - \ref SCIP_STAGE_INITSOLVE
262 * - \ref SCIP_STAGE_SOLVING
263 *
264 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
265 */
266SCIP_EXPORT
268 SCIP* scip /**< SCIP data structure */
269 );
270
271/** returns whether the root lp is a relaxation of the problem and its optimal objective value is a global lower bound
272 *
273 * @return whether the root lp is a relaxation of the problem and its optimal objective value is a global lower bound.
274 *
275 * @pre This method can be called if @p scip is in one of the following stages:
276 * - \ref SCIP_STAGE_SOLVING
277 *
278 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
279 */
280SCIP_EXPORT
282 SCIP* scip /**< SCIP data structure */
283 );
284
285/** gets the objective value of the root node LP or SCIP_INVALID if the root node LP was not (yet) solved
286 *
287 * @return the objective value of the root node LP or SCIP_INVALID if the root node LP was not (yet) solved.
288 *
289 * @pre This method can be called if @p scip is in one of the following stages:
290 * - \ref SCIP_STAGE_INITPRESOLVE
291 * - \ref SCIP_STAGE_PRESOLVING
292 * - \ref SCIP_STAGE_EXITPRESOLVE
293 * - \ref SCIP_STAGE_SOLVING
294 *
295 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
296 */
297SCIP_EXPORT
299 SCIP* scip /**< SCIP data structure */
300 );
301
302/** gets part of the objective value of the root node LP that results from COLUMN variables only;
303 * returns SCIP_INVALID if the root node LP was not (yet) solved
304 *
305 * @return the part of the objective value of the root node LP that results from COLUMN variables only;
306 * or SCIP_INVALID if the root node LP was not (yet) solved.
307 *
308 * @pre This method can be called if @p scip is in one of the following stages:
309 * - \ref SCIP_STAGE_INITPRESOLVE
310 * - \ref SCIP_STAGE_PRESOLVING
311 * - \ref SCIP_STAGE_EXITPRESOLVE
312 * - \ref SCIP_STAGE_SOLVING
313 *
314 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
315 */
316SCIP_EXPORT
318 SCIP* scip /**< SCIP data structure */
319 );
320
321/** gets part of the objective value of the root node LP that results from LOOSE variables only;
322 * returns SCIP_INVALID if the root node LP was not (yet) solved
323 *
324 * @return the part of the objective value of the root node LP that results from LOOSE variables only;
325 * or SCIP_INVALID if the root node LP was not (yet) solved.
326 *
327 * @pre This method can be called if @p scip is in one of the following stages:
328 * - \ref SCIP_STAGE_INITPRESOLVE
329 * - \ref SCIP_STAGE_PRESOLVING
330 * - \ref SCIP_STAGE_EXITPRESOLVE
331 * - \ref SCIP_STAGE_SOLVING
332 *
333 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
334 */
335SCIP_EXPORT
337 SCIP* scip /**< SCIP data structure */
338 );
339
340/** gets current primal feasibility tolerance of LP */
341SCIP_EXPORT
343 SCIP* scip /**< SCIP data structure */
344 );
345
346/** sets primal feasibility tolerance of LP */
347SCIP_EXPORT
349 SCIP* scip, /**< SCIP data structure */
350 SCIP_Real newfeastol /**< new primal feasibility tolerance for LP */
351 );
352
353/** resets primal feasibility tolerance of LP
354 *
355 * Sets primal feasibility tolerance to min of numerics/lpfeastolfactor * numerics/feastol and relaxfeastol.
356 */
357SCIP_EXPORT
359 SCIP* scip /**< SCIP data structure */
360 );
361
362/** gets current LP columns along with the current number of LP columns
363 *
364 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
365 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
366 *
367 * @pre This method can be called if @p scip is in one of the following stages:
368 * - \ref SCIP_STAGE_SOLVING
369 *
370 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
371 */
372SCIP_EXPORT
374 SCIP* scip, /**< SCIP data structure */
375 SCIP_COL*** cols, /**< pointer to store the array of LP columns, or NULL */
376 int* ncols /**< pointer to store the number of LP columns, or NULL */
377 );
378
379/** gets current LP columns
380 *
381 * @return the current LP columns.
382 *
383 * @pre This method can be called if @p scip is in one of the following stages:
384 * - \ref SCIP_STAGE_SOLVING
385 *
386 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
387 */
388SCIP_EXPORT
390 SCIP* scip /**< SCIP data structure */
391 );
392
393/** gets current number of LP columns
394 *
395 * @return the current number of LP columns.
396 *
397 * @pre This method can be called if @p scip is in one of the following stages:
398 * - \ref SCIP_STAGE_SOLVING
399 *
400 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
401 */
402SCIP_EXPORT
404 SCIP* scip /**< SCIP data structure */
405 );
406
407/** gets current number of unfixed LP columns
408 *
409 * @return the current number of unfixed LP columns.
410 *
411 * @pre This method can be called if @p scip is in one of the following stages:
412 * - \ref SCIP_STAGE_SOLVING
413 *
414 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
415 */
416SCIP_EXPORT
418 SCIP* scip /**< SCIP data structure */
419 );
420
421/** gets current LP rows along with the current number of LP rows
422 *
423 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
424 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
425 *
426 * @pre This method can be called if @p scip is in one of the following stages:
427 * - \ref SCIP_STAGE_SOLVING
428 *
429 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
430 */
431SCIP_EXPORT
433 SCIP* scip, /**< SCIP data structure */
434 SCIP_ROW*** rows, /**< pointer to store the array of LP rows, or NULL */
435 int* nrows /**< pointer to store the number of LP rows, or NULL */
436 );
437
438/** gets current LP rows
439 *
440 * @return the current LP rows.
441 *
442 * @pre This method can be called if @p scip is in one of the following stages:
443 * - \ref SCIP_STAGE_SOLVING
444 *
445 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
446 */
447SCIP_EXPORT
449 SCIP* scip /**< SCIP data structure */
450 );
451
452/** gets current number of LP rows
453 *
454 * @return the current number of LP rows.
455 *
456 * @pre This method can be called if @p scip is in one of the following stages:
457 * - \ref SCIP_STAGE_SOLVING
458 *
459 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
460 */
461SCIP_EXPORT
463 SCIP* scip /**< SCIP data structure */
464 );
465
466/** returns TRUE iff all columns, i.e. every variable with non-empty column w.r.t. all ever created rows, are present
467 * in the LP, and FALSE, if there are additional already existing columns, that may be added to the LP in pricing
468 *
469 * @return TRUE iff all columns, i.e. every variable with non-empty column w.r.t. all ever created rows, are present
470 * in the LP, and FALSE, if there are additional already existing columns, that may be added to the LP in pricing.
471 *
472 * @pre This method can be called if @p scip is in one of the following stages:
473 * - \ref SCIP_STAGE_SOLVING
474 *
475 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
476 */
477SCIP_EXPORT
479 SCIP* scip /**< SCIP data structure */
480 );
481
482/** returns whether the current LP solution is basic, i.e. is defined by a valid simplex basis
483 *
484 * @return whether the current LP solution is basic, i.e. is defined by a valid simplex basis.
485 *
486 * @pre This method can be called if @p scip is in one of the following stages:
487 * - \ref SCIP_STAGE_SOLVING
488 *
489 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
490 */
491SCIP_EXPORT
493 SCIP* scip /**< SCIP data structure */
494 );
495
496/** gets all indices of basic columns and rows: index i >= 0 corresponds to column i, index i < 0 to row -i-1
497 *
498 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
499 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
500 *
501 * @pre This method can be called if @p scip is in one of the following stages:
502 * - \ref SCIP_STAGE_SOLVING
503 *
504 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
505 */
506SCIP_EXPORT
508 SCIP* scip, /**< SCIP data structure */
509 int* basisind /**< pointer to store basis indices ready to keep number of rows entries */
510 );
511
512/** gets a row from the inverse basis matrix B^-1
513 *
514 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
515 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
516 *
517 * @pre This method can be called if @p scip is in one of the following stages:
518 * - \ref SCIP_STAGE_SOLVING
519 *
520 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
521 */
522SCIP_EXPORT
524 SCIP* scip, /**< SCIP data structure */
525 int r, /**< row number */
526 SCIP_Real* coefs, /**< array to store the coefficients of the row */
527 int* inds, /**< array to store the non-zero indices, or NULL */
528 int* ninds /**< pointer to store the number of non-zero indices, or NULL
529 * (-1: if we do not store sparsity informations) */
530 );
531
532/** gets a column from the inverse basis matrix B^-1
533 *
534 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
535 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
536 *
537 * @pre This method can be called if @p scip is in one of the following stages:
538 * - \ref SCIP_STAGE_SOLVING
539 *
540 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
541 */
542SCIP_EXPORT
544 SCIP* scip, /**< SCIP data structure */
545 int c, /**< column number of B^-1; this is NOT the number of the column in the LP
546 * returned by SCIPcolGetLPPos(); you have to call SCIPgetBasisInd()
547 * to get the array which links the B^-1 column numbers to the row and
548 * column numbers of the LP! c must be between 0 and nrows-1, since the
549 * basis has the size nrows * nrows */
550 SCIP_Real* coefs, /**< array to store the coefficients of the column */
551 int* inds, /**< array to store the non-zero indices, or NULL */
552 int* ninds /**< pointer to store the number of non-zero indices, or NULL
553 * (-1: if we do not store sparsity informations) */
554 );
555
556/** gets a row from the product of inverse basis matrix B^-1 and coefficient matrix A (i.e. from B^-1 * A)
557 *
558 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
559 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
560 *
561 * @pre This method can be called if @p scip is in one of the following stages:
562 * - \ref SCIP_STAGE_SOLVING
563 *
564 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
565 */
566SCIP_EXPORT
568 SCIP* scip, /**< SCIP data structure */
569 int r, /**< row number */
570 SCIP_Real* binvrow, /**< row in B^-1 from prior call to SCIPgetLPBInvRow(), or NULL */
571 SCIP_Real* coefs, /**< array to store the coefficients of the row */
572 int* inds, /**< array to store the non-zero indices, or NULL */
573 int* ninds /**< pointer to store the number of non-zero indices, or NULL
574 * (-1: if we do not store sparsity informations) */
575 );
576
577/** gets a column from the product of inverse basis matrix B^-1 and coefficient matrix A (i.e. from B^-1 * A),
578 * i.e., it computes B^-1 * A_c with A_c being the c'th column of A
579 *
580 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
581 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
582 *
583 * @pre This method can be called if @p scip is in one of the following stages:
584 * - \ref SCIP_STAGE_SOLVING
585 *
586 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
587 */
588SCIP_EXPORT
590 SCIP* scip, /**< SCIP data structure */
591 int c, /**< column number which can be accessed by SCIPcolGetLPPos() */
592 SCIP_Real* coefs, /**< array to store the coefficients of the column */
593 int* inds, /**< array to store the non-zero indices, or NULL */
594 int* ninds /**< pointer to store the number of non-zero indices, or NULL
595 * (-1: if we do not store sparsity informations) */
596 );
597
598/** calculates a weighted sum of all LP rows; for negative weights, the left and right hand side of the corresponding
599 * LP row are swapped in the summation
600 *
601 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
602 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
603 *
604 * @pre This method can be called if @p scip is in one of the following stages:
605 * - \ref SCIP_STAGE_SOLVING
606 *
607 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
608 */
609SCIP_EXPORT
611 SCIP* scip, /**< SCIP data structure */
612 SCIP_Real* weights, /**< row weights in row summation */
613 SCIP_REALARRAY* sumcoef, /**< array to store sum coefficients indexed by variables' probindex */
614 SCIP_Real* sumlhs, /**< pointer to store the left hand side of the row summation */
615 SCIP_Real* sumrhs /**< pointer to store the right hand side of the row summation */
616 );
617
618/** interrupts or disables the interrupt of the currently ongoing lp solve; if the lp is not currently constructed just returns with no effect
619 *
620 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
621 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
622 *
623 * @pre This method can be called if @p scip is in one of the following stages:
624 * - \ref SCIP_STAGE_SOLVING
625 *
626 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
627 */
628SCIP_EXPORT
630 SCIP* scip, /**< SCIP data structure */
631 SCIP_Bool interrupt /**< TRUE if interrupt should be set, FALSE if it should be disabled */
632 );
633
634/** writes current LP to a file
635 *
636 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
637 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
638 *
639 * @pre This method can be called if @p scip is in one of the following stages:
640 * - \ref SCIP_STAGE_SOLVING
641 *
642 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
643 */
644SCIP_EXPORT
646 SCIP* scip, /**< SCIP data structure */
647 const char* filename /**< file name */
648 );
649
650/** writes MIP relaxation of the current branch-and-bound node to a file
651 *
652 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
653 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
654 *
655 * @pre This method can be called if @p scip is in one of the following stages:
656 * - \ref SCIP_STAGE_SOLVING
657 *
658 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
659 */
660SCIP_EXPORT
662 SCIP* scip, /**< SCIP data structure */
663 const char* filename, /**< file name */
664 SCIP_Bool genericnames, /**< should generic names like x_i and row_j be used in order to avoid
665 * troubles with reserved symbols? */
666 SCIP_Bool origobj, /**< should the original objective function be used? */
667 SCIP_Bool lazyconss /**< output removable rows as lazy constraints? */
668 );
669
670/** gets the LP interface of SCIP;
671 * with the LPI you can use all of the methods defined in lpi/lpi.h;
672 *
673 * @warning You have to make sure, that the full internal state of the LPI does not change or is recovered completely
674 * after the end of the method that uses the LPI. In particular, if you manipulate the LP or its solution
675 * (e.g. by calling one of the SCIPlpiAdd...() or one of the SCIPlpiSolve...() methods), you have to check in
676 * advance with SCIPlpiWasSolved() whether the LP is currently solved. If this is the case, you have to make
677 * sure, the internal solution status is recovered completely at the end of your method. This can be achieved
678 * by getting the LPI state before applying any LPI manipulations with SCIPlpiGetState() and restoring it
679 * afterwards with SCIPlpiSetState() and SCIPlpiFreeState(). Additionally you have to resolve the LP with the
680 * appropriate SCIPlpiSolve...() call in order to reinstall the internal solution status.
681 *
682 * @warning Make also sure, that all parameter values that you have changed are set back to their original values.
683 *
684 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
685 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
686 *
687 * @pre This method can be called if @p scip is in one of the following stages:
688 * - \ref SCIP_STAGE_TRANSFORMED
689 * - \ref SCIP_STAGE_INITPRESOLVE
690 * - \ref SCIP_STAGE_PRESOLVING
691 * - \ref SCIP_STAGE_EXITPRESOLVE
692 * - \ref SCIP_STAGE_PRESOLVED
693 * - \ref SCIP_STAGE_INITSOLVE
694 * - \ref SCIP_STAGE_SOLVING
695 * - \ref SCIP_STAGE_SOLVED
696 * - \ref SCIP_STAGE_EXITSOLVE
697 *
698 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
699 */
700SCIP_EXPORT
702 SCIP* scip, /**< SCIP data structure */
703 SCIP_LPI** lpi /**< pointer to store the LP interface */
704 );
705
706/** Displays quality information about the current LP solution. An LP solution need to be available. Information printed
707 * is subject to what the LP solver supports
708 *
709 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
710 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
711 *
712 * @pre This method can be called if @p scip is in one of the following stages:
713 * - \ref SCIP_STAGE_INIT
714 * - \ref SCIP_STAGE_PROBLEM
715 * - \ref SCIP_STAGE_TRANSFORMED
716 * - \ref SCIP_STAGE_INITPRESOLVE
717 * - \ref SCIP_STAGE_PRESOLVING
718 * - \ref SCIP_STAGE_EXITPRESOLVE
719 * - \ref SCIP_STAGE_PRESOLVED
720 * - \ref SCIP_STAGE_SOLVING
721 * - \ref SCIP_STAGE_SOLVED
722 * - \ref SCIP_STAGE_FREE
723 *
724 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
725 *
726 * @note The printing process is done via the message handler system.
727 */
728SCIP_EXPORT
730 SCIP* scip, /**< SCIP data structure */
731 FILE* file /**< output file (or NULL for standard output) */
732 );
733
734/** compute relative interior point to current LP
735 * @see SCIPlpComputeRelIntPoint
736 *
737 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
738 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
739 *
740 * @pre This method can be called if @p scip is in one of the following stages:
741 * - \ref SCIP_STAGE_TRANSFORMED
742 * - \ref SCIP_STAGE_INITPRESOLVE
743 * - \ref SCIP_STAGE_PRESOLVING
744 * - \ref SCIP_STAGE_EXITPRESOLVE
745 * - \ref SCIP_STAGE_PRESOLVED
746 * - \ref SCIP_STAGE_SOLVING
747 * - \ref SCIP_STAGE_SOLVED
748 *
749 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
750 */
751SCIP_EXPORT
753 SCIP* scip, /**< SCIP data structure */
754 SCIP_Bool relaxrows, /**< should the rows be relaxed */
755 SCIP_Bool inclobjcutoff, /**< should a row for the objective cutoff be included */
756 SCIP_Real timelimit, /**< time limit for LP solver */
757 int iterlimit, /**< iteration limit for LP solver */
758 SCIP_SOL** point /**< relative interior point on exit */
759 );
760
761/**@} */
762
763/**@addtogroup PublicColumnMethods
764 *
765 * @{
766 */
767
768/** returns the reduced costs of a column in the last (feasible) LP
769 *
770 * @return the reduced costs of a column in the last (feasible) LP
771 *
772 * @pre this method can be called in one of the following stages of the SCIP solving process:
773 * - \ref SCIP_STAGE_SOLVING
774 * - \ref SCIP_STAGE_SOLVED
775 *
776 * @note calling this method in SCIP_STAGE_SOLVED is only recommended to experienced users and should only be called
777 * for pure LP instances (without presolving)
778 *
779 * @note The return value of this method should be used carefully if the dual feasibility check was explictely disabled.
780 */
781SCIP_EXPORT
783 SCIP* scip, /**< SCIP data structure */
784 SCIP_COL* col /**< LP column */
785 );
786
787/** returns the Farkas coefficient of a column in the last (infeasible) LP
788 *
789 * @return the Farkas coefficient of a column in the last (infeasible) LP
790 *
791 * @pre this method can be called in one of the following stages of the SCIP solving process:
792 * - \ref SCIP_STAGE_SOLVING
793 */
794SCIP_EXPORT
796 SCIP* scip, /**< SCIP data structure */
797 SCIP_COL* col /**< LP column */
798 );
799
800/** marks a column to be not removable from the LP in the current node
801 *
802 * @pre this method can be called in the following stage of the SCIP solving process:
803 * - \ref SCIP_STAGE_SOLVING
804 */
805SCIP_EXPORT
807 SCIP* scip, /**< SCIP data structure */
808 SCIP_COL* col /**< LP column */
809 );
810
811/**@} */
812
813/**@addtogroup PublicRowMethods
814 *
815 * @{
816 */
817
818/** creates and captures an LP row from a constraint handler
819 *
820 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
821 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
822 *
823 * @pre this method can be called in one of the following stages of the SCIP solving process:
824 * - \ref SCIP_STAGE_SOLVING
825 */
826SCIP_EXPORT
828 SCIP* scip, /**< SCIP data structure */
829 SCIP_ROW** row, /**< pointer to row */
830 SCIP_CONSHDLR* conshdlr, /**< constraint handler that creates the row */
831 const char* name, /**< name of row */
832 int len, /**< number of nonzeros in the row */
833 SCIP_COL** cols, /**< array with columns of row entries */
834 SCIP_Real* vals, /**< array with coefficients of row entries */
835 SCIP_Real lhs, /**< left hand side of row */
836 SCIP_Real rhs, /**< right hand side of row */
837 SCIP_Bool local, /**< is row only valid locally? */
838 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
839 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
840 );
841
842/** creates and captures an LP row from a constraint
843 *
844 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
845 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
846 *
847 * @pre this method can be called in one of the following stages of the SCIP solving process:
848 * - \ref SCIP_STAGE_SOLVING
849 */
850SCIP_EXPORT
852 SCIP* scip, /**< SCIP data structure */
853 SCIP_ROW** row, /**< pointer to row */
854 SCIP_CONS* cons, /**< constraint that creates the row */
855 const char* name, /**< name of row */
856 int len, /**< number of nonzeros in the row */
857 SCIP_COL** cols, /**< array with columns of row entries */
858 SCIP_Real* vals, /**< array with coefficients of row entries */
859 SCIP_Real lhs, /**< left hand side of row */
860 SCIP_Real rhs, /**< right hand side of row */
861 SCIP_Bool local, /**< is row only valid locally? */
862 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
863 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
864 );
865
866/** creates and captures an LP row from a separator
867 *
868 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
869 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
870 *
871 * @pre this method can be called in one of the following stages of the SCIP solving process:
872 * - \ref SCIP_STAGE_SOLVING
873 */
874SCIP_EXPORT
876 SCIP* scip, /**< SCIP data structure */
877 SCIP_ROW** row, /**< pointer to row */
878 SCIP_SEPA* sepa, /**< separator that creates the row */
879 const char* name, /**< name of row */
880 int len, /**< number of nonzeros in the row */
881 SCIP_COL** cols, /**< array with columns of row entries */
882 SCIP_Real* vals, /**< array with coefficients of row entries */
883 SCIP_Real lhs, /**< left hand side of row */
884 SCIP_Real rhs, /**< right hand side of row */
885 SCIP_Bool local, /**< is row only valid locally? */
886 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
887 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
888 );
889
890/** creates and captures an LP row from an unspecified source
891 *
892 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
893 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
894 *
895 * @pre this method can be called in one of the following stages of the SCIP solving process:
896 * - \ref SCIP_STAGE_SOLVING
897 */
898SCIP_EXPORT
900 SCIP* scip, /**< SCIP data structure */
901 SCIP_ROW** row, /**< pointer to row */
902 const char* name, /**< name of row */
903 int len, /**< number of nonzeros in the row */
904 SCIP_COL** cols, /**< array with columns of row entries */
905 SCIP_Real* vals, /**< array with coefficients of row entries */
906 SCIP_Real lhs, /**< left hand side of row */
907 SCIP_Real rhs, /**< right hand side of row */
908 SCIP_Bool local, /**< is row only valid locally? */
909 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
910 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
911 );
912
913/** creates and captures an LP row without any coefficients from a constraint handler
914 *
915 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
916 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
917 *
918 * @pre this method can be called in one of the following stages of the SCIP solving process:
919 * - \ref SCIP_STAGE_INITSOLVE
920 * - \ref SCIP_STAGE_SOLVING
921 */
922SCIP_EXPORT
924 SCIP* scip, /**< SCIP data structure */
925 SCIP_ROW** row, /**< pointer to row */
926 SCIP_CONSHDLR* conshdlr, /**< constraint handler that creates the row */
927 const char* name, /**< name of row */
928 SCIP_Real lhs, /**< left hand side of row */
929 SCIP_Real rhs, /**< right hand side of row */
930 SCIP_Bool local, /**< is row only valid locally? */
931 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
932 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
933 );
934
935/** creates and captures an LP row without any coefficients from a constraint
936 *
937 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
938 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
939 *
940 * @pre this method can be called in one of the following stages of the SCIP solving process:
941 * - \ref SCIP_STAGE_INITSOLVE
942 * - \ref SCIP_STAGE_SOLVING
943 */
944SCIP_EXPORT
946 SCIP* scip, /**< SCIP data structure */
947 SCIP_ROW** row, /**< pointer to row */
948 SCIP_CONS* cons, /**< constraint that creates the row */
949 const char* name, /**< name of row */
950 SCIP_Real lhs, /**< left hand side of row */
951 SCIP_Real rhs, /**< right hand side of row */
952 SCIP_Bool local, /**< is row only valid locally? */
953 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
954 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
955 );
956
957/** creates and captures an LP row without any coefficients from a separator
958 *
959 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
960 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
961 *
962 * @pre this method can be called in one of the following stages of the SCIP solving process:
963 * - \ref SCIP_STAGE_INITSOLVE
964 * - \ref SCIP_STAGE_SOLVING
965 */
966SCIP_EXPORT
968 SCIP* scip, /**< SCIP data structure */
969 SCIP_ROW** row, /**< pointer to row */
970 SCIP_SEPA* sepa, /**< separator that creates the row */
971 const char* name, /**< name of row */
972 SCIP_Real lhs, /**< left hand side of row */
973 SCIP_Real rhs, /**< right hand side of row */
974 SCIP_Bool local, /**< is row only valid locally? */
975 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
976 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
977 );
978
979/** creates and captures an LP row without any coefficients from an unspecified source
980 *
981 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
982 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
983 *
984 * @pre this method can be called in one of the following stages of the SCIP solving process:
985 * - \ref SCIP_STAGE_INITSOLVE
986 * - \ref SCIP_STAGE_SOLVING
987 */
988SCIP_EXPORT
990 SCIP* scip, /**< SCIP data structure */
991 SCIP_ROW** row, /**< pointer to row */
992 const char* name, /**< name of row */
993 SCIP_Real lhs, /**< left hand side of row */
994 SCIP_Real rhs, /**< right hand side of row */
995 SCIP_Bool local, /**< is row only valid locally? */
996 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */
997 SCIP_Bool removable /**< should the row be removed from the LP due to aging or cleanup? */
998 );
999
1000/** increases usage counter of LP row
1001 *
1002 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1003 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1004 *
1005 * @pre this method can be called in one of the following stages of the SCIP solving process:
1006 * - \ref SCIP_STAGE_INITSOLVE
1007 * - \ref SCIP_STAGE_SOLVING
1008 */
1009SCIP_EXPORT
1011 SCIP* scip, /**< SCIP data structure */
1012 SCIP_ROW* row /**< row to capture */
1013 );
1014
1015/** decreases usage counter of LP row, and frees memory if necessary
1016 *
1017 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1018 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1019 *
1020 * @pre this method can be called in one of the following stages of the SCIP solving process:
1021 * - \ref SCIP_STAGE_INITSOLVE
1022 * - \ref SCIP_STAGE_SOLVING
1023 * - \ref SCIP_STAGE_EXITSOLVE
1024 */
1025SCIP_EXPORT
1027 SCIP* scip, /**< SCIP data structure */
1028 SCIP_ROW** row /**< pointer to LP row */
1029 );
1030
1031/** changes left hand side of LP row
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 in one of the following stages of the SCIP solving process:
1037 * - \ref SCIP_STAGE_INITSOLVE
1038 * - \ref SCIP_STAGE_SOLVING
1039 */
1040SCIP_EXPORT
1042 SCIP* scip, /**< SCIP data structure */
1043 SCIP_ROW* row, /**< LP row */
1044 SCIP_Real lhs /**< new left hand side */
1045 );
1046
1047/** changes right hand side of LP row
1048 *
1049 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1050 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1051 *
1052 * @pre this method can be called in one of the following stages of the SCIP solving process:
1053 * - \ref SCIP_STAGE_INITSOLVE
1054 * - \ref SCIP_STAGE_SOLVING
1055 */
1056SCIP_EXPORT
1058 SCIP* scip, /**< SCIP data structure */
1059 SCIP_ROW* row, /**< LP row */
1060 SCIP_Real rhs /**< new right hand side */
1061 );
1062
1063/** informs row, that all subsequent additions of variables to the row should be cached and not directly applied;
1064 * after all additions were applied, SCIPflushRowExtensions() must be called;
1065 * while the caching of row extensions is activated, information methods of the row give invalid results;
1066 * caching should be used, if a row is build with SCIPaddVarToRow() calls variable by variable to increase
1067 * the performance
1068 *
1069 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1070 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1071 *
1072 * @pre this method can be called in one of the following stages of the SCIP solving process:
1073 * - \ref SCIP_STAGE_INITSOLVE
1074 * - \ref SCIP_STAGE_SOLVING
1075 */
1076SCIP_EXPORT
1078 SCIP* scip, /**< SCIP data structure */
1079 SCIP_ROW* row /**< LP row */
1080 );
1081
1082/** flushes all cached row extensions after a call of SCIPcacheRowExtensions() and merges coefficients with
1083 * equal columns into a single coefficient
1084 *
1085 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1086 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1087 *
1088 * @pre this method can be called in one of the following stages of the SCIP solving process:
1089 * - \ref SCIP_STAGE_INITSOLVE
1090 * - \ref SCIP_STAGE_SOLVING
1091 */
1092SCIP_EXPORT
1094 SCIP* scip, /**< SCIP data structure */
1095 SCIP_ROW* row /**< LP row */
1096 );
1097
1098/** resolves variable to columns and adds them with the coefficient to the row
1099 *
1100 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1101 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1102 *
1103 * @attention If the absolute value of val is below the SCIP epsilon tolerance, the variable will not added.
1104 *
1105 * @pre this method can be called in one of the following stages of the SCIP solving process:
1106 * - \ref SCIP_STAGE_SOLVING
1107 *
1108 * @note In case calling this method in the enforcement process of an lp solution, it might be that some variables,
1109 * that were not yet in the LP (e.g. dynamic columns) will change their lp solution value returned by SCIP.
1110 * For example, a variable, which has a negative objective value, that has no column in the lp yet, is in the lp solution
1111 * on its upper bound (variables with status SCIP_VARSTATUS_LOOSE are in an lp solution on it's best bound), but
1112 * creating the column, changes the solution value (variable than has status SCIP_VARSTATUS_COLUMN, and the
1113 * initialization sets the lp solution value) to 0.0. (This leads to the conclusion that, if a constraint was
1114 * violated, the linear relaxation might not be violated anymore.)
1115 *
1116 * @note When several variables are added to a row with the use of this function, performance can be improved by
1117 * calling SCIPcacheRowExtensions() before these additions and SCIPflushRowExtensions() after.
1118 */
1119SCIP_EXPORT
1121 SCIP* scip, /**< SCIP data structure */
1122 SCIP_ROW* row, /**< LP row */
1123 SCIP_VAR* var, /**< problem variable */
1124 SCIP_Real val /**< value of coefficient */
1125 );
1126
1127/** resolves variables to columns and adds them with the coefficients to the row;
1128 * this method caches the row extensions and flushes them afterwards to gain better performance
1129 *
1130 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1131 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1132 *
1133 * @attention If a coefficients absolute value is below the SCIP epsilon tolerance, the variable with its value is not added.
1134 *
1135 * @pre this method can be called in one of the following stages of the SCIP solving process:
1136 * - \ref SCIP_STAGE_SOLVING
1137 */
1138SCIP_EXPORT
1140 SCIP* scip, /**< SCIP data structure */
1141 SCIP_ROW* row, /**< LP row */
1142 int nvars, /**< number of variables to add to the row */
1143 SCIP_VAR** vars, /**< problem variables to add */
1144 SCIP_Real* vals /**< values of coefficients */
1145 );
1146
1147/** resolves variables to columns and adds them with the same single coefficient to the row;
1148 * this method caches the row extensions and flushes them afterwards to gain better performance
1149 *
1150 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1151 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1152 *
1153 * @attention If the absolute value of val is below the SCIP epsilon tolerance, the variables will not added.
1154 *
1155 * @pre this method can be called in one of the following stages of the SCIP solving process:
1156 * - \ref SCIP_STAGE_SOLVING
1157 */
1158SCIP_EXPORT
1160 SCIP* scip, /**< SCIP data structure */
1161 SCIP_ROW* row, /**< LP row */
1162 int nvars, /**< number of variables to add to the row */
1163 SCIP_VAR** vars, /**< problem variables to add */
1164 SCIP_Real val /**< unique value of all coefficients */
1165 );
1166
1167/** tries to find a value, such that all row coefficients, if scaled with this value become integral
1168 *
1169 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1170 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1171 *
1172 * @pre this method can be called in one of the following stages of the SCIP solving process:
1173 * - \ref SCIP_STAGE_INITSOLVE
1174 * - \ref SCIP_STAGE_SOLVING
1175 */
1176SCIP_EXPORT
1178 SCIP* scip, /**< SCIP data structure */
1179 SCIP_ROW* row, /**< LP row */
1180 SCIP_Real mindelta, /**< minimal relative allowed difference of scaled coefficient s*c and integral i */
1181 SCIP_Real maxdelta, /**< maximal relative allowed difference of scaled coefficient s*c and integral i */
1182 SCIP_Longint maxdnom, /**< maximal denominator allowed in rational numbers */
1183 SCIP_Real maxscale, /**< maximal allowed scalar */
1184 SCIP_Bool usecontvars, /**< should the coefficients of the continuous variables also be made integral? */
1185 SCIP_Real* intscalar, /**< pointer to store scalar that would make the coefficients integral, or NULL */
1186 SCIP_Bool* success /**< stores whether returned value is valid */
1187 );
1188
1189/** tries to scale row, s.t. all coefficients (of integer variables) become integral
1190 *
1191 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1192 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1193 *
1194 * @pre this method can be called in one of the following stages of the SCIP solving process:
1195 * - \ref SCIP_STAGE_INITSOLVE
1196 * - \ref SCIP_STAGE_SOLVING
1197 */
1198SCIP_EXPORT
1200 SCIP* scip, /**< SCIP data structure */
1201 SCIP_ROW* row, /**< LP row */
1202 SCIP_Real mindelta, /**< minimal relative allowed difference of scaled coefficient s*c and integral i */
1203 SCIP_Real maxdelta, /**< maximal relative allowed difference of scaled coefficient s*c and integral i */
1204 SCIP_Longint maxdnom, /**< maximal denominator allowed in rational numbers */
1205 SCIP_Real maxscale, /**< maximal value to scale row with */
1206 SCIP_Bool usecontvars, /**< should the coefficients of the continuous variables also be made integral? */
1207 SCIP_Bool* success /**< stores whether row could be made rational */
1208 );
1209
1210/** marks a row to be not removable from the LP in the current node
1211 *
1212 * @pre this method can be called in the following stage of the SCIP solving process:
1213 * - \ref SCIP_STAGE_SOLVING
1214 */
1215SCIP_EXPORT
1217 SCIP* scip, /**< SCIP data structure */
1218 SCIP_ROW* row /**< LP row */
1219 );
1220
1221/** returns number of integral columns in the row
1222 *
1223 * @return number of integral columns in the row
1224 *
1225 * @pre this method can be called in one of the following stages of the SCIP solving process:
1226 * - \ref SCIP_STAGE_INITSOLVE
1227 * - \ref SCIP_STAGE_SOLVING
1228 */
1229SCIP_EXPORT
1231 SCIP* scip, /**< SCIP data structure */
1232 SCIP_ROW* row /**< LP row */
1233 );
1234
1235/** returns number of implied integral columns in the row
1236 *
1237 * @return number of implied integral columns in the row
1238 *
1239 * @pre this method can be called in one of the following stages of the SCIP solving process:
1240 * - \ref SCIP_STAGE_INITSOLVE
1241 * - \ref SCIP_STAGE_SOLVING
1242 */
1243SCIP_EXPORT
1245 SCIP* scip, /**< SCIP data structure */
1246 SCIP_ROW* row /**< LP row */
1247 );
1248
1249/** returns minimal absolute value of row vector's non-zero coefficients
1250 *
1251 * @return minimal absolute value of row vector's non-zero coefficients
1252 *
1253 * @pre this method can be called in one of the following stages of the SCIP solving process:
1254 * - \ref SCIP_STAGE_INITSOLVE
1255 * - \ref SCIP_STAGE_SOLVING
1256 */
1257SCIP_EXPORT
1259 SCIP* scip, /**< SCIP data structure */
1260 SCIP_ROW* row /**< LP row */
1261 );
1262
1263/** returns maximal absolute value of row vector's non-zero coefficients
1264 *
1265 * @return maximal absolute value of row vector's non-zero coefficients
1266 *
1267 * @pre this method can be called in one of the following stages of the SCIP solving process:
1268 * - \ref SCIP_STAGE_INITSOLVE
1269 * - \ref SCIP_STAGE_SOLVING
1270 */
1271SCIP_EXPORT
1273 SCIP* scip, /**< SCIP data structure */
1274 SCIP_ROW* row /**< LP row */
1275 );
1276
1277/** returns the minimal activity of a row w.r.t. the column's bounds
1278 *
1279 * @return the minimal activity of a row w.r.t. the column's bounds
1280 *
1281 * @pre this method can be called in one of the following stages of the SCIP solving process:
1282 * - \ref SCIP_STAGE_SOLVING
1283 */
1284SCIP_EXPORT
1286 SCIP* scip, /**< SCIP data structure */
1287 SCIP_ROW* row /**< LP row */
1288 );
1289
1290/** returns the maximal activity of a row w.r.t. the column's bounds
1291 *
1292 * @return the maximal activity of a row w.r.t. the column's bounds
1293 *
1294 * @pre this method can be called in one of the following stages of the SCIP solving process:
1295 * - \ref SCIP_STAGE_SOLVING
1296 */
1297SCIP_EXPORT
1299 SCIP* scip, /**< SCIP data structure */
1300 SCIP_ROW* row /**< LP row */
1301 );
1302
1303/** recalculates the activity of a row in the last LP solution
1304 *
1305 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1306 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1307 *
1308 * @pre this method can be called in one of the following stages of the SCIP solving process:
1309 * - \ref SCIP_STAGE_SOLVING
1310 */
1311SCIP_EXPORT
1313 SCIP* scip, /**< SCIP data structure */
1314 SCIP_ROW* row /**< LP row */
1315 );
1316
1317/** returns the activity of a row in the last LP solution
1318 *
1319 * @return activity of a row in the last LP solution
1320 *
1321 * @pre this method can be called in one of the following stages of the SCIP solving process:
1322 * - \ref SCIP_STAGE_SOLVING
1323 */
1324SCIP_EXPORT
1326 SCIP* scip, /**< SCIP data structure */
1327 SCIP_ROW* row /**< LP row */
1328 );
1329
1330/** returns the feasibility of a row in the last LP solution
1331 *
1332 * @return the feasibility of a row in the last LP solution: negative value means infeasibility
1333 *
1334 * @pre this method can be called in one of the following stages of the SCIP solving process:
1335 * - \ref SCIP_STAGE_SOLVING
1336 */
1337SCIP_EXPORT
1339 SCIP* scip, /**< SCIP data structure */
1340 SCIP_ROW* row /**< LP row */
1341 );
1342
1343/** recalculates the activity of a row for the current pseudo solution
1344 *
1345 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1346 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1347 *
1348 * @pre this method can be called in one of the following stages of the SCIP solving process:
1349 * - \ref SCIP_STAGE_SOLVING
1350 */
1351SCIP_EXPORT
1353 SCIP* scip, /**< SCIP data structure */
1354 SCIP_ROW* row /**< LP row */
1355 );
1356
1357/** returns the activity of a row for the current pseudo solution
1358 *
1359 * @return the activity of a row for the current pseudo solution
1360 *
1361 * @pre this method can be called in one of the following stages of the SCIP solving process:
1362 * - \ref SCIP_STAGE_SOLVING
1363 */
1364SCIP_EXPORT
1366 SCIP* scip, /**< SCIP data structure */
1367 SCIP_ROW* row /**< LP row */
1368 );
1369
1370/** returns the feasibility of a row for the current pseudo solution: negative value means infeasibility
1371 *
1372 * @return the feasibility of a row for the current pseudo solution: negative value means infeasibility
1373 *
1374 * @pre this method can be called in one of the following stages of the SCIP solving process:
1375 * - \ref SCIP_STAGE_SOLVING
1376 */
1377SCIP_EXPORT
1379 SCIP* scip, /**< SCIP data structure */
1380 SCIP_ROW* row /**< LP row */
1381 );
1382
1383/** recalculates the activity of a row in the last LP or pseudo solution
1384 *
1385 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1386 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1387 *
1388 * @pre this method can be called in one of the following stages of the SCIP solving process:
1389 * - \ref SCIP_STAGE_SOLVING
1390 */
1391SCIP_EXPORT
1393 SCIP* scip, /**< SCIP data structure */
1394 SCIP_ROW* row /**< LP row */
1395 );
1396
1397/** returns the activity of a row in the last LP or pseudo solution
1398 *
1399 * @return the activity of a row in the last LP or pseudo solution
1400 *
1401 * @pre this method can be called in one of the following stages of the SCIP solving process:
1402 * - \ref SCIP_STAGE_SOLVING
1403 */
1404SCIP_EXPORT
1406 SCIP* scip, /**< SCIP data structure */
1407 SCIP_ROW* row /**< LP row */
1408 );
1409
1410/** returns the feasibility of a row in the last LP or pseudo solution
1411 *
1412 * @return the feasibility of a row in the last LP or pseudo solution
1413 *
1414 * @pre this method can be called in one of the following stages of the SCIP solving process:
1415 * - \ref SCIP_STAGE_SOLVING
1416 */
1417SCIP_EXPORT
1419 SCIP* scip, /**< SCIP data structure */
1420 SCIP_ROW* row /**< LP row */
1421 );
1422
1423/** returns the activity of a row for the given primal solution
1424 *
1425 * @return the activitiy of a row for the given primal solution
1426 *
1427 * @pre this method can be called in one of the following stages of the SCIP solving process:
1428 * - \ref SCIP_STAGE_SOLVING
1429 */
1430SCIP_EXPORT
1432 SCIP* scip, /**< SCIP data structure */
1433 SCIP_ROW* row, /**< LP row */
1434 SCIP_SOL* sol /**< primal CIP solution */
1435 );
1436
1437/** returns the feasibility of a row for the given primal solution
1438 *
1439 * @return the feasibility of a row for the given primal solution
1440 *
1441 * @pre this method can be called in one of the following stages of the SCIP solving process:
1442 * - \ref SCIP_STAGE_SOLVING
1443 */
1444SCIP_EXPORT
1446 SCIP* scip, /**< SCIP data structure */
1447 SCIP_ROW* row, /**< LP row */
1448 SCIP_SOL* sol /**< primal CIP solution */
1449 );
1450
1451/** returns the parallelism of row with objective function
1452 *
1453 * @return 1 is returned if the row is parallel to the objective function and 0 if it is orthogonal
1454 *
1455 * @pre this method can be called in one of the following stages of the SCIP solving process:
1456 * - \ref SCIP_STAGE_SOLVING
1457 */
1458SCIP_EXPORT
1460 SCIP* scip, /**< SCIP data structure */
1461 SCIP_ROW* row /**< LP row */
1462 );
1463
1464/** output row to file stream via the message handler system
1465 *
1466 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1467 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1468 *
1469 * @pre this method can be called in one of the following stages of the SCIP solving process:
1470 * - \ref SCIP_STAGE_INITSOLVE
1471 * - \ref SCIP_STAGE_SOLVING
1472 * - \ref SCIP_STAGE_SOLVED
1473 * - \ref SCIP_STAGE_EXITSOLVE
1474 */
1475SCIP_EXPORT
1477 SCIP* scip, /**< SCIP data structure */
1478 SCIP_ROW* row, /**< LP row */
1479 FILE* file /**< output file (or NULL for standard output) */
1480 );
1481
1482/**@} */
1483
1484/**@addtogroup PublicLPDivingMethods
1485 *
1486 * @{
1487 */
1488
1489/** initiates LP diving, making methods SCIPchgVarObjDive(), SCIPchgVarLbDive(), and SCIPchgVarUbDive() available
1490 *
1491 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1492 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1493 *
1494 * @pre This method can be called if @p scip is in one of the following stages:
1495 * - \ref SCIP_STAGE_SOLVING
1496 *
1497 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1498 *
1499 * @note diving is allowed even if the current LP is not flushed, not solved, or not solved to optimality; be aware
1500 * that solving the (first) diving LP may take longer than expect and that the latter two cases could stem from
1501 * numerical troubles during the last LP solve; because of this, most users will want to call this method only if
1502 * SCIPgetLPSolstat(scip) == SCIP_LPSOLSTAT_OPTIMAL
1503 */
1504SCIP_EXPORT
1506 SCIP* scip /**< SCIP data structure */
1507 );
1508
1509/** quits LP diving and resets bounds and objective values of columns to the current node's values
1510 *
1511 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1512 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1513 *
1514 * @pre This method can be called if @p scip is in one of the following stages:
1515 * - \ref SCIP_STAGE_SOLVING
1516 *
1517 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1518 */
1519SCIP_EXPORT
1521 SCIP* scip /**< SCIP data structure */
1522 );
1523
1524/** changes cutoffbound in current dive
1525 *
1526 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1527 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1528 *
1529 * @pre This method can be called if @p scip is in one of the following stages:
1530 * - \ref SCIP_STAGE_SOLVING
1531 *
1532 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1533 */
1534SCIP_EXPORT
1536 SCIP* scip, /**< SCIP data structure */
1537 SCIP_Real newcutoffbound /**< new cutoffbound */
1538 );
1539
1540/** changes variable's objective value in current dive
1541 *
1542 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1543 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1544 *
1545 * @pre This method can be called if @p scip is in one of the following stages:
1546 * - \ref SCIP_STAGE_SOLVING
1547 *
1548 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1549 */
1550SCIP_EXPORT
1552 SCIP* scip, /**< SCIP data structure */
1553 SCIP_VAR* var, /**< variable to change the objective value for */
1554 SCIP_Real newobj /**< new objective value */
1555 );
1556
1557/** changes variable's lower bound in current dive
1558 *
1559 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1560 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1561 *
1562 * @pre This method can be called if @p scip is in one of the following stages:
1563 * - \ref SCIP_STAGE_SOLVING
1564 *
1565 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1566 */
1567SCIP_EXPORT
1569 SCIP* scip, /**< SCIP data structure */
1570 SCIP_VAR* var, /**< variable to change the bound for */
1571 SCIP_Real newbound /**< new value for bound */
1572 );
1573
1574/** changes variable's upper bound in current dive
1575 *
1576 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1577 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1578 *
1579 * @pre This method can be called if @p scip is in one of the following stages:
1580 * - \ref SCIP_STAGE_SOLVING
1581 *
1582 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1583 */
1584SCIP_EXPORT
1586 SCIP* scip, /**< SCIP data structure */
1587 SCIP_VAR* var, /**< variable to change the bound for */
1588 SCIP_Real newbound /**< new value for bound */
1589 );
1590
1591/** adds a row to the LP in current dive
1592 *
1593 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1594 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1595 *
1596 * @pre This method can be called if @p scip is in one of the following stages:
1597 * - \ref SCIP_STAGE_SOLVING
1598 *
1599 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1600 */
1601SCIP_EXPORT
1603 SCIP* scip, /**< SCIP data structure */
1604 SCIP_ROW* row /**< row to be added */
1605 );
1606
1607/** changes row lhs in current dive, change will be undone after diving ends, for permanent changes use SCIPchgRowLhs()
1608 *
1609 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1610 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1611 *
1612 * @pre This method can be called if @p scip is in one of the following stages:
1613 * - \ref SCIP_STAGE_SOLVING
1614 *
1615 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1616 */
1617SCIP_EXPORT
1619 SCIP* scip, /**< SCIP data structure */
1620 SCIP_ROW* row, /**< row to change the lhs for */
1621 SCIP_Real newlhs /**< new value for lhs */
1622 );
1623
1624/** changes row rhs in current dive, change will be undone after diving ends, for permanent changes use SCIPchgRowRhs()
1625 *
1626 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1627 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1628 *
1629 * @pre This method can be called if @p scip is in one of the following stages:
1630 * - \ref SCIP_STAGE_SOLVING
1631 *
1632 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1633 */
1634SCIP_EXPORT
1636 SCIP* scip, /**< SCIP data structure */
1637 SCIP_ROW* row, /**< row to change the lhs for */
1638 SCIP_Real newrhs /**< new value for rhs */
1639 );
1640
1641/** gets variable's objective value in current dive
1642 *
1643 * @return the variable's objective value in current dive.
1644 *
1645 * @pre This method can be called if @p scip is in one of the following stages:
1646 * - \ref SCIP_STAGE_SOLVING
1647 *
1648 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1649 */
1650SCIP_EXPORT
1652 SCIP* scip, /**< SCIP data structure */
1653 SCIP_VAR* var /**< variable to get the bound for */
1654 );
1655
1656/** gets variable's lower bound in current dive
1657 *
1658 * @return the variable's lower bound in current dive.
1659 *
1660 * @pre This method can be called if @p scip is in one of the following stages:
1661 * - \ref SCIP_STAGE_SOLVING
1662 *
1663 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1664 */
1665SCIP_EXPORT
1667 SCIP* scip, /**< SCIP data structure */
1668 SCIP_VAR* var /**< variable to get the bound for */
1669 );
1670
1671/** gets variable's upper bound in current dive
1672 *
1673 * @return the variable's upper bound in current dive.
1674 *
1675 * @pre This method can be called if @p scip is in one of the following stages:
1676 * - \ref SCIP_STAGE_SOLVING
1677 *
1678 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1679 */
1680SCIP_EXPORT
1682 SCIP* scip, /**< SCIP data structure */
1683 SCIP_VAR* var /**< variable to get the bound for */
1684 );
1685/** solves the LP of the current dive; no separation or pricing is applied
1686 *
1687 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1688 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1689 *
1690 * @pre This method can be called if @p scip is in one of the following stages:
1691 * - \ref SCIP_STAGE_SOLVING
1692 *
1693 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1694 *
1695 * @note be aware that the LP solve may take longer than expected if SCIPgetLPSolstat(scip) != SCIP_LPSOLSTAT_OPTIMAL,
1696 * compare the explanation of SCIPstartDive()
1697 */
1698SCIP_EXPORT
1700 SCIP* scip, /**< SCIP data structure */
1701 int itlim, /**< maximal number of LP iterations to perform, or -1 for no limit */
1702 SCIP_Bool* lperror, /**< pointer to store whether an unresolved LP error occurred */
1703 SCIP_Bool* cutoff /**< pointer to store whether the diving LP was infeasible or the objective
1704 * limit was reached (or NULL, if not needed) */
1705 );
1706
1707/** returns the number of the node in the current branch and bound run, where the last LP was solved in diving
1708 * or probing mode
1709 *
1710 * @return the number of the node in the current branch and bound run, where the last LP was solved in diving
1711 * or probing mode.
1712 *
1713 * @pre This method can be called if @p scip is in one of the following stages:
1714 * - \ref SCIP_STAGE_TRANSFORMING
1715 * - \ref SCIP_STAGE_TRANSFORMED
1716 * - \ref SCIP_STAGE_INITPRESOLVE
1717 * - \ref SCIP_STAGE_PRESOLVING
1718 * - \ref SCIP_STAGE_EXITPRESOLVE
1719 * - \ref SCIP_STAGE_PRESOLVED
1720 * - \ref SCIP_STAGE_INITSOLVE
1721 * - \ref SCIP_STAGE_SOLVING
1722 * - \ref SCIP_STAGE_SOLVED
1723 * - \ref SCIP_STAGE_EXITSOLVE
1724 * - \ref SCIP_STAGE_FREETRANS
1725 *
1726 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1727 */
1728SCIP_EXPORT
1730 SCIP* scip /**< SCIP data structure */
1731 );
1732
1733/** returns whether we are in diving mode
1734 *
1735 * @return whether we are in diving mode.
1736 *
1737 * @pre This method can be called if @p scip is in one of the following stages:
1738 * - \ref SCIP_STAGE_TRANSFORMING
1739 * - \ref SCIP_STAGE_TRANSFORMED
1740 * - \ref SCIP_STAGE_INITPRESOLVE
1741 * - \ref SCIP_STAGE_PRESOLVING
1742 * - \ref SCIP_STAGE_EXITPRESOLVE
1743 * - \ref SCIP_STAGE_PRESOLVED
1744 * - \ref SCIP_STAGE_INITSOLVE
1745 * - \ref SCIP_STAGE_SOLVING
1746 * - \ref SCIP_STAGE_SOLVED
1747 * - \ref SCIP_STAGE_EXITSOLVE
1748 * - \ref SCIP_STAGE_FREETRANS
1749 *
1750 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1751 */
1752SCIP_EXPORT
1754 SCIP* scip /**< SCIP data structure */
1755 );
1756
1757/** computes two measures for dual degeneracy (dual degeneracy rate and variable-constraint ratio)
1758 * based on the changes applied when reducing the problem to the optimal face
1759 *
1760 * returns the dual degeneracy rate, i.e., the share of nonbasic variables with reduced cost 0
1761 * and the variable-constraint ratio, i.e., the number of unfixed variables in relation to the basis size
1762 */
1763SCIP_EXPORT
1765 SCIP* scip, /**< SCIP data structure */
1766 SCIP_Real* degeneracy, /**< pointer to store the dual degeneracy rate */
1767 SCIP_Real* varconsratio /**< pointer to store the variable constraint ratio */
1768 );
1769
1770/**@} */
1771
1772#ifdef __cplusplus
1773}
1774#endif
1775
1776#endif
SCIP_Real * r
Definition: circlepacking.c:59
common defines and data types used in all packages of SCIP
#define SCIP_Longint
Definition: def.h:141
#define SCIP_Bool
Definition: def.h:91
#define SCIP_Real
Definition: def.h:156
SCIP_Real SCIPgetColRedcost(SCIP *scip, SCIP_COL *col)
Definition: scip_lp.c:1163
SCIP_Real SCIPgetColFarkasCoef(SCIP *scip, SCIP_COL *col)
Definition: scip_lp.c:1189
void SCIPmarkColNotRemovableLocal(SCIP *scip, SCIP_COL *col)
Definition: scip_lp.c:1211
SCIP_RETCODE SCIPchgVarLbDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition: scip_lp.c:2384
SCIP_RETCODE SCIPchgVarUbDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition: scip_lp.c:2416
SCIP_RETCODE SCIPchgCutoffboundDive(SCIP *scip, SCIP_Real newcutoffbound)
Definition: scip_lp.c:2313
SCIP_RETCODE SCIPchgRowLhsDive(SCIP *scip, SCIP_ROW *row, SCIP_Real newlhs)
Definition: scip_lp.c:2487
SCIP_RETCODE SCIPaddRowDive(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2448
SCIP_Real SCIPgetVarLbDive(SCIP *scip, SCIP_VAR *var)
Definition: scip_lp.c:2581
SCIP_Real SCIPgetVarUbDive(SCIP *scip, SCIP_VAR *var)
Definition: scip_lp.c:2610
SCIP_RETCODE SCIPchgRowRhsDive(SCIP *scip, SCIP_ROW *row, SCIP_Real newrhs)
Definition: scip_lp.c:2520
SCIP_Real SCIPgetVarObjDive(SCIP *scip, SCIP_VAR *var)
Definition: scip_lp.c:2552
SCIP_RETCODE SCIPstartDive(SCIP *scip)
Definition: scip_lp.c:2206
SCIP_RETCODE SCIPgetLPDualDegeneracy(SCIP *scip, SCIP_Real *degeneracy, SCIP_Real *varconsratio)
Definition: scip_lp.c:2757
SCIP_RETCODE SCIPchgVarObjDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
Definition: scip_lp.c:2343
SCIP_RETCODE SCIPsolveDiveLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
Definition: scip_lp.c:2643
SCIP_RETCODE SCIPendDive(SCIP *scip)
Definition: scip_lp.c:2255
SCIP_Bool SCIPinDive(SCIP *scip)
Definition: scip_lp.c:2740
SCIP_Longint SCIPgetLastDivenode(SCIP *scip)
Definition: scip_lp.c:2710
SCIP_RETCODE SCIPflushLP(SCIP *scip)
Definition: scip_lp.c:154
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
Definition: scip_lp.c:87
SCIP_Real SCIPgetLPLooseObjval(SCIP *scip)
Definition: scip_lp.c:289
SCIP_RETCODE SCIPconstructLP(SCIP *scip, SCIP_Bool *cutoff)
Definition: scip_lp.c:130
SCIP_Bool SCIPisLPRelax(SCIP *scip)
Definition: scip_lp.c:231
SCIP_RETCODE SCIPprintLPSolutionQuality(SCIP *scip, FILE *file)
Definition: scip_lp.c:1030
SCIP_Bool SCIPisLPPrimalReliable(SCIP *scip)
Definition: scip_lp.c:195
SCIP_Bool SCIPisLPConstructed(SCIP *scip)
Definition: scip_lp.c:105
SCIP_RETCODE SCIPgetLPBasisInd(SCIP *scip, int *basisind)
Definition: scip_lp.c:692
SCIP_RETCODE SCIPgetLPBInvACol(SCIP *scip, int c, SCIP_Real *coefs, int *inds, int *ninds)
Definition: scip_lp.c:825
SCIP_RETCODE SCIPgetLPColsData(SCIP *scip, SCIP_COL ***cols, int *ncols)
Definition: scip_lp.c:477
SCIP_RETCODE SCIPgetLPRowsData(SCIP *scip, SCIP_ROW ***rows, int *nrows)
Definition: scip_lp.c:576
SCIP_ROW ** SCIPgetLPRows(SCIP *scip)
Definition: scip_lp.c:611
SCIP_Real SCIPgetPseudoObjval(SCIP *scip)
Definition: scip_lp.c:339
SCIP_RETCODE SCIPcomputeLPRelIntPoint(SCIP *scip, SCIP_Bool relaxrows, SCIP_Bool inclobjcutoff, SCIP_Real timelimit, int iterlimit, SCIP_SOL **point)
Definition: scip_lp.c:1103
void SCIPresetLPFeastol(SCIP *scip)
Definition: scip_lp.c:458
SCIP_Real SCIPgetLPColumnObjval(SCIP *scip)
Definition: scip_lp.c:271
int SCIPgetNLPRows(SCIP *scip)
Definition: scip_lp.c:632
SCIP_RETCODE SCIPsumLPRows(SCIP *scip, SCIP_Real *weights, SCIP_REALARRAY *sumcoef, SCIP_Real *sumlhs, SCIP_Real *sumrhs)
Definition: scip_lp.c:858
SCIP_RETCODE SCIPgetLPI(SCIP *scip, SCIP_LPI **lpi)
Definition: scip_lp.c:994
SCIP_RETCODE SCIPgetLPBInvARow(SCIP *scip, int r, SCIP_Real *binvrow, SCIP_Real *coefs, int *inds, int *ninds)
Definition: scip_lp.c:791
SCIP_Real SCIPgetGlobalPseudoObjval(SCIP *scip)
Definition: scip_lp.c:314
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
Definition: scip_lp.c:174
SCIP_COL ** SCIPgetLPCols(SCIP *scip)
Definition: scip_lp.c:512
SCIP_Real SCIPgetLPRootObjval(SCIP *scip)
Definition: scip_lp.c:378
SCIP_RETCODE SCIPwriteMIP(SCIP *scip, const char *filename, SCIP_Bool genericnames, SCIP_Bool origobj, SCIP_Bool lazyconss)
Definition: scip_lp.c:938
SCIP_Bool SCIPallColsInLP(SCIP *scip)
Definition: scip_lp.c:655
SCIP_Real SCIPgetLPRootColumnObjval(SCIP *scip)
Definition: scip_lp.c:401
SCIP_Real SCIPgetLPObjval(SCIP *scip)
Definition: scip_lp.c:253
void SCIPsetLPFeastol(SCIP *scip, SCIP_Real newfeastol)
Definition: scip_lp.c:444
SCIP_Real SCIPgetLPFeastol(SCIP *scip)
Definition: scip_lp.c:434
int SCIPgetNUnfixedLPCols(SCIP *scip)
Definition: scip_lp.c:554
int SCIPgetNLPCols(SCIP *scip)
Definition: scip_lp.c:533
SCIP_RETCODE SCIPgetLPBInvCol(SCIP *scip, int c, SCIP_Real *coefs, int *inds, int *ninds)
Definition: scip_lp.c:755
SCIP_RETCODE SCIPwriteLP(SCIP *scip, const char *filename)
Definition: scip_lp.c:907
SCIP_Bool SCIPisLPSolBasic(SCIP *scip)
Definition: scip_lp.c:673
SCIP_RETCODE SCIPgetLPBInvRow(SCIP *scip, int r, SCIP_Real *coefs, int *inds, int *ninds)
Definition: scip_lp.c:720
SCIP_Real SCIPgetLPRootLooseObjval(SCIP *scip)
Definition: scip_lp.c:424
SCIP_Bool SCIPisLPDualReliable(SCIP *scip)
Definition: scip_lp.c:213
SCIP_RETCODE SCIPinterruptLP(SCIP *scip, SCIP_Bool interrupt)
Definition: scip_lp.c:880
SCIP_Bool SCIPisRootLPRelax(SCIP *scip)
Definition: scip_lp.c:357
SCIP_Real SCIPgetRowMaxCoef(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1886
SCIP_Real SCIPgetRowMinCoef(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1868
SCIP_RETCODE SCIPcreateRowConshdlr(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, int len, SCIP_COL **cols, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1233
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1581
SCIP_RETCODE SCIPchgRowLhs(SCIP *scip, SCIP_ROW *row, SCIP_Real lhs)
Definition: scip_lp.c:1529
SCIP_Real SCIPgetRowMinActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1903
SCIP_Real SCIPgetRowFeasibility(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2088
SCIP_RETCODE SCIPcreateRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, int len, SCIP_COL **cols, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1267
SCIP_Real SCIPgetRowLPActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1957
SCIP_RETCODE SCIPaddVarsToRowSameCoef(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real val)
Definition: scip_lp.c:1718
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1398
SCIP_Real SCIPgetRowMaxActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1920
SCIP_RETCODE SCIPrecalcRowPseudoActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1992
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1604
SCIP_RETCODE SCIPrecalcRowActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2046
SCIP_RETCODE SCIPcreateEmptyRowConshdlr(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1367
SCIP_Real SCIPgetRowPseudoActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2011
int SCIPgetRowNumImpliedIntCols(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1850
SCIP_RETCODE SCIPmakeRowIntegral(SCIP *scip, SCIP_ROW *row, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Real maxscale, SCIP_Bool usecontvars, SCIP_Bool *success)
Definition: scip_lp.c:1790
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
Definition: scip_lp.c:1646
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
Definition: scip_lp.c:2176
SCIP_Real SCIPgetRowActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2068
SCIP_RETCODE SCIPcaptureRow(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1486
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
Definition: scip_lp.c:2131
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
Definition: scip_lp.c:1508
SCIP_Real SCIPgetRowPseudoFeasibility(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2028
SCIP_RETCODE SCIPcreateRowUnspec(SCIP *scip, SCIP_ROW **row, const char *name, int len, SCIP_COL **cols, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1335
SCIP_RETCODE SCIPcreateEmptyRowSepa(SCIP *scip, SCIP_ROW **row, SCIP_SEPA *sepa, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1429
SCIP_RETCODE SCIPrecalcRowLPActivity(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1938
SCIP_RETCODE SCIPcreateEmptyRowUnspec(SCIP *scip, SCIP_ROW **row, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1458
void SCIPmarkRowNotRemovableLocal(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1814
SCIP_Real SCIPgetRowLPFeasibility(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1974
SCIP_RETCODE SCIPchgRowRhs(SCIP *scip, SCIP_ROW *row, SCIP_Real rhs)
Definition: scip_lp.c:1553
SCIP_Real SCIPgetRowObjParallelism(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:2154
SCIP_RETCODE SCIPaddVarsToRow(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
Definition: scip_lp.c:1672
SCIP_RETCODE SCIPcreateRowSepa(SCIP *scip, SCIP_ROW **row, SCIP_SEPA *sepa, const char *name, int len, SCIP_COL **cols, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
Definition: scip_lp.c:1301
int SCIPgetRowNumIntCols(SCIP *scip, SCIP_ROW *row)
Definition: scip_lp.c:1832
SCIP_RETCODE SCIPcalcRowIntegralScalar(SCIP *scip, SCIP_ROW *row, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Real maxscale, SCIP_Bool usecontvars, SCIP_Real *intscalar, SCIP_Bool *success)
Definition: scip_lp.c:1761
SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
Definition: scip_lp.c:2108
type definitions for constraints and constraint handlers
type definitions for LP management
enum SCIP_LPSolStat SCIP_LPSOLSTAT
Definition: type_lp.h:52
type definitions for specific LP solvers interface
type definitions for miscellaneous datastructures
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
type definitions for SCIP's main datastructure
type definitions for separators
type definitions for storing primal CIP solutions
type definitions for problem variables