From 15fafc1b66a38e362f4aca49a8848d080f760310 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 2 Aug 2019 19:04:40 +0200 Subject: Be more lenient with rounding IP solver results --- .../logic2viatra/cardinality/CbcPolyhedronSolver.xtend | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/CbcPolyhedronSolver.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/CbcPolyhedronSolver.xtend index c772aebc..75c396b4 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/CbcPolyhedronSolver.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/CbcPolyhedronSolver.xtend @@ -142,13 +142,13 @@ class CbcSaturationOperator extends AbstractPolyhedronSaturationOperator { switch (minimizationResult) { CbcResult.SolutionBounded: { val doubleValue = minimizationResult.value - val roundedValue = Math.floor(doubleValue) + val roundedValue = Math.ceil(doubleValue - EPSILON) val intValue = roundedValue as int val oldBound = expressionToSaturate.lowerBound - if (oldBound === null || intValue > oldBound) { + if (oldBound === null || intValue >= oldBound) { expressionToSaturate.lowerBound = intValue setBound(expressionToSaturate, constraints, roundedValue, columnLowerBounds, rowLowerBounds) - } else if (oldBound - doubleValue > EPSILON) { + } else { throw new IllegalStateException("Unexpected decrease of lower bound by " + (oldBound - doubleValue)) } } @@ -175,13 +175,13 @@ class CbcSaturationOperator extends AbstractPolyhedronSaturationOperator { switch (maximizationResult) { CbcResult.SolutionBounded: { val doubleValue = -maximizationResult.value - val roundedValue = Math.ceil(doubleValue) + val roundedValue = Math.floor(doubleValue + EPSILON) val intValue = roundedValue as int val oldBound = expressionToSaturate.upperBound - if (oldBound === null || intValue < oldBound) { + if (oldBound === null || intValue <= oldBound) { expressionToSaturate.upperBound = intValue setBound(expressionToSaturate, constraints, roundedValue, columnUpperBounds, rowUpperBounds) - } else if (doubleValue - oldBound > EPSILON) { + } else { throw new IllegalStateException("Unexpected increase of upper bound by " + (doubleValue - oldBound)) } } -- cgit v1.2.3-54-g00ecf