From d4269cf04a20c95ba704b739ce9e882268aa2d2b Mon Sep 17 00:00:00 2001 From: uuqjz Date: Wed, 16 Sep 2026 12:12:10 +0200 Subject: [PATCH 1/5] Symmetric difference calculator --- .../mitigation/sat/ModelCostCalculator.java | 69 ++++-- .../mitigation/evaluation/tests/TestBase.java | 26 ++- .../testresults/tuhh_efficiency_results.json | 205 ++++++++++++++++++ 3 files changed, 280 insertions(+), 20 deletions(-) create mode 100644 tests/dev.arcovia.mitigation.evaluation.tests/testresults/tuhh_efficiency_results.json diff --git a/bundles/dev.arcovia.mitigation.sat/src/dev/arcovia/mitigation/sat/ModelCostCalculator.java b/bundles/dev.arcovia.mitigation.sat/src/dev/arcovia/mitigation/sat/ModelCostCalculator.java index ca26da2c..799f31a9 100644 --- a/bundles/dev.arcovia.mitigation.sat/src/dev/arcovia/mitigation/sat/ModelCostCalculator.java +++ b/bundles/dev.arcovia.mitigation.sat/src/dev/arcovia/mitigation/sat/ModelCostCalculator.java @@ -72,42 +72,51 @@ public int calculateCost() { return cost; } - public int calculateCostWithoutForwarding() { + + public void changedLabelsWithoutForwarding() { determineRelevantLabels(); for (var label : allRelevantLabels.keySet()) { for (var vertex : nodes) { if (vertex.hasVertexLabel(label)) allRelevantLabels.get(label) .add("Vertex: " + vertex.name); - + var assignments = vertex.getAssignments(); - + for (var assignment : assignments) { - + List assignmentLabel = null; - + if (assignment instanceof Assignment cast) { assignmentLabel = cast.getOutputLabels(); - - } - else if (assignment instanceof SetAssignment cast) { + + } else if (assignment instanceof SetAssignment cast) { assignmentLabel = cast.getOutputLabels(); } - if (assignmentLabel == null) continue; - + if (assignmentLabel == null) + continue; + for (var l : assignmentLabel) { LabelTypeImpl labelType = (LabelTypeImpl) l.eContainer(); - - var tempLabel = new Label(labelType.getEntityName(),l.getEntityName()); - - if (tempLabel.toString().equals(label.toString())) { + + var tempLabel = new Label(labelType.getEntityName(), l.getEntityName()); + + if (tempLabel.toString() + .equals(label.toString())) { Pin outpin = assignment.getOutputPin(); allRelevantLabels.get(label) - .add("Outgoing: " + outpin.getId() + " from: " + vertex.name); + .add("Outgoing: " + outpin.getId() + " from: " + vertex.name); } } } } + } + } + + public int calculateCostWithoutForwarding() { + changedLabelsWithoutForwarding(); + + for (var label : allRelevantLabels.keySet()) { cost += allRelevantLabels.get(label) .size() * costs.get(label); } @@ -115,6 +124,36 @@ else if (assignment instanceof SetAssignment cast) { return cost; } + public int calculateSymmetricDifferenceCost(ModelCostCalculator referenceCalculator) { + + changedLabelsWithoutForwarding(); + referenceCalculator.changedLabelsWithoutForwarding(); + + Set