1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* This file is part of the program and library */
/* SCIP --- Solving Constraint Integer Programs */
/* */
/* Copyright 2002-2022 Zuse Institute Berlin */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
/* You may obtain a copy of the License at */
/* */
/* http://www.apache.org/licenses/LICENSE-2.0 */
/* */
/* Unless required by applicable law or agreed to in writing, software */
/* distributed under the License is distributed on an "AS IS" BASIS, */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
/* See the License for the specific language governing permissions and */
/* limitations under the License. */
/* */
/* You should have received a copy of the Apache-2.0 license */
/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**@file pub_misc_linear.h
* @ingroup PUBLICCOREAPI
* @brief internal miscellaneous methods for linear constraints
* @author Jakob Witzig
*/
/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
#ifndef __SCIP_MISC_LINEAR_H__
#define __SCIP_MISC_LINEAR_H__
#include "scip/def.h"
#include "scip/type_retcode.h"
#include "scip/type_cons.h"
#include "scip/type_lp.h"
#include "scip/type_var.h"
#ifdef __cplusplus
extern "C" {
#endif
/** returns the right-hand side of an arbitrary SCIP constraint that can be represented as a single linear constraint
*
* @note The success pointer indicates if the individual contraint handler was able to return the involved values
*/
SCIP_EXPORT
SCIP_Real SCIPconsGetRhs(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons, /**< constraint for which right-hand side is queried */
SCIP_Bool* success /**< pointer to store whether a valid right-hand side was returned */
);
/** returns the left-hand side of an arbitrary SCIP constraint that can be represented as a single linear constraint
*
* @note The success pointer indicates if the individual contraint handler was able to return the involved values
*/
SCIP_EXPORT
SCIP_Real SCIPconsGetLhs(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons, /**< constraint to get left hand side for */
SCIP_Bool* success /**< pointer to store whether a valid left-hand side was returned */
);
/** returns the value array of an arbitrary SCIP constraint that can be represented as a single linear constraint
*
* @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
* SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
*
* @note The success pointer indicates if the individual contraint handler was able to return the involved values
*/
SCIP_EXPORT
SCIP_RETCODE SCIPgetConsVals(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons, /**< constraint for which the coefficients are wanted */
SCIP_Real* vals, /**< array to store the coefficients of the constraint */
int varssize, /**< available slots in vals array needed to check if the array is large enough */
SCIP_Bool* success /**< pointer to store whether the coefficients are successfully copied */
);
/** returns the dual farkas solution of an arbitrary SCIP constraint that can be represented as a single linear constraint
*
* @note The success pointer indicates if the individual contraint handler was able to return the dual farkas solution
*/
SCIP_EXPORT
void SCIPconsGetDualfarkas(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons, /**< constraint to get left hand side for */
SCIP_Real* dualfarkas, /**< pointer to store the dual farkas solution */
SCIP_Bool* success /**< pointer to store whether the dual farkas solution is successfully returned */
);
/** returns the dual solution of an arbitrary SCIP constraint that can be represented as a single linear constraint
*
* @note The success pointer indicates if the individual contraint handler was able to return the dual solution
*/
SCIP_EXPORT
void SCIPconsGetDualsol(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons, /**< constraint to get left hand side for */
SCIP_Real* dualsol, /**< pointer to store the dual solution */
SCIP_Bool* success /**< pointer to store whether the dual solution is successfully returned */
);
/** returns the row of an arbitrary SCIP constraint that can be represented as a single linear constraint
* or NULL of no row is awailable
*/
SCIP_EXPORT
SCIP_ROW* SCIPconsGetRow(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons /**< constraint to get left hand side for */
);
/** adds the given variable to the input constraint.
* If the constraint is setppc or logicor the value is ignored. If the constraint is knapsack, then the value is
* converted to an int. A warning is passed if the SCIP_Real is not an integer.
* TODO: Allow val to be a pointer.
*/
SCIP_EXPORT
SCIP_RETCODE SCIPconsAddCoef(
SCIP* scip, /**< SCIP data structure */
SCIP_CONS* cons, /**< constraint for which row is queried */
SCIP_VAR* var, /**< variable of the constraint entry */
SCIP_Real val /**< the coefficient of the constraint entry */
);
#ifdef __cplusplus
}
#endif
#endif