diff --git a/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/result/impl/AbstractFlowRaoResult.java b/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/result/impl/AbstractFlowRaoResult.java index 064fa64326..17cc203922 100644 --- a/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/result/impl/AbstractFlowRaoResult.java +++ b/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/result/impl/AbstractFlowRaoResult.java @@ -27,7 +27,7 @@ public boolean isSecure(Instant optimizedInstant, PhysicalParameter... u) { if (Arrays.stream(u).noneMatch(PhysicalParameter.FLOW::equals)) { throw new OpenRaoException("This is a flow RaoResult, isSecure is available for FLOW physical parameter"); } - if (getFunctionalCost(optimizedInstant) >= 0) { + if (anyOverload(optimizedInstant)) { return false; } if (Arrays.stream(u).anyMatch(physicalParameter -> !PhysicalParameter.FLOW.equals(physicalParameter))) { @@ -35,4 +35,11 @@ public boolean isSecure(Instant optimizedInstant, PhysicalParameter... u) { } return true; } + + private boolean anyOverload(Instant optimizedInstant) { + if (getVirtualCostNames().contains("min-margin-violation-evaluator")) { + return getVirtualCost(optimizedInstant, "min-margin-violation-evaluator") > 0; + } + return getFunctionalCost(optimizedInstant) >= 0; + } }