From a18e8fb2d31e8cdd967c53a010c79dc6f104da2a Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 11 Sep 2023 19:28:59 +0200 Subject: fix: avoid GLOP error message on stderr --- .../tools/refinery/store/reasoning/scope/BoundScopePropagator.java | 6 +++++- .../refinery/store/reasoning/scope/LowerTypeScopePropagator.java | 2 +- .../tools/refinery/store/reasoning/scope/TypeScopePropagator.java | 7 ++++++- .../refinery/store/reasoning/scope/UpperTypeScopePropagator.java | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/BoundScopePropagator.java b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/BoundScopePropagator.java index 3ae4d84b..ecca6117 100644 --- a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/BoundScopePropagator.java +++ b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/BoundScopePropagator.java @@ -37,6 +37,7 @@ class BoundScopePropagator implements BoundPropagator { queryEngine = model.getAdapter(ModelQueryAdapter.class); countInterpretation = model.getInterpretation(storeAdapter.getCountSymbol()); solver = MPSolver.createSolver("GLOP"); + solver.suppressOutput(); objective = solver.objective(); initializeVariables(); countInterpretation.addListener(this::countChanged, true); @@ -149,7 +150,10 @@ class BoundScopePropagator implements BoundPropagator { changed = false; for (var propagator : propagators) { model.checkCancelled(); - propagator.updateBounds(); + if (!propagator.updateBounds()) { + // Avoid logging GLOP error to console by checking for inconsistent constraints in advance. + return PropagationResult.REJECTED; + } } var result = PropagationResult.UNCHANGED; if (activeVariables.isEmpty()) { diff --git a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/LowerTypeScopePropagator.java b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/LowerTypeScopePropagator.java index 5d903f41..2be92464 100644 --- a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/LowerTypeScopePropagator.java +++ b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/LowerTypeScopePropagator.java @@ -35,7 +35,7 @@ class LowerTypeScopePropagator extends TypeScopePropagator { } @Override - public void updateBounds() { + protected void doUpdateBounds() { constraint.setLb((lowerBound - getSingleCount())); } diff --git a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/TypeScopePropagator.java b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/TypeScopePropagator.java index db80be7f..bb50656b 100644 --- a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/TypeScopePropagator.java +++ b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/TypeScopePropagator.java @@ -38,7 +38,12 @@ abstract class TypeScopePropagator { multiNodes.addListener(this::multiChanged); } - public abstract void updateBounds(); + protected abstract void doUpdateBounds(); + + public boolean updateBounds() { + doUpdateBounds(); + return constraint.lb() <= constraint.ub(); + } protected int getSingleCount() { return allNodes.size() - multiNodes.size(); diff --git a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/UpperTypeScopePropagator.java b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/UpperTypeScopePropagator.java index 062f976c..4aba5aac 100644 --- a/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/UpperTypeScopePropagator.java +++ b/subprojects/store-reasoning-scope/src/main/java/tools/refinery/store/reasoning/scope/UpperTypeScopePropagator.java @@ -26,8 +26,8 @@ class UpperTypeScopePropagator extends TypeScopePropagator { } @Override - public void updateBounds() { - constraint.setUb(upperBound - getSingleCount()); + protected void doUpdateBounds() { + constraint.setUb((upperBound - getSingleCount())); } public static class Factory extends TypeScopePropagator.Factory { -- cgit v1.2.3-54-g00ecf