diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java index a1e3aa2247f47f6b1e2d436095f87f5bb99ec103..680929a0bd308a0f4d2023ee7284b99288b1043c 100644 --- a/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java @@ -27,15 +27,16 @@ public class DynamicClusteringAMAS<T extends DataPoint> extends Amas<DynamicClus protected void onSystemCycleBegin() { if (logger.isLoggable(Level.INFO)) logger.info("---- BEGIN MAS CYCLE ----"); - if (agents.isEmpty() || allAgentsAreDormant()) { + if (agents.isEmpty() || allAgentsAreReadyToStop()) { var newDataPoint = environment.pollPendingDataPoint(); newDataPoint.ifPresent(dataPoint -> new DataPointAgent<T>(this, dataPoint)); } } - private boolean allAgentsAreDormant() { + private boolean allAgentsAreReadyToStop() { return agents.stream() - .noneMatch(agent -> agent instanceof ClusterAgent clusterAgent && !clusterAgent.readyToStop()); + .noneMatch(agent -> (agent instanceof ClusterAgent clusterAgent && !clusterAgent.readyToStop()) || + (agent instanceof DataPointAgent dataPointAgent && !dataPointAgent.readyToStop())); } @Override @@ -49,7 +50,6 @@ public class DynamicClusteringAMAS<T extends DataPoint> extends Amas<DynamicClus @Override public boolean stopCondition() { return !environment.hasRemainingPendingAdditionDataPoints() && - agents.stream().noneMatch(agent -> agent instanceof ClusterAgent clusterAgent && !clusterAgent.readyToStop()) && - agents.stream().noneMatch(agent -> agent instanceof DataPointAgent); + allAgentsAreReadyToStop(); } } diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/agent/DataPointAgent.java b/src/main/java/fr/irit/smac/amas4dc/amas/agent/DataPointAgent.java index c331a3f21fcfafa03ba01f490ead7d1921214aee..aeca5e0caefe4071f6e344523e1e75e4d7d048d5 100644 --- a/src/main/java/fr/irit/smac/amas4dc/amas/agent/DataPointAgent.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/agent/DataPointAgent.java @@ -142,6 +142,10 @@ public class DataPointAgent<T extends DataPoint> extends Agent<DynamicClustering } } + public boolean readyToStop() { + return false; + } + private record ClusterSimilarityScore<T extends DataPoint>(Cluster<T> cluster, float score) {