Skip to content

Commit edc41c9

Browse files
committed
Merge branch 'fix_lpi_grb_assert' into 'v92-bugfix'
fix assert for Gurobi barrier See merge request integer/scip!3907
2 parents c57aadf + 9c56ab8 commit edc41c9

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

src/lpi/lpi_grb.c

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4153,29 +4153,36 @@ SCIP_RETCODE SCIPlpiGetObjval(
41534153
{
41544154
int ret;
41554155

4156-
#ifndef NDEBUG
4157-
double oval = GRB_INFINITY;
4158-
double obnd = -GRB_INFINITY;
4159-
#endif
4160-
41614156
assert(lpi != NULL);
41624157
assert(lpi->grbmodel != NULL);
41634158
assert(objval != NULL);
41644159

41654160
SCIPdebugMessage("getting solution's objective value\n");
41664161

4167-
#ifndef NDEBUG
4168-
(void)GRBgetdblattr(lpi->grbmodel, GRB_DBL_ATTR_OBJVAL, &oval);
4169-
(void)GRBgetdblattr(lpi->grbmodel, GRB_DBL_ATTR_OBJBOUND, &obnd);
4170-
4171-
assert(lpi->solstat != GRB_OPTIMAL || oval == obnd); /*lint !e777*/
4172-
#endif
4173-
41744162
/* obtain objective value */
41754163
ret = GRBgetdblattr(lpi->grbmodel, GRB_DBL_ATTR_OBJVAL, objval);
41764164
assert( ret == 0 || ret == GRB_ERROR_DATA_NOT_AVAILABLE );
41774165
SCIP_UNUSED(ret);
41784166

4167+
#ifndef NDEBUG
4168+
{
4169+
/* in older version the barrier method does not seem to return valid objective bounds */
4170+
#if GRB_VERSION_MAJOR < 12
4171+
double obnd = -GRB_INFINITY;
4172+
int algo;
4173+
(void)GRBgetdblattr(lpi->grbmodel, GRB_DBL_ATTR_OBJBOUND, &obnd);
4174+
(void)GRBgetintparam(lpi->grbenv, GRB_INT_PAR_METHOD, &algo);
4175+
assert(algo == GRB_METHOD_BARRIER || lpi->solstat != GRB_OPTIMAL || *objval == obnd); /*lint !e777*/
4176+
#else
4177+
double obnd;
4178+
double eps;
4179+
(void)GRBgetdblattr(lpi->grbmodel, GRB_DBL_ATTR_OBJBOUND, &obnd);
4180+
(void)GRBgetdblparam(lpi->grbenv, GRB_DBL_PAR_FEASIBILITYTOL, &eps);
4181+
assert(lpi->solstat != GRB_OPTIMAL || fabs(*objval - obnd) <= eps); /*lint !e777*/
4182+
#endif
4183+
}
4184+
#endif
4185+
41794186
/* return minus infinity if value not available and we reached the iteration limit (see lpi_cpx) */
41804187
if( lpi->solstat == GRB_ITERATION_LIMIT )
41814188
{

0 commit comments

Comments
 (0)