Skip to content

Commit 432bb3d

Browse files
committed
Merge branch 'v92-bugfix' into fix-variable-indexing-in-concurrent-mode
2 parents 811f1d3 + 8c875c7 commit 432bb3d

File tree

11 files changed

+159
-22
lines changed

11 files changed

+159
-22
lines changed

CHANGELOG

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ Fixed bugs
2424
- skip integer variables with fractional value in reference solution when finding additional variable fixings in ALNS heuristic
2525
- fix call of SCIPaddExprsViolScoreNonlinear() with constant expressions (no variables)
2626
- fixed bug with concurrent solve w.r.t. variable indices that led to segmentation faults and fix termination test
27+
- adjust further bounds before checking feasibility in SCIPvarAddVlb() and SCIPvarAddVub() to detect integrality cutoff
28+
- fixed issue in cons_linking.c where the last fixed binary variable was not set after the binary variables are created.
29+
- fixed issue in cons_linking.c where the number of binary variable is 1, but the constraint is added during solving.
2730

2831
Build system
2932
------------
@@ -550,7 +553,7 @@ Interface changes
550553
SCIPupdateSymgraphLhs(), SCIPupdateSymgraphRhs(), SCIPfixSymgraphVarnode(), SCIPaddSymgraphEdge(), SCIPcomputeSymgraphColors(), SCIPgetSymgraphSymtype(), SCIPgetSymgraphVars(),
551554
SCIPgetSymgraphNVars(), SCIPgetSymgraphNConsnodes(), SCIPgetSymgraphNNodes(), SCIPgetSymgraphNEdges(), SCIPgetSymgraphEdgeFirst(), SCIPgetSymgraphEdgeSecond(),
552555
SCIPgetSymgraphVarnodeColor(), SCIPgetSymgraphNodeType(), SCIPgetSymgraphNodeColor(), SCIPisSymgraphEdgeColored(), SCIPgetSymgraphEdgeColor(), SCIPgetSymgraphNVarcolors(),
553-
SCIPhasGraphUniqueEdgetype(), SCIPallocateSymgraphConsnodeperm(), SCIPcreateSymgraphConsnodeperm(), SCIPgetSymgraphConsnodeperm(), SCIPfreeSymgraphConsnodeperm(),
556+
SCIPhasGraphUniqueEdgetype(), SCIPcreateSymgraphConsnodeperm(), SCIPgetSymgraphConsnodeperm(), SCIPfreeSymgraphConsnodeperm(),
554557
SCIPgetSymActiveVariables(), SCIPfreeSymDataExpr(), SCIPgetSymExprdataNConstants(), SCIPgetSymExprdataConstants(), SCIPgetCoefSymData(),
555558
SCIPcreateSymOpNodeType(), SCIPgetSymOpNodeType()
556559
- SCIPexprhdlrSetGetSymdata(), SCIPexprhdlrHasGetSymData(), SCIPgetSymDataExpr(), SCIPcallExprGetSymData() to access symmetry data of expressions
@@ -1587,7 +1590,7 @@ Constraint handlers for NLP:
15871590
- added SCIPcreateConsBasicSignpowerNonlinear() to create a nonlinear constraint that looks like the former abspower or signpower constraints
15881591

15891592
Nonlinear Handler:
1590-
- added SCIPincludeNlhdlrBilinear(), SCIPgetExprsBilinear(), SCIPgetExprsdataBilinear(), SCIPgetNExprsBilinear(), SCIPaddIneqBilinear()
1593+
- added SCIPincludeNlhdlrBilinear(), SCIPgetExprsBilinear(), SCIPgetNExprsBilinear(), SCIPaddIneqBilinear()
15911594
- added SCIPincludeNlhdlrConvex(), SCIPincludeNlhdlrConcave(), SCIPhasExprCurvature()
15921595
- added SCIPincludeNlhdlrDefault()
15931596
- added SCIPincludeNlhdlrPerspective()

check/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@ set(settings_default
4343
"default"
4444
)
4545

46+
set(instances_linking
47+
"instances/CP/linking.cip\;2"
48+
"instances/CP/linking2.cip\;2"
49+
"instances/CP/sched_10_2_1.cip\;11"
50+
"instances/CP/sched_10_3_3.cip\;17"
51+
)
52+
53+
set(settings_linking
54+
"linking"
55+
)
56+
4657
#
4758
# settings to run a whole test. In order to run a sub-suite, use -R
4859
#
@@ -689,6 +700,7 @@ macro(add_pairtests pairs prefix)
689700
endmacro(add_pairtests)
690701

691702
add_instancetests(instances_CP settings_default "CP")
703+
add_instancetests(instances_linking settings_linking "linking")
692704
add_instancetests(instances_Indicator settings_Indicator "Indicator")
693705
add_instancetests(instances_MIP settings_MIP "MIP")
694706
add_instancetests(instances_compHandlerTest settings_compHandlerTest "compHandlerTest")
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# SCIP version 9.2.4
2+
3+
# should the binary representation be used?
4+
# [type: bool, advanced: FALSE, range: {TRUE,FALSE}, default: FALSE]
5+
constraints/cumulative/usebinvars = TRUE

check/instances/CP/linking2.cip

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
STATISTICS
2+
Problem name : linking.cip
3+
Variables : 5 (3 binary, 2 integer, 0 implicit integer, 0 continuous)
4+
Constraints : 0 initial, 2 maximal
5+
OBJECTIVE
6+
Sense : maximize
7+
VARIABLES
8+
[binary] <x1>: obj=1, original bounds=[0,1]
9+
[binary] <x2>: obj=2, original bounds=[0,1]
10+
[binary] <x3>: obj=1, original bounds=[0,1]
11+
[integer] <y1>: obj=0, original bounds=[0,10]
12+
[integer] <y2>: obj=0, original bounds=[8,8]
13+
CONSTRAINTS
14+
[linking] <test>: <y1> = +3 <x1> +4 <x2> +5 <x3>;
15+
[linking] <test>: <y2> = no binary variables yet;
16+
END
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
STATISTICS
2+
Problem name : t_sub_0
3+
Variables : 21 (0 binary, 10 integer, 0 implicit integer, 11 continuous)
4+
Constraints : 32 initial, 32 maximal
5+
OBJECTIVE
6+
Sense : minimize
7+
VARIABLES
8+
[integer] <t_start_machine_0_job_5>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
9+
[integer] <t_start_machine_0_job_1>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
10+
[integer] <t_start_machine_0_job_6>: obj=0, global bounds=[-0,23], local bounds=[-0,23]
11+
[integer] <t_start_machine_0_job_3>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
12+
[integer] <t_start_machine_0_job_7>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
13+
[integer] <t_start_machine_0_job_0>: obj=0, global bounds=[-0,21], local bounds=[-0,21]
14+
[integer] <t_start_machine_0_job_8>: obj=0, global bounds=[-0,20], local bounds=[-0,20]
15+
[integer] <t_start_machine_0_job_4>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
16+
[integer] <t_start_machine_0_job_9>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
17+
[integer] <t_start_machine_0_job_2>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
18+
[continuous] <t_assignment_machine_0_job_2>: obj=0, global bounds=[0,0], local bounds=[0,0]
19+
[continuous] <t_assignment_machine_0_job_3>: obj=0, global bounds=[0,0], local bounds=[0,0]
20+
[continuous] <t_assignment_machine_0_job_4>: obj=0, global bounds=[0,0], local bounds=[0,0]
21+
[continuous] <t_assignment_machine_0_job_5>: obj=0, global bounds=[0,0], local bounds=[0,0]
22+
[continuous] <t_assignment_machine_0_job_6>: obj=0, global bounds=[1,1], local bounds=[1,1]
23+
[continuous] <t_assignment_machine_0_job_7>: obj=0, global bounds=[0,0], local bounds=[0,0]
24+
[continuous] <t_assignment_machine_0_job_8>: obj=0, global bounds=[1,1], local bounds=[1,1]
25+
[continuous] <t_assignment_machine_0_job_9>: obj=0, global bounds=[0,0], local bounds=[0,0]
26+
[continuous] <t_assignment_machine_0_job_0>: obj=0, global bounds=[1,1], local bounds=[1,1]
27+
[continuous] <t_max_var_machine_0>: obj=1, global bounds=[5,126], local bounds=[5,126]
28+
[continuous] <t_assignment_machine_0_job_1>: obj=0, global bounds=[0,0], local bounds=[0,0]
29+
CONSTRAINTS
30+
[linear] <max_constraint_0_0>: -<t_start_machine_0_job_0>[I] -4<t_assignment_machine_0_job_0>[C] +<t_max_var_machine_0>[C] >= 0;
31+
[linear] <max_constraint_0_6>: -<t_start_machine_0_job_6>[I] -2<t_assignment_machine_0_job_6>[C] +<t_max_var_machine_0>[C] >= 0;
32+
[linear] <max_constraint_0_8>: -<t_start_machine_0_job_8>[I] -5<t_assignment_machine_0_job_8>[C] +<t_max_var_machine_0>[C] >= 0;
33+
[cumulative] <Cumulative_constraint_Machine_0_cumulative>: cumulative(<t_start_machine_0_job_0>[-0,21](4)[9], <t_start_machine_0_job_6>[-0,23](2)[4], <t_start_machine_0_job_8>[-0,20](5)[9])[0,25) <= 10;
34+
END
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
STATISTICS
2+
Problem name : t_sub_0
3+
Variables : 21 (0 binary, 10 integer, 0 implicit integer, 11 continuous)
4+
Constraints : 32 initial, 32 maximal
5+
OBJECTIVE
6+
Sense : minimize
7+
VARIABLES
8+
[integer] <t_start_machine_0_job_5>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
9+
[integer] <t_start_machine_0_job_1>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
10+
[integer] <t_start_machine_0_job_6>: obj=0, global bounds=[-0,16], local bounds=[-0,16]
11+
[integer] <t_start_machine_0_job_3>: obj=0, global bounds=[-0,15], local bounds=[-0,15]
12+
[integer] <t_start_machine_0_job_7>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
13+
[integer] <t_start_machine_0_job_0>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
14+
[integer] <t_start_machine_0_job_8>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
15+
[integer] <t_start_machine_0_job_4>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
16+
[integer] <t_start_machine_0_job_9>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
17+
[integer] <t_start_machine_0_job_2>: obj=0, global bounds=[-0,0], local bounds=[-0,0]
18+
[continuous] <t_assignment_machine_0_job_2>: obj=0, global bounds=[0,0], local bounds=[0,0]
19+
[continuous] <t_assignment_machine_0_job_3>: obj=0, global bounds=[1,1], local bounds=[1,1]
20+
[continuous] <t_assignment_machine_0_job_4>: obj=0, global bounds=[0,0], local bounds=[0,0]
21+
[continuous] <t_assignment_machine_0_job_5>: obj=0, global bounds=[1,1], local bounds=[1,1]
22+
[continuous] <t_assignment_machine_0_job_6>: obj=0, global bounds=[1,1], local bounds=[1,1]
23+
[continuous] <t_assignment_machine_0_job_7>: obj=0, global bounds=[0,0], local bounds=[0,0]
24+
[continuous] <t_assignment_machine_0_job_8>: obj=0, global bounds=[0,0], local bounds=[0,0]
25+
[continuous] <t_assignment_machine_0_job_9>: obj=0, global bounds=[0,0], local bounds=[0,0]
26+
[continuous] <t_assignment_machine_0_job_0>: obj=0, global bounds=[0,0], local bounds=[0,0]
27+
[continuous] <t_max_var_machine_0>: obj=1, global bounds=[17,154], local bounds=[17,154]
28+
[continuous] <t_assignment_machine_0_job_1>: obj=0, global bounds=[0,0], local bounds=[0,0]
29+
CONSTRAINTS
30+
[linear] <max_constraint_0_3>: -<t_start_machine_0_job_3>[I] -7<t_assignment_machine_0_job_3>[C] +<t_max_var_machine_0>[C] >= 0;
31+
[linear] <max_constraint_0_6>: -<t_start_machine_0_job_6>[I] -6<t_assignment_machine_0_job_6>[C] +<t_max_var_machine_0>[C] >= 0;
32+
[cumulative] <Cumulative_constraint_Machine_0_cumulative>: cumulative(<t_start_machine_0_job_3>[-0,15](7)[9], <t_start_machine_0_job_5>[-0,0](17)[1], <t_start_machine_0_job_6>[-0,16](6)[3])[0,22) <= 10;
33+
END

src/blockmemshell/memory.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2118,7 +2118,7 @@ void BMSfreeBlockMemory_work(
21182118

21192119
debugMessage("free %8llu bytes in %p [%s:%d]\n", (unsigned long long)size, *ptr, filename, line);
21202120

2121-
/* find correspoding chunk block */
2121+
/* find corresponding chunk block */
21222122
assert( blkmem->chkmemhash != NULL );
21232123
chkmem = blkmem->chkmemhash[hashnumber];
21242124
while( chkmem != NULL && chkmem->elemsize != (int)size )

src/scip/cons_linking.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,7 @@ SCIP_RETCODE consdataCreateBinvars(
497497
}
498498

499499
consdata->nbinvars = nbinvars;
500+
consdata->lastnonfixed = nbinvars - 1;
500501

501502
assert(consdata->nfixedzeros == 0);
502503
assert(consdata->nfixedones == 0);
@@ -3182,21 +3183,25 @@ static
31823183
SCIP_DECL_CONSENABLE(consEnableLinking)
31833184
{ /*lint --e{715}*/
31843185
#ifdef SCIP_DISABLED_CODE
3185-
/** @todo The following might help, but it would need to be tested whether it speeds up the solution process. */
31863186
SCIP_CONSHDLRDATA* conshdlrdata;
3187+
#endif
31873188
SCIP_CONSDATA* consdata;
31883189

3190+
#ifdef SCIP_DISABLED_CODE
31893191
conshdlrdata = SCIPconshdlrGetData(conshdlr);
31903192
assert(conshdlrdata != NULL);
3193+
#endif
31913194

31923195
consdata = SCIPconsGetData(cons);
31933196
assert(consdata != NULL);
31943197

3195-
if( consdata->nbinvars <= 1 )
3198+
if( consdata->nbinvars <= 1 && SCIPgetStage(scip) >= SCIP_STAGE_TRANSFORMED )
31963199
{
31973200
SCIP_CALL( SCIPdisableCons(scip, cons) );
31983201
assert(consdata->nbinvars == 0 || SCIPvarGetLbGlobal(consdata->binvars[0]) > 0.5);
31993202
}
3203+
#ifdef SCIP_DISABLED_CODE
3204+
/** @todo The following might help, but it would need to be tested whether it speeds up the solution process. */
32003205
else if( conshdlrdata->linearize )
32013206
{
32023207
SCIP_CALL( consdataLinearize(scip, cons, consdata) );

src/scip/var.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10148,8 +10148,13 @@ SCIP_RETCODE SCIPvarAddVlb(
1014810148
/* if the vlb coefficient is zero, just update the lower bound of the variable */
1014910149
else if( SCIPsetIsZero(set, vlbcoef) )
1015010150
{
10151+
/* bound might be adjusted due to integrality condition */
10152+
vlbconstant = adjustedLb(set, SCIPvarGetType(var), vlbconstant);
10153+
10154+
/* check bounds for feasibility */
1015110155
if( SCIPsetIsFeasGT(set, vlbconstant, SCIPvarGetUbGlobal(var)) )
1015210156
*infeasible = TRUE;
10157+
/* improve global lower bound of variable */
1015310158
else if( SCIPsetIsFeasGT(set, vlbconstant, SCIPvarGetLbGlobal(var)) )
1015410159
{
1015510160
/* during solving stage it can happen that the global bound change cannot be applied directly because it conflicts
@@ -10609,8 +10614,13 @@ SCIP_RETCODE SCIPvarAddVub(
1060910614
/* if the vub coefficient is zero, just update the upper bound of the variable */
1061010615
else if( SCIPsetIsZero(set, vubcoef) )
1061110616
{
10617+
/* bound might be adjusted due to integrality condition */
10618+
vubconstant = adjustedUb(set, SCIPvarGetType(var), vubconstant);
10619+
10620+
/* check bounds for feasibility */
1061210621
if( SCIPsetIsFeasLT(set, vubconstant, SCIPvarGetLbGlobal(var)) )
1061310622
*infeasible = TRUE;
10623+
/* improve global upper bound of variable */
1061410624
else if( SCIPsetIsFeasLT(set, vubconstant, SCIPvarGetUbGlobal(var)) )
1061510625
{
1061610626
/* during solving stage it can happen that the global bound change cannot be applied directly because it conflicts

tests/src/sepa/convexproj.c

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,22 @@
3333
#include "scip/nlpi_ipopt.h"
3434

3535
#include "scip/sepa_convexproj.c"
36+
#include "scip/expr_varidx.h"
37+
#include "scip/expr_exp.h"
38+
#include "scip/expr_log.h"
39+
#include "scip/expr_pow.h"
40+
#include "scip/expr_product.h"
41+
#include "scip/expr_sum.h"
42+
#include "scip/expr_var.h"
43+
#include "scip/expr_value.h"
3644

3745
#include "include/scip_test.h"
3846

3947
#define EPS 1e-5
4048

4149
static SCIP* scip = NULL;
4250
static SCIP_SEPA* sepa = NULL;
43-
static SCIP_NLPI* nlpi = NULL;
51+
static SCIP_Bool haveipopt = FALSE;
4452
static SCIP_NLROW* nlrow1 = NULL;
4553
static SCIP_NLROW* nlrow2 = NULL;
4654
static SCIP_NLROW* nlrow3 = NULL;
@@ -74,15 +82,15 @@ void createNlRow1(CONVEXSIDE convexside)
7482
/* decide curvature */
7583
if( convexside == RHS )
7684
{
77-
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"log(exp(<x>) + exp(<y>))", NULL, NULL, NULL) );
85+
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"log(exp(<t_x>) + exp(<y>))", NULL, NULL, NULL) );
7886

7987
curvature = SCIP_EXPRCURV_CONVEX;
8088
lhs = -SCIPinfinity(scip);
8189
rhs = 1.0;
8290
}
8391
else
8492
{
85-
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"-(log(exp(<x>) + exp(<y>)))", NULL, NULL, NULL) );
93+
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"-(log(exp(<t_x>) + exp(<y>)))", NULL, NULL, NULL) );
8694

8795
curvature = SCIP_EXPRCURV_CONCAVE;
8896
lhs = -1.0;
@@ -108,15 +116,15 @@ void createNlRow2(CONVEXSIDE convexside)
108116
/* decide curvature */
109117
if( convexside == RHS )
110118
{
111-
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"<x>^2 - <y>", NULL, NULL, NULL) );
119+
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"<t_x>^2 - <y>", NULL, NULL, NULL) );
112120

113121
curvature = SCIP_EXPRCURV_CONVEX;
114122
lhs = -SCIPinfinity(scip);
115123
rhs = 0.0;
116124
}
117125
else
118126
{
119-
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"<y> - <x>^2", NULL, NULL, NULL) );
127+
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"<y> - <t_x>^2", NULL, NULL, NULL) );
120128

121129
curvature = SCIP_EXPRCURV_CONCAVE;
122130
lhs = 0.0;
@@ -142,15 +150,15 @@ void createNlRow3(CONVEXSIDE convexside)
142150
/* decide curvature */
143151
if( convexside == RHS )
144152
{
145-
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"1.1*<x>+2.4*<x>^2 + 0.01*<x>*<y> + 0.3*<y>^2 + 0.2*log(0.5*exp(0.12*<x>+0.1)+2*exp(0.1*<y>)+0.7)", NULL, NULL, NULL) );
153+
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"1.1*<t_x>+2.4*<t_x>^2 + 0.01*<t_x>*<y> + 0.3*<y>^2 + 0.2*log(0.5*exp(0.12*<t_x>+0.1)+2*exp(0.1*<y>)+0.7)", NULL, NULL, NULL) );
146154

147155
curvature = SCIP_EXPRCURV_CONVEX;
148156
lhs = -SCIPinfinity(scip);
149157
rhs = 0.5;
150158
}
151159
else
152160
{
153-
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"-(1.1*<x>+2.4*<x>^2 + 0.01*<x>*<y> + 0.3*<y>^2 + 0.2*log(0.5*exp(0.12*<x>+0.1)+2*exp(0.1*<y>)+0.7))", NULL, NULL, NULL) );
161+
SCIP_CALL( SCIPparseExpr(scip, &expr, (char*)"-(1.1*<t_x>+2.4*<t_x>^2 + 0.01*<t_x>*<y> + 0.3*<y>^2 + 0.2*log(0.5*exp(0.12*<t_x>+0.1)+2*exp(0.1*<y>)+0.7))", NULL, NULL, NULL) );
154162

155163
curvature = SCIP_EXPRCURV_CONCAVE;
156164
lhs = -0.5;
@@ -205,13 +213,23 @@ void test_setup(void)
205213

206214
SCIP_CALL( SCIPcreate(&scip) );
207215

216+
/* include some expr handlers */
217+
SCIP_CALL( SCIPincludeExprhdlrExp(scip) );
218+
SCIP_CALL( SCIPincludeExprhdlrLog(scip) );
219+
SCIP_CALL( SCIPincludeExprhdlrVar(scip) );
220+
SCIP_CALL( SCIPincludeExprhdlrVaridx(scip) );
221+
SCIP_CALL( SCIPincludeExprhdlrValue(scip) );
222+
SCIP_CALL( SCIPincludeExprhdlrSum(scip) );
223+
SCIP_CALL( SCIPincludeExprhdlrPow(scip) );
224+
SCIP_CALL( SCIPincludeExprhdlrProduct(scip) );
225+
208226
/* if no IPOPT available, don't run test */
209227
if( ! SCIPisIpoptAvailableIpopt() )
210228
return;
211229

212230
/* include NLPI's */
213231
SCIP_CALL( SCIPincludeNlpSolverIpopt(scip) );
214-
232+
haveipopt = TRUE;
215233

216234
/* include convexproj separator and get it */
217235
SCIP_CALL( SCIPincludeSepaConvexproj(scip) );
@@ -269,7 +287,7 @@ void project(SCIP_Bool* isrhsconvex)
269287

270288
test_setup();
271289
/* if no IPOPT available, don't run test */
272-
if( nlpi == NULL )
290+
if( !haveipopt )
273291
return;
274292

275293
/* create the nl rows */

0 commit comments

Comments
 (0)