Skip to content
Snippets Groups Projects
Commit 41699257 authored by Alexandre's avatar Alexandre
Browse files

Use new mailbox, add test

parent 86f00ee0
No related branches found
No related tags found
No related merge requests found
package fr.irit.smac.clumate.amas;
import fr.irit.smac.amak.Agent;
import fr.irit.smac.amak.messaging.Mailbox;
import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage;
import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage;
import fr.irit.smac.clumate.cluster.Cluster;
......@@ -20,11 +19,6 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
private State state = State.INIT;
private State nextState = state;
//region Mail boxes
private final Mailbox<RequestSimilarityMessage> requestSimilarityMessageMailBox = new Mailbox<>();
private final Mailbox<EvaluatedScoreMessage> evaluatedScoreMessageMailbox = new Mailbox<>();
//endregion
//region Perception variables
private Cluster<T> receivedClusterForRequestSimilarity;
private ClusterAgent<T> receivedRequestSimilarityRequester;
......@@ -81,14 +75,14 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
}
public boolean readyToStop() {
return state == State.DORMANT && requestSimilarityMessageMailBox.isEmpty();
return state == State.DORMANT && !mailbox.hasMessageOfType(RequestSimilarityMessage.class);
}
@Override
protected void onPerceive() {
switch (state) {
case DORMANT -> {
var receivedRequestSimilarityMessage = this.requestSimilarityMessageMailBox.retrieve();
var receivedRequestSimilarityMessage = this.mailbox.read(RequestSimilarityMessage.class);
if (receivedRequestSimilarityMessage.isPresent()) {
receivedClusterForRequestSimilarity = receivedRequestSimilarityMessage.get().getCluster();
receivedRequestSimilarityRequester = (ClusterAgent) receivedRequestSimilarityMessage.get().getSender();
......@@ -98,8 +92,8 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
}
}
case WAITING_FOR_REPLY -> {
while (!evaluatedScoreMessageMailbox.isEmpty()) {
var evaluatedScoreMessage = this.evaluatedScoreMessageMailbox.retrieve();
while (mailbox.hasMessageOfType(EvaluatedScoreMessage.class)) {
var evaluatedScoreMessage = this.mailbox.read(EvaluatedScoreMessage.class);
if (evaluatedScoreMessage.isPresent()) {
similarityScoresReceived.put((ClusterAgent) evaluatedScoreMessage.get().getSender(), evaluatedScoreMessage.get().getSimilarityScore());
}
......@@ -177,7 +171,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
for (var agent : clusterAgentsRoughlySimilarOnReady) {
if (logger.isLoggable(Level.INFO))
logger.info(this + " sends RequestSimilarityMessage to " + agent);
agent.requestSimilarityMessageMailBox.send(new RequestSimilarityMessage(this, cluster));
agent.mailbox.receive(new RequestSimilarityMessage(this, cluster));
requestSimilarityMessageSentAgents.add(agent);
}
......@@ -191,7 +185,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
var message = new EvaluatedScoreMessage(this, computedSimilarityScoreDuringThisCycle);
if (logger.isLoggable(Level.INFO))
logger.info(this + " --> " + receivedRequestSimilarityRequester + " " + message);
receivedRequestSimilarityRequester.evaluatedScoreMessageMailbox.send(message);
receivedRequestSimilarityRequester.mailbox.receive(message);
receivedRequestSimilarityRequester = null;
if (computedSimilarityScoreDuringThisCycle >= getAmas().getMasSettings().fusionThreshold()) {
......
......@@ -17,11 +17,6 @@ public class ClusterEnvironment<T extends DataPoint> extends Environment {
@Getter
private T lastPolledPendingDataPoint = null;
@Override
public void onInitialEntitiesCreation() {
super.onInitialEntitiesCreation();
}
public boolean hasRemainingPendingAdditionDataPoints() {
return !pendingAdditionDataPoints.isEmpty();
}
......
package fr.irit.smac.clumate.amas
import fr.irit.smac.amak.Agent
import fr.irit.smac.amak.Amas
import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage
import fr.irit.smac.clumate.cluster.Cluster
import fr.irit.smac.clumate.cluster.DataPoint
import fr.irit.smac.clumate.cluster.DataPointFuser
import fr.irit.smac.clumate.cluster.SimilarityScoreMethod
import spock.lang.Specification
class ClusterAgentTest extends Specification {
def "When an agent in DORMANT receives a RequestSimilarityMessage, it should reply with a similarity score"() {
given:
def amas = new ClusterAMAS(new ClusterEnvironment<DataPoint>(), new MASSettings<DataPoint>(Mock(SimilarityScoreMethod), 0.5, EnumSet.noneOf(AMASOption),Mock(DataPointFuser)))
def agent = new ClusterAgent(amas, Mock(DataPoint))
agent.state = ClusterAgent.State.DORMANT
def mock = Mock(ClusterAgent)
when:
agent.mailbox.receive(new RequestSimilarityMessage(mock, Mock(Cluster)))
agent.cycle()
then:
agent.state == ClusterAgent.State.ACTIVE
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment