From 015683cd873ca7339d34ba3bb0f0ccdf6c2cd221 Mon Sep 17 00:00:00 2001 From: Alexandre <alexandre.perles@gmail.com> Date: Thu, 14 Sep 2023 16:48:35 +0200 Subject: [PATCH] Allow chaining on fusion --- .../smac/amas4dc/amas/agent/ClusterAgent.java | 114 ++++++++++-------- .../amas4dc/amas/agent/DataPointAgent.java | 44 ++----- .../messages/InformMostSimilarMessage.java | 14 ++- ...ClusterSimilarityToBeAbsorbedMessage.java} | 5 +- ...taPointSimilarityToBeAbsorbedMessage.java} | 6 +- .../smac/amas4dc/amas/ClusterAgentTest.groovy | 20 ++- 6 files changed, 106 insertions(+), 97 deletions(-) rename src/main/java/fr/irit/smac/amas4dc/amas/messages/{RequestSimilarityForFusionMessage.java => RequestClusterSimilarityToBeAbsorbedMessage.java} (65%) rename src/main/java/fr/irit/smac/amas4dc/amas/messages/{RequestSimilarityToBeAbsorbedMessage.java => RequestDataPointSimilarityToBeAbsorbedMessage.java} (56%) diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/agent/ClusterAgent.java b/src/main/java/fr/irit/smac/amas4dc/amas/agent/ClusterAgent.java index 6b1044a..884ac32 100644 --- a/src/main/java/fr/irit/smac/amas4dc/amas/agent/ClusterAgent.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/agent/ClusterAgent.java @@ -7,8 +7,8 @@ import fr.irit.smac.amas4dc.amas.DynamicClusteringAMAS; import fr.irit.smac.amas4dc.amas.DynamicClusteringEnvironment; import fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage; import fr.irit.smac.amas4dc.amas.messages.InformMostSimilarMessage; -import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityForFusionMessage; -import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityToBeAbsorbedMessage; +import fr.irit.smac.amas4dc.amas.messages.RequestDataPointSimilarityToBeAbsorbedMessage; +import fr.irit.smac.amas4dc.amas.messages.RequestClusterSimilarityToBeAbsorbedMessage; import fr.irit.smac.amas4dc.cluster.Cluster; import fr.irit.smac.amas4dc.cluster.DataPoint; import fr.irit.smac.amas4dc.cluster.ExtendedCluster; @@ -35,8 +35,8 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM private final Random random = new Random(); private static final Logger logger = Logger.getLogger(ClusterAgent.class.getName()); private int amountOfCyclesWithTheSameState; - private Optional<RequestSimilarityForFusionMessage> receivedRequestSimilarityForFusionMessage = Optional.empty(); - private Optional<RequestSimilarityToBeAbsorbedMessage> receivedRequestSimilarityToBeAbsorbedMessage = Optional.empty(); + private Optional<RequestDataPointSimilarityToBeAbsorbedMessage> receivedRequestDataPointSimilarityToBeAbsorbedMessage = Optional.empty(); + private Optional<RequestClusterSimilarityToBeAbsorbedMessage> receivedRequestClusterSimilarityToBeAbsorbedMessage = Optional.empty(); private Optional<InformMostSimilarMessage> receivedInformMostSimilarClusterAgentsMessage = Optional.empty(); private List<ClusterAgent<T>> requestSimilarityMessageSentAgents = new ArrayList<>(); @@ -50,7 +50,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM this.setCluster(new Cluster<T>(dataPoint)); } - public enum State {DORMANT, WAITING_FOR_SIMILARITY, ACTIVE_FUSION_WITH_ANOTHER_CLUSTER_AGENT, DEAD, ACTIVE_ABSORB_A_DATA_POINT} + public enum State {DORMANT, WAITING_FOR_SIMILARITY, DEAD} public State getState() { return state; @@ -72,8 +72,8 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM @Override protected void onPerceive() { receivedInformMostSimilarClusterAgentsMessage = Optional.empty(); - receivedRequestSimilarityForFusionMessage = Optional.empty(); - receivedRequestSimilarityToBeAbsorbedMessage = Optional.empty(); + receivedRequestDataPointSimilarityToBeAbsorbedMessage = Optional.empty(); + receivedRequestClusterSimilarityToBeAbsorbedMessage = Optional.empty(); switch (state) { case DORMANT -> { this.receivedInformMostSimilarClusterAgentsMessage = this.getMailbox().read(InformMostSimilarMessage.class); @@ -82,14 +82,14 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM logger.info(this + " received a list of candidates similar cluster agents"); return; } - this.receivedRequestSimilarityForFusionMessage = this.getMailbox().read(RequestSimilarityForFusionMessage.class); - if (receivedRequestSimilarityForFusionMessage.isPresent()) { + this.receivedRequestDataPointSimilarityToBeAbsorbedMessage = this.getMailbox().read(RequestDataPointSimilarityToBeAbsorbedMessage.class); + if (receivedRequestDataPointSimilarityToBeAbsorbedMessage.isPresent()) { if (logger.isLoggable(Level.INFO)) - logger.info(this + " received a request for similarity for fusion"); + logger.info(this + " received a request for similarity to be absorbed"); return; } - this.receivedRequestSimilarityToBeAbsorbedMessage = this.getMailbox().read(RequestSimilarityToBeAbsorbedMessage.class); - if (receivedRequestSimilarityToBeAbsorbedMessage.isPresent()) { + this.receivedRequestClusterSimilarityToBeAbsorbedMessage = this.getMailbox().read(RequestClusterSimilarityToBeAbsorbedMessage.class); + if (receivedRequestClusterSimilarityToBeAbsorbedMessage.isPresent()) { if (logger.isLoggable(Level.INFO)) logger.info(this + " received a request for similarity to be absorbed"); return; @@ -121,31 +121,31 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM protected void onDecideAndAct() { switch (state) { case DORMANT -> { - if (receivedRequestSimilarityForFusionMessage.isPresent()) { - float similarityScore = computeSimilarityScore((T) receivedRequestSimilarityForFusionMessage.get().getCluster().getRepresentative()); + if (receivedRequestDataPointSimilarityToBeAbsorbedMessage.isPresent()) { + float similarityScore = computeSimilarityScore((T) receivedRequestDataPointSimilarityToBeAbsorbedMessage.get().getDataPoint()); var message = new EvaluatedScoreMessage<T>(this, cluster, similarityScore); - var sender = receivedRequestSimilarityForFusionMessage.get().getSender(); + var sender = receivedRequestDataPointSimilarityToBeAbsorbedMessage.get().getSender(); if (logger.isLoggable(Level.INFO)) { logger.info(this + " --> " + sender + " " + message); } sender.getMailbox().receive(message); - - if (similarityScore >= getAmas().getMasSettings().fusionThreshold()) { - destroy(); - } - } else if (receivedRequestSimilarityToBeAbsorbedMessage.isPresent()) { - float similarityScore = computeSimilarityScore((T) receivedRequestSimilarityToBeAbsorbedMessage.get().getDataPoint()); + } else if (receivedRequestClusterSimilarityToBeAbsorbedMessage.isPresent()) { + float similarityScore = computeSimilarityScore((Cluster<T>) receivedRequestClusterSimilarityToBeAbsorbedMessage.get().getCluster()); var message = new EvaluatedScoreMessage<T>(this, cluster, similarityScore); - var sender = receivedRequestSimilarityToBeAbsorbedMessage.get().getSender(); + var sender = receivedRequestClusterSimilarityToBeAbsorbedMessage.get().getSender(); if (logger.isLoggable(Level.INFO)) { logger.info(this + " --> " + sender + " " + message); } sender.getMailbox().receive(message); } else if (receivedInformMostSimilarClusterAgentsMessage.isPresent()) { - absorb((T) receivedInformMostSimilarClusterAgentsMessage.get().getDataPoint()); - List<ClusterAgent<T>> otherSimilarClusterAgents = ((InformMostSimilarMessage<T>) receivedInformMostSimilarClusterAgentsMessage.get()).getOtherSimilarClusterAgents(); + var informMostSimilarMessage = receivedInformMostSimilarClusterAgentsMessage.get(); + if (informMostSimilarMessage.getDataPoint() != null) + absorbDataPoint((T) informMostSimilarMessage.getDataPoint()); + else if (informMostSimilarMessage.getCluster() != null) + absorbCluster(informMostSimilarMessage.getCluster()); + List<ClusterAgent<T>> otherSimilarClusterAgents = ((InformMostSimilarMessage<T>) informMostSimilarMessage).getOtherSimilarClusterAgents(); for (var otherClusterAgent : otherSimilarClusterAgents) { - otherClusterAgent.getMailbox().receive(new RequestSimilarityForFusionMessage(this, cluster)); + otherClusterAgent.getMailbox().receive(new RequestClusterSimilarityToBeAbsorbedMessage(this, cluster)); } if (!otherSimilarClusterAgents.isEmpty()) { this.requestSimilarityMessageSentAgents.clear(); @@ -165,12 +165,35 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM } case WAITING_FOR_SIMILARITY -> { if (requestSimilarityMessageSentAgents.size() == similarityScoresReceived.size()) { - for (var ssr : - similarityScoresReceived.entrySet()) { - if (ssr.getValue().score()>=getAmas().getMasSettings().fusionThreshold()) - absorb(ssr.getValue().cluster()); + + float mostSimilarClusterAgentScore = -1; + var allSimilarClusterAgents = new HashMap<ClusterAgent<T>, Double>(); + Optional<ClusterAgent<T>> mostSimilarClusterAgent = Optional.empty(); + var othersSimilarClusterAgents = new ArrayList<ClusterAgent<T>>(); + for (var ssr : similarityScoresReceived.entrySet()) { + if (ssr.getValue().score() >= getAmas().getMasSettings().fusionThreshold()) { + if (mostSimilarClusterAgentScore == -1 || ssr.getValue().score() > mostSimilarClusterAgentScore) { + mostSimilarClusterAgent = Optional.of(ssr.getKey()); + mostSimilarClusterAgentScore = ssr.getValue().score(); + } + allSimilarClusterAgents.put(ssr.getKey(), (double) ssr.getValue().score()); + } + } + for (var ca : allSimilarClusterAgents.keySet()) { + if (ca != mostSimilarClusterAgent.get()) + othersSimilarClusterAgents.add(ca); + } + if (mostSimilarClusterAgent.isPresent()) { + + if (logger.isLoggable(Level.INFO)) + logger.info(this + " decides to be absorbed"); + mostSimilarClusterAgent.get().getMailbox().receive(new InformMostSimilarMessage<T>(this, + getCluster(), + othersSimilarClusterAgents)); + destroy(); + }else{ + nextState = State.DORMANT; } - nextState = State.DORMANT; } } } @@ -179,39 +202,31 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM private void applyNextState() { - if (state == nextState) { - amountOfCyclesWithTheSameState++; - if (amountOfCyclesWithTheSameState > 10 && state == State.ACTIVE_FUSION_WITH_ANOTHER_CLUSTER_AGENT) - throw new RuntimeException(this + " is in the state " + state + " for too long"); - } else { - amountOfCyclesWithTheSameState = 0; - } state = nextState; } - private void absorb(Cluster<T> other) { + private void absorbDataPoint(T otherDataPoint) { if (logger.isLoggable(Level.INFO)) - logger.info(this + " absorbs " + other); + logger.info(this + " absorbs the data point " + otherDataPoint); - T newRepresentative = (T) amas.getMasSettings().dataPointFuser().apply(cluster.getRepresentative(), other.getRepresentative()); + T newRepresentative = (T) amas.getMasSettings().dataPointFuser().apply(cluster.getRepresentative(), otherDataPoint); Cluster<T> newCluster; if (getAmas().getMasSettings().amasOptions().contains(AMASOption.KeepAllDataPoints)) - newCluster = new ExtendedCluster<>(newRepresentative, cluster, other); + newCluster = new ExtendedCluster<>(newRepresentative, otherDataPoint, cluster); else - newCluster = new Cluster<T>(newRepresentative, cluster, other); + newCluster = new Cluster<T>(newRepresentative, otherDataPoint, cluster); setCluster(newCluster); } - - private void absorb(T otherDataPoint) { + private void absorbCluster(Cluster<T> otherCluster) { if (logger.isLoggable(Level.INFO)) - logger.info(this + " absorbs " + otherDataPoint); + logger.info(this + " absorbs the cluster " + otherCluster); - T newRepresentative = (T) amas.getMasSettings().dataPointFuser().apply(cluster.getRepresentative(), otherDataPoint); + T newRepresentative = (T) amas.getMasSettings().dataPointFuser().apply(cluster.getRepresentative(), otherCluster.getRepresentative()); Cluster<T> newCluster; if (getAmas().getMasSettings().amasOptions().contains(AMASOption.KeepAllDataPoints)) - newCluster = new ExtendedCluster<>(newRepresentative, otherDataPoint, cluster); + newCluster = new ExtendedCluster<>(newRepresentative, otherCluster, cluster); else - newCluster = new Cluster<T>(newRepresentative, otherDataPoint, cluster); + newCluster = new Cluster<T>(newRepresentative, otherCluster, cluster); setCluster(newCluster); } @@ -240,4 +255,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAM private float computeSimilarityScore(T other) { return getAmas().getMasSettings().similarityScoreMethod().apply(this.cluster.getRepresentative(), other); } + private float computeSimilarityScore(Cluster<T> other) { + return getAmas().getMasSettings().similarityScoreMethod().apply(this.cluster.getRepresentative(), other.getRepresentative()); + } } 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 b302b8f..44f713e 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 @@ -6,7 +6,8 @@ import fr.irit.smac.amas4dc.amas.DynamicClusteringAMAS; import fr.irit.smac.amas4dc.amas.DynamicClusteringEnvironment; import fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage; import fr.irit.smac.amas4dc.amas.messages.InformMostSimilarMessage; -import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityToBeAbsorbedMessage; +import fr.irit.smac.amas4dc.amas.messages.RequestClusterSimilarityToBeAbsorbedMessage; +import fr.irit.smac.amas4dc.amas.messages.RequestDataPointSimilarityToBeAbsorbedMessage; import fr.irit.smac.amas4dc.cluster.Cluster; import fr.irit.smac.amas4dc.cluster.DataPoint; @@ -21,7 +22,6 @@ public class DataPointAgent<T extends DataPoint> extends Agent<DynamicClustering private final List<ClusterAgent<T>> requestSimilarityMessageSentAgents = new ArrayList<>(); private final Map<ClusterAgent<T>, ClusterSimilarityScore<T>> similarityScoresReceived = new HashMap<>(); private static final Logger logger = Logger.getLogger(DataPointAgent.class.getName()); - private boolean decideToFuse, decideToCreateANewCluster; public DataPointAgent(DynamicClusteringAMAS<T> amas, T dataPoint) { super(amas); @@ -47,7 +47,7 @@ public class DataPointAgent<T extends DataPoint> extends Agent<DynamicClustering for (var agent : clusterAgentsRoughlySimilarOnReady) { if (logger.isLoggable(Level.INFO)) logger.info(this + " sends RequestSimilarityToBeAbsorbedMessage to " + agent); - agent.getMailbox().receive(new RequestSimilarityToBeAbsorbedMessage<T>(this, dataPoint)); + agent.getMailbox().receive(new RequestDataPointSimilarityToBeAbsorbedMessage<T>(this, dataPoint)); requestSimilarityMessageSentAgents.add(agent); } } @@ -65,9 +65,6 @@ public class DataPointAgent<T extends DataPoint> extends Agent<DynamicClustering @Override protected void onDecideAndAct() { - decideToFuse = false; - decideToCreateANewCluster = false; - var othersSimilarClusterAgents = new ArrayList<ClusterAgent<T>>(); Optional<ClusterAgent<T>> mostSimilarClusterAgent = Optional.empty(); @@ -90,37 +87,22 @@ public class DataPointAgent<T extends DataPoint> extends Agent<DynamicClustering } } if (mostSimilarClusterAgent.isPresent()) { - for (var ca : - allSimilarClusterAgents.keySet()) { + for (var ca : allSimilarClusterAgents.keySet()) { if (ca != mostSimilarClusterAgent.get()) othersSimilarClusterAgents.add(ca); } - decideToFuse = true; - } else - decideToCreateANewCluster = true; - - if (logger.isLoggable(Level.INFO)) { - if (decideToFuse) - logger.info(this + " decides to fuse with one of them"); - else if (decideToCreateANewCluster) - logger.info(this + " decides to create a new cluster"); - else - logger.info(this + " decides NOT to fuse not with one of them"); + if (logger.isLoggable(Level.INFO)) + logger.info(this + " decides to bo absorbed"); + mostSimilarClusterAgent.get().getMailbox().receive(new InformMostSimilarMessage<T>(this, + dataPoint, + othersSimilarClusterAgents)); + destroy(); + } else { + new ClusterAgent<T>(amas, dataPoint); + destroy(); } } - - if (decideToFuse) { - if (logger.isLoggable(Level.INFO)) - logger.info(this + " decides to bo absorbed"); - mostSimilarClusterAgent.get().getMailbox().receive(new InformMostSimilarMessage<T>(this, - dataPoint, - othersSimilarClusterAgents)); - destroy(); - } else if (decideToCreateANewCluster) { - new ClusterAgent<T>(amas, dataPoint); - destroy(); - } } @Override diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/messages/InformMostSimilarMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/InformMostSimilarMessage.java index 694daee..5cf0d9b 100644 --- a/src/main/java/fr/irit/smac/amas4dc/amas/messages/InformMostSimilarMessage.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/InformMostSimilarMessage.java @@ -1,5 +1,6 @@ package fr.irit.smac.amas4dc.amas.messages; +import fr.irit.smac.amak.Agent; import fr.irit.smac.amak.messaging.Message; import fr.irit.smac.amas4dc.amas.agent.ClusterAgent; import fr.irit.smac.amas4dc.amas.agent.DataPointAgent; @@ -9,15 +10,24 @@ import lombok.Getter; import java.util.List; -public class InformMostSimilarMessage<T extends DataPoint> extends Message<DataPointAgent<T>> { +public class InformMostSimilarMessage<T extends DataPoint> extends Message { @Getter private final T dataPoint; @Getter private final List<ClusterAgent<T>> otherSimilarClusterAgents; + @Getter + private final Cluster<T> cluster; - public InformMostSimilarMessage(DataPointAgent<T> sender, T dataPoint, List<ClusterAgent<T>> otherSimilarClusterAgents) { + public InformMostSimilarMessage(Agent sender, T dataPoint, List<ClusterAgent<T>> otherSimilarClusterAgents) { super(sender); this.dataPoint = dataPoint; + this.cluster = null; + this.otherSimilarClusterAgents = otherSimilarClusterAgents; + } + public InformMostSimilarMessage(Agent sender, Cluster<T> cluster, List<ClusterAgent<T>> otherSimilarClusterAgents) { + super(sender); + this.cluster = cluster; + this.dataPoint = null; this.otherSimilarClusterAgents = otherSimilarClusterAgents; } } diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityForFusionMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestClusterSimilarityToBeAbsorbedMessage.java similarity index 65% rename from src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityForFusionMessage.java rename to src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestClusterSimilarityToBeAbsorbedMessage.java index fef3346..acf0b90 100644 --- a/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityForFusionMessage.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestClusterSimilarityToBeAbsorbedMessage.java @@ -7,10 +7,11 @@ import fr.irit.smac.amas4dc.cluster.Cluster; import fr.irit.smac.amas4dc.cluster.DataPoint; import lombok.Getter; -public class RequestSimilarityForFusionMessage<T extends DataPoint> extends Message<ClusterAgent<T>> { +public class RequestClusterSimilarityToBeAbsorbedMessage<T extends DataPoint> extends Message<ClusterAgent<T>> { @Getter private final Cluster<T> cluster; - public RequestSimilarityForFusionMessage(ClusterAgent<T> sender, Cluster<T> cluster) { + + public RequestClusterSimilarityToBeAbsorbedMessage(ClusterAgent<T> sender, Cluster<T> cluster) { super(sender); this.cluster = cluster; } diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityToBeAbsorbedMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestDataPointSimilarityToBeAbsorbedMessage.java similarity index 56% rename from src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityToBeAbsorbedMessage.java rename to src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestDataPointSimilarityToBeAbsorbedMessage.java index 79c4b35..3001370 100644 --- a/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityToBeAbsorbedMessage.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestDataPointSimilarityToBeAbsorbedMessage.java @@ -1,17 +1,17 @@ package fr.irit.smac.amas4dc.amas.messages; -import fr.irit.smac.amak.Agent; import fr.irit.smac.amak.messaging.Message; +import fr.irit.smac.amas4dc.amas.agent.ClusterAgent; import fr.irit.smac.amas4dc.amas.agent.DataPointAgent; import fr.irit.smac.amas4dc.cluster.Cluster; import fr.irit.smac.amas4dc.cluster.DataPoint; import lombok.Getter; -public class RequestSimilarityToBeAbsorbedMessage<T extends DataPoint> extends Message<DataPointAgent<T>> { +public class RequestDataPointSimilarityToBeAbsorbedMessage<T extends DataPoint> extends Message<DataPointAgent<T>> { @Getter private final T dataPoint; - public RequestSimilarityToBeAbsorbedMessage(DataPointAgent<T> sender, T dataPoint) { + public RequestDataPointSimilarityToBeAbsorbedMessage(DataPointAgent<T> sender, T dataPoint) { super(sender); this.dataPoint = dataPoint; } diff --git a/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy b/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy index 04250dd..9f91ccb 100644 --- a/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy +++ b/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy @@ -2,13 +2,11 @@ package fr.irit.smac.amas4dc.amas import fr.irit.smac.amak.messaging.Mailbox -import fr.irit.smac.amas4dc.amas.DynamicClusteringEnvironment -import fr.irit.smac.amas4dc.amas.MASSettings import fr.irit.smac.amas4dc.amas.agent.ClusterAgent import fr.irit.smac.amas4dc.amas.agent.DataPointAgent import fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage -import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityForFusionMessage -import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityToBeAbsorbedMessage +import fr.irit.smac.amas4dc.amas.messages.RequestClusterSimilarityToBeAbsorbedMessage +import fr.irit.smac.amas4dc.amas.messages.RequestDataPointSimilarityToBeAbsorbedMessage import fr.irit.smac.amas4dc.cluster.Cluster import fr.irit.smac.amas4dc.cluster.DataPoint import fr.irit.smac.amas4dc.cluster.DataPointFuser @@ -17,7 +15,8 @@ import spock.lang.Specification import spock.util.concurrent.BlockingVariable class ClusterAgentTest extends Specification { - def "When an agent in DORMANT receives a RequestSimilarityForFusionMessage, it should reply with a similarity score"() { + + def "When an agent in DORMANT receives a RequestDataPointSimilarityToBeAbsorbedMessage, it should reply with a similarity score"() { given: def messageReceivedByRequester = new BlockingVariable() @@ -35,11 +34,11 @@ class ClusterAgentTest extends Specification { requesterMailboxMock.receive(_) >> { msg -> messageReceivedByRequester.set(msg) } - def requesterAgentMock = Mock(ClusterAgent) + def requesterAgentMock = Mock(DataPointAgent) requesterAgentMock.getMailbox() >> requesterMailboxMock when: - agent.mailbox.receive(new RequestSimilarityForFusionMessage(requesterAgentMock, Mock(Cluster))) + agent.mailbox.receive(new RequestDataPointSimilarityToBeAbsorbedMessage(requesterAgentMock, Mock(DataPoint))) agent.cycle() agent.cycle() @@ -47,8 +46,7 @@ class ClusterAgentTest extends Specification { messageReceivedByRequester.get()[0] instanceof EvaluatedScoreMessage ((EvaluatedScoreMessage) (messageReceivedByRequester.get()[0])).similarityScore == 0.3f } - - def "When an agent in DORMANT receives a RequestSimilarityToBeAbsorbedMessage, it should reply with a similarity score"() { + def "When an agent in DORMANT receives a RequestClusterSimilarityToBeAbsorbedMessage, it should reply with a similarity score"() { given: def messageReceivedByRequester = new BlockingVariable() @@ -66,11 +64,11 @@ class ClusterAgentTest extends Specification { requesterMailboxMock.receive(_) >> { msg -> messageReceivedByRequester.set(msg) } - def requesterAgentMock = Mock(DataPointAgent) + def requesterAgentMock = Mock(ClusterAgent) requesterAgentMock.getMailbox() >> requesterMailboxMock when: - agent.mailbox.receive(new RequestSimilarityToBeAbsorbedMessage(requesterAgentMock, Mock(DataPoint))) + agent.mailbox.receive(new RequestClusterSimilarityToBeAbsorbedMessage(requesterAgentMock, Mock(Cluster))) agent.cycle() agent.cycle() -- GitLab