From e6ea9421ac507f078f5987830b88dffea9669a37 Mon Sep 17 00:00:00 2001 From: Alexandre <alexandre.perles@gmail.com> Date: Fri, 9 Jun 2023 09:07:54 +0200 Subject: [PATCH] Change name to AMAS4DC --- .idea/.name | 2 +- README.md | 28 +++++----- build.gradle | 3 +- settings.gradle | 2 +- .../java/fr/irit/smac/amas4dc/AMAS4DC.java | 26 +++++++++ .../{clumate => amas4dc}/amas/AMASOption.java | 2 +- .../amas/ClusterAgent.java | 19 ++++--- .../amas/DynamicClusteringAMAS.java} | 12 ++--- .../amas/DynamicClusteringEnvironment.java} | 8 +-- .../amas/MASSettings.java | 10 ++-- .../AMAS4DCCommandAndQueryHandler.java | 51 ++++++++++++++++++ .../amas/controller/command/Command.java | 4 ++ .../command/NewDataPointCommand.java | 4 +- .../controller/command/ShutdownCommand.java | 2 +- .../amas/controller/command/SolveCommand.java | 4 ++ .../amas4dc/amas/controller/query/Query.java | 4 ++ .../amas/controller/query/Result.java | 8 +-- .../query/RetrieveClustersResultQuery.java | 2 +- .../amas/messages/EvaluatedScoreMessage.java | 2 +- .../messages/RequestSimilarityMessage.java | 4 +- .../{clumate => amas4dc}/cluster/Cluster.java | 2 +- .../cluster/DataPoint.java | 2 +- .../cluster/DataPointFuser.java | 2 +- .../cluster/SimilarityScoreMethod.java | 2 +- .../event/NewClusterEvent.java | 6 +-- .../event/RemoveClusterEvent.java | 6 +-- .../java/fr/irit/smac/clumate/CluMATE.java | 28 ---------- .../amas/controller/CluMATEController.java | 53 ------------------- .../amas/controller/command/Command.java | 4 -- .../amas/controller/command/SolveCommand.java | 4 -- .../clumate/amas/controller/query/Query.java | 4 -- src/test/groovy/SimpleClusteringIT.groovy | 18 +++---- .../amas/ClusterAgentTest.groovy | 21 ++++---- 33 files changed, 170 insertions(+), 179 deletions(-) create mode 100644 src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/AMASOption.java (50%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/ClusterAgent.java (94%) rename src/main/java/fr/irit/smac/{clumate/amas/ClusterAMAS.java => amas4dc/amas/DynamicClusteringAMAS.java} (77%) rename src/main/java/fr/irit/smac/{clumate/amas/ClusterEnvironment.java => amas4dc/amas/DynamicClusteringEnvironment.java} (83%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/MASSettings.java (69%) create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/command/NewDataPointCommand.java (55%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/command/ShutdownCommand.java (50%) create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/query/Result.java (75%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/query/RetrieveClustersResultQuery.java (55%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/messages/EvaluatedScoreMessage.java (89%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/messages/RequestSimilarityMessage.java (77%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/Cluster.java (92%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/DataPoint.java (66%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/DataPointFuser.java (76%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/SimilarityScoreMethod.java (82%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/event/NewClusterEvent.java (50%) rename src/main/java/fr/irit/smac/{clumate => amas4dc}/event/RemoveClusterEvent.java (51%) delete mode 100644 src/main/java/fr/irit/smac/clumate/CluMATE.java delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java rename src/test/groovy/fr/irit/smac/{clumate => amas4dc}/amas/ClusterAgentTest.groovy (69%) diff --git a/.idea/.name b/.idea/.name index 64fea47..f1d9be9 100644 --- a/.idea/.name +++ b/.idea/.name @@ -1 +1 @@ -CluMATE \ No newline at end of file +AMAS4DC \ No newline at end of file diff --git a/README.md b/README.md index 2b02052..9c97207 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,35 @@ -# LxPlot +# AMAS4DC A library for data clustering using multi-agent system ## Set up -* Download CluMATE source +* Download AMAS4DC source -* Rename the extracted folder "clumate" +* Rename the extracted folder "amas4dc" -* Create a new gradle project in the same directory as CluMATE +* Create a new gradle project in the same directory as AMAS4DC * In this new project, open build.gradle -* Add CluMATE to the dependencies +* Add AMAS4DC to the dependencies ``` dependencies { // Add the two following lines - // CluMATE - implementation project(':clumate') + // AMAS4DC + implementation project(':amas4dc') ... } ``` * Open settings.gradle -* Add link to local CluMATE folder -include ':clumate' -project(':clumate').projectDir = new File(settingsDir, '../clumate') +* Add link to local AMAS4DC folder +``` +include ':amas4dc' +project(':amas4dc').projectDir = new File(settingsDir, '../amas4dc') +``` * Click on the Gradle Refresh button @@ -35,8 +37,8 @@ project(':clumate').projectDir = new File(settingsDir, '../clumate') ## Usage example ```java -var clumate = new CluMATE<CustomDataPoint>(new MASSettings(new CustomDataPointSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), new CustomDataPointFuser())) +var amas4dc = new AMAS4DC<CustomDataPoint>(new MASSettings(new CustomDataPointSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), new CustomDataPointFuser())) -clumate.fit([new CustomDataPoint(1), new CustomDataPoint(2)]) -var results = clumate.retrieveClusters() +amas4dc.fit([new CustomDataPoint(1), new CustomDataPoint(2)]) +var results = amas4dc.retrieveClusters() ``` \ No newline at end of file diff --git a/build.gradle b/build.gradle index 78213ff..d3f92fa 100644 --- a/build.gradle +++ b/build.gradle @@ -13,8 +13,7 @@ repositories { dependencies { // AMAK (Only one of the next two lines should be uncommented. Also, settings.gradle file should also be modified) - implementation 'com.github.alexandreprl:amak:3.1.0' -// Uncomment this line to get AMAK from git repository (The last part matches a tag, a commit hash or the last commit of a branch : branchName-SNAPSHOT + implementation 'com.github.alexandreprl:amak:3.1.0' // Uncomment this line to get AMAK from git repository (The last part matches a tag, a commit hash or the last commit of a branch : branchName-SNAPSHOT // implementation project(':amak') // Uncomment this line to get AMAK from local diff --git a/settings.gradle b/settings.gradle index 751f796..6252cdb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -rootProject.name = 'CluMATE' +rootProject.name = 'AMAS4DC' // Uncomment the two next lines when building amak locally //include ':amak' diff --git a/src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java b/src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java new file mode 100644 index 0000000..cdbab09 --- /dev/null +++ b/src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java @@ -0,0 +1,26 @@ +package fr.irit.smac.amas4dc; + +import fr.irit.smac.amas4dc.amas.MASSettings; +import fr.irit.smac.amas4dc.amas.controller.AMAS4DCCommandAndQueryHandler; +import fr.irit.smac.amas4dc.amas.controller.command.NewDataPointCommand; +import fr.irit.smac.amas4dc.amas.controller.command.SolveCommand; +import fr.irit.smac.amas4dc.amas.controller.query.Result; +import fr.irit.smac.amas4dc.amas.controller.query.RetrieveClustersResultQuery; +import fr.irit.smac.amas4dc.cluster.DataPoint; + +import java.util.List; + +public class AMAS4DC<T extends DataPoint> { + private final AMAS4DCCommandAndQueryHandler<T> controller; + + public AMAS4DC(MASSettings<T> masSettings) { + this.controller = new AMAS4DCCommandAndQueryHandler<T>(masSettings); + } + public void fit(List<T> data) { + controller.handle(new NewDataPointCommand<T>(data)); + controller.handle(new SolveCommand()); + } + public Result<T> retrieveClusters() { + return controller.handle(new RetrieveClustersResultQuery()); + } +} diff --git a/src/main/java/fr/irit/smac/clumate/amas/AMASOption.java b/src/main/java/fr/irit/smac/amas4dc/amas/AMASOption.java similarity index 50% rename from src/main/java/fr/irit/smac/clumate/amas/AMASOption.java rename to src/main/java/fr/irit/smac/amas4dc/amas/AMASOption.java index 8d83d0a..5e44aa4 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/AMASOption.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/AMASOption.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.amas; +package fr.irit.smac.amas4dc.amas; public enum AMASOption { Forget diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java b/src/main/java/fr/irit/smac/amas4dc/amas/ClusterAgent.java similarity index 94% rename from src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java rename to src/main/java/fr/irit/smac/amas4dc/amas/ClusterAgent.java index 7255ce5..017ec17 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/ClusterAgent.java @@ -1,13 +1,12 @@ -package fr.irit.smac.clumate.amas; +package fr.irit.smac.amas4dc.amas; import fr.irit.smac.amak.Agent; -import fr.irit.smac.amak.event.EventStore; -import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage; -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.event.NewClusterEvent; -import fr.irit.smac.clumate.event.RemoveClusterEvent; +import fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage; +import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityMessage; +import fr.irit.smac.amas4dc.cluster.Cluster; +import fr.irit.smac.amas4dc.cluster.DataPoint; +import fr.irit.smac.amas4dc.event.NewClusterEvent; +import fr.irit.smac.amas4dc.event.RemoveClusterEvent; import lombok.Getter; import java.text.MessageFormat; @@ -15,7 +14,7 @@ import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; -public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, ClusterEnvironment<T>> { +public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAMAS<T>, DynamicClusteringEnvironment<T>> { private static final float FLOAT_COMPARISON_EPSILON = 0.000001f; @Getter private Cluster<T> cluster; @@ -43,7 +42,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu private static final Logger logger = Logger.getLogger(ClusterAgent.class.getName()); private int amountOfCyclesWithTheSameState; - protected ClusterAgent(ClusterAMAS amas, T dataPoint) { + protected ClusterAgent(DynamicClusteringAMAS amas, T dataPoint) { super(amas); this.setCluster(new Cluster<T>(dataPoint)); } diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterAMAS.java b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java similarity index 77% rename from src/main/java/fr/irit/smac/clumate/amas/ClusterAMAS.java rename to src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java index e127ef6..1ec5d63 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/ClusterAMAS.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java @@ -1,9 +1,7 @@ -package fr.irit.smac.clumate.amas; +package fr.irit.smac.amas4dc.amas; import fr.irit.smac.amak.Amas; -import fr.irit.smac.amak.event.EventStore; -import fr.irit.smac.clumate.cluster.Cluster; -import fr.irit.smac.clumate.cluster.DataPoint; +import fr.irit.smac.amas4dc.cluster.DataPoint; import lombok.Getter; import lombok.Setter; @@ -11,14 +9,14 @@ import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; -public class ClusterAMAS<T extends DataPoint> extends Amas<ClusterEnvironment<T>> { - private static final Logger logger = Logger.getLogger(ClusterAMAS.class.getName()); +public class DynamicClusteringAMAS<T extends DataPoint> extends Amas<DynamicClusteringEnvironment<T>> { + private static final Logger logger = Logger.getLogger(DynamicClusteringAMAS.class.getName()); @Setter private Consumer<Integer> onCycleEnd; @Getter private final MASSettings<T> masSettings; - public ClusterAMAS(ClusterEnvironment<T> environment, MASSettings<T> masSettings) { + public DynamicClusteringAMAS(DynamicClusteringEnvironment<T> environment, MASSettings<T> masSettings) { super(environment, 1, ExecutionPolicy.TWO_PHASES); this.masSettings = masSettings; } diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringEnvironment.java similarity index 83% rename from src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java rename to src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringEnvironment.java index 64246ba..e51bcea 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringEnvironment.java @@ -1,7 +1,7 @@ -package fr.irit.smac.clumate.amas; +package fr.irit.smac.amas4dc.amas; import fr.irit.smac.amak.Environment; -import fr.irit.smac.clumate.cluster.DataPoint; +import fr.irit.smac.amas4dc.cluster.DataPoint; import lombok.Getter; import java.util.*; @@ -9,10 +9,10 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.logging.Logger; -public class ClusterEnvironment<T extends DataPoint> extends Environment { +public class DynamicClusteringEnvironment<T extends DataPoint> extends Environment { private final Queue<T> pendingAdditionDataPoints = new ConcurrentLinkedQueue<>(); - private static final Logger logger = Logger.getLogger(ClusterEnvironment.class.getName()); + private static final Logger logger = Logger.getLogger(DynamicClusteringEnvironment.class.getName()); @Getter private T lastPolledPendingDataPoint = null; private final Map<Integer, List<ClusterAgent<T>>> buckets = new ConcurrentHashMap<>(); diff --git a/src/main/java/fr/irit/smac/clumate/amas/MASSettings.java b/src/main/java/fr/irit/smac/amas4dc/amas/MASSettings.java similarity index 69% rename from src/main/java/fr/irit/smac/clumate/amas/MASSettings.java rename to src/main/java/fr/irit/smac/amas4dc/amas/MASSettings.java index 9adf535..f4a04b8 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/MASSettings.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/MASSettings.java @@ -1,10 +1,10 @@ -package fr.irit.smac.clumate.amas; +package fr.irit.smac.amas4dc.amas; import fr.irit.smac.amak.event.EventStore; -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 fr.irit.smac.amas4dc.cluster.Cluster; +import fr.irit.smac.amas4dc.cluster.DataPoint; +import fr.irit.smac.amas4dc.cluster.DataPointFuser; +import fr.irit.smac.amas4dc.cluster.SimilarityScoreMethod; import java.util.EnumSet; diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java new file mode 100644 index 0000000..c5a94a8 --- /dev/null +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java @@ -0,0 +1,51 @@ +package fr.irit.smac.amas4dc.amas.controller; + +import fr.irit.smac.amak.scheduling.Scheduler; +import fr.irit.smac.amas4dc.amas.controller.command.NewDataPointCommand; +import fr.irit.smac.amas4dc.amas.controller.command.ShutdownCommand; +import fr.irit.smac.amas4dc.amas.controller.command.SolveCommand; +import fr.irit.smac.amas4dc.amas.controller.query.Result; +import fr.irit.smac.amas4dc.amas.controller.query.RetrieveClustersResultQuery; +import fr.irit.smac.amas4dc.amas.DynamicClusteringAMAS; +import fr.irit.smac.amas4dc.amas.ClusterAgent; +import fr.irit.smac.amas4dc.amas.DynamicClusteringEnvironment; +import fr.irit.smac.amas4dc.amas.MASSettings; +import fr.irit.smac.amas4dc.cluster.DataPoint; +import lombok.Getter; + +import java.util.concurrent.Executors; + +public class AMAS4DCCommandAndQueryHandler<T extends DataPoint> { + @Getter + private final DynamicClusteringEnvironment<T> environment; + @Getter + private final MASSettings<T> masSettings; + @Getter + private final DynamicClusteringAMAS<T> amas; + @Getter + private final Scheduler scheduler; + + public AMAS4DCCommandAndQueryHandler(MASSettings<T> masSettings) { + this.masSettings = masSettings; + environment = new DynamicClusteringEnvironment<T>(); + amas = new DynamicClusteringAMAS<T>(environment, masSettings); + scheduler = new Scheduler(Executors.newSingleThreadExecutor(), amas, environment); + } + + public void handle(NewDataPointCommand<T> newDataPointCommand) { + environment.addDataPoints(newDataPointCommand.newDataPoints()); + } + + public void handle(SolveCommand solveCommand) { + scheduler.startWithSleepSync(0); + } + + public void handle(ShutdownCommand shutdownCommand) { + scheduler.stop(); + } + + public Result<T> handle(RetrieveClustersResultQuery retrieveClustersResultQuery) { + var clusters = amas.getAgents(ClusterAgent.class).stream().map(agent -> ((ClusterAgent<T>) agent).getCluster()).toList(); + return new Result<T>(clusters, masSettings); + } +} diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java new file mode 100644 index 0000000..0a1afa2 --- /dev/null +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java @@ -0,0 +1,4 @@ +package fr.irit.smac.amas4dc.amas.controller.command; + +public interface Command { +} diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/NewDataPointCommand.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/NewDataPointCommand.java similarity index 55% rename from src/main/java/fr/irit/smac/clumate/amas/controller/command/NewDataPointCommand.java rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/command/NewDataPointCommand.java index 1ec497c..70c99e2 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/NewDataPointCommand.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/NewDataPointCommand.java @@ -1,6 +1,6 @@ -package fr.irit.smac.clumate.amas.controller.command; +package fr.irit.smac.amas4dc.amas.controller.command; -import fr.irit.smac.clumate.cluster.DataPoint; +import fr.irit.smac.amas4dc.cluster.DataPoint; import java.util.List; diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/ShutdownCommand.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/ShutdownCommand.java similarity index 50% rename from src/main/java/fr/irit/smac/clumate/amas/controller/command/ShutdownCommand.java rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/command/ShutdownCommand.java index 2345a49..564f115 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/ShutdownCommand.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/ShutdownCommand.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.amas.controller.command; +package fr.irit.smac.amas4dc.amas.controller.command; public record ShutdownCommand() implements Command { } diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java new file mode 100644 index 0000000..512d2cd --- /dev/null +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java @@ -0,0 +1,4 @@ +package fr.irit.smac.amas4dc.amas.controller.command; + +public record SolveCommand() implements Command { +} diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java new file mode 100644 index 0000000..0c3a75a --- /dev/null +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java @@ -0,0 +1,4 @@ +package fr.irit.smac.amas4dc.amas.controller.query; + +public interface Query { +} diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Result.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Result.java similarity index 75% rename from src/main/java/fr/irit/smac/clumate/amas/controller/query/Result.java rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Result.java index aa5fba7..500d99e 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Result.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Result.java @@ -1,8 +1,8 @@ -package fr.irit.smac.clumate.amas.controller.query; +package fr.irit.smac.amas4dc.amas.controller.query; -import fr.irit.smac.clumate.amas.MASSettings; -import fr.irit.smac.clumate.cluster.Cluster; -import fr.irit.smac.clumate.cluster.DataPoint; +import fr.irit.smac.amas4dc.amas.MASSettings; +import fr.irit.smac.amas4dc.cluster.Cluster; +import fr.irit.smac.amas4dc.cluster.DataPoint; import java.util.List; diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/query/RetrieveClustersResultQuery.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/RetrieveClustersResultQuery.java similarity index 55% rename from src/main/java/fr/irit/smac/clumate/amas/controller/query/RetrieveClustersResultQuery.java rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/query/RetrieveClustersResultQuery.java index efe797e..72ed58c 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/query/RetrieveClustersResultQuery.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/RetrieveClustersResultQuery.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.amas.controller.query; +package fr.irit.smac.amas4dc.amas.controller.query; public record RetrieveClustersResultQuery() implements Query { } diff --git a/src/main/java/fr/irit/smac/clumate/amas/messages/EvaluatedScoreMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/EvaluatedScoreMessage.java similarity index 89% rename from src/main/java/fr/irit/smac/clumate/amas/messages/EvaluatedScoreMessage.java rename to src/main/java/fr/irit/smac/amas4dc/amas/messages/EvaluatedScoreMessage.java index 67a311e..f2a381b 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/messages/EvaluatedScoreMessage.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/EvaluatedScoreMessage.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.amas.messages; +package fr.irit.smac.amas4dc.amas.messages; import fr.irit.smac.amak.Agent; import fr.irit.smac.amak.messaging.Message; diff --git a/src/main/java/fr/irit/smac/clumate/amas/messages/RequestSimilarityMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityMessage.java similarity index 77% rename from src/main/java/fr/irit/smac/clumate/amas/messages/RequestSimilarityMessage.java rename to src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityMessage.java index 4cae77f..f2846dd 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/messages/RequestSimilarityMessage.java +++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityMessage.java @@ -1,6 +1,6 @@ -package fr.irit.smac.clumate.amas.messages; +package fr.irit.smac.amas4dc.amas.messages; -import fr.irit.smac.clumate.cluster.Cluster; +import fr.irit.smac.amas4dc.cluster.Cluster; import fr.irit.smac.amak.Agent; import fr.irit.smac.amak.messaging.Message; import lombok.Getter; diff --git a/src/main/java/fr/irit/smac/clumate/cluster/Cluster.java b/src/main/java/fr/irit/smac/amas4dc/cluster/Cluster.java similarity index 92% rename from src/main/java/fr/irit/smac/clumate/cluster/Cluster.java rename to src/main/java/fr/irit/smac/amas4dc/cluster/Cluster.java index bf5eb79..a17bbc9 100644 --- a/src/main/java/fr/irit/smac/clumate/cluster/Cluster.java +++ b/src/main/java/fr/irit/smac/amas4dc/cluster/Cluster.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.cluster; +package fr.irit.smac.amas4dc.cluster; import lombok.Getter; import lombok.ToString; diff --git a/src/main/java/fr/irit/smac/clumate/cluster/DataPoint.java b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPoint.java similarity index 66% rename from src/main/java/fr/irit/smac/clumate/cluster/DataPoint.java rename to src/main/java/fr/irit/smac/amas4dc/cluster/DataPoint.java index 923b8b1..ac62dcb 100644 --- a/src/main/java/fr/irit/smac/clumate/cluster/DataPoint.java +++ b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPoint.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.cluster; +package fr.irit.smac.amas4dc.cluster; public interface DataPoint { default int getBucketId() { diff --git a/src/main/java/fr/irit/smac/clumate/cluster/DataPointFuser.java b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPointFuser.java similarity index 76% rename from src/main/java/fr/irit/smac/clumate/cluster/DataPointFuser.java rename to src/main/java/fr/irit/smac/amas4dc/cluster/DataPointFuser.java index 2a64227..9d833f0 100644 --- a/src/main/java/fr/irit/smac/clumate/cluster/DataPointFuser.java +++ b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPointFuser.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.cluster; +package fr.irit.smac.amas4dc.cluster; import java.util.function.BiFunction; diff --git a/src/main/java/fr/irit/smac/clumate/cluster/SimilarityScoreMethod.java b/src/main/java/fr/irit/smac/amas4dc/cluster/SimilarityScoreMethod.java similarity index 82% rename from src/main/java/fr/irit/smac/clumate/cluster/SimilarityScoreMethod.java rename to src/main/java/fr/irit/smac/amas4dc/cluster/SimilarityScoreMethod.java index 59a6410..a6e40d9 100644 --- a/src/main/java/fr/irit/smac/clumate/cluster/SimilarityScoreMethod.java +++ b/src/main/java/fr/irit/smac/amas4dc/cluster/SimilarityScoreMethod.java @@ -1,4 +1,4 @@ -package fr.irit.smac.clumate.cluster; +package fr.irit.smac.amas4dc.cluster; public interface SimilarityScoreMethod<T extends DataPoint> { diff --git a/src/main/java/fr/irit/smac/clumate/event/NewClusterEvent.java b/src/main/java/fr/irit/smac/amas4dc/event/NewClusterEvent.java similarity index 50% rename from src/main/java/fr/irit/smac/clumate/event/NewClusterEvent.java rename to src/main/java/fr/irit/smac/amas4dc/event/NewClusterEvent.java index 2ef7580..8c71881 100644 --- a/src/main/java/fr/irit/smac/clumate/event/NewClusterEvent.java +++ b/src/main/java/fr/irit/smac/amas4dc/event/NewClusterEvent.java @@ -1,8 +1,8 @@ -package fr.irit.smac.clumate.event; +package fr.irit.smac.amas4dc.event; import fr.irit.smac.amak.event.Event; -import fr.irit.smac.clumate.cluster.Cluster; -import fr.irit.smac.clumate.cluster.DataPoint; +import fr.irit.smac.amas4dc.cluster.Cluster; +import fr.irit.smac.amas4dc.cluster.DataPoint; public record NewClusterEvent<T extends DataPoint>(Cluster<T> cluster) implements Event { } diff --git a/src/main/java/fr/irit/smac/clumate/event/RemoveClusterEvent.java b/src/main/java/fr/irit/smac/amas4dc/event/RemoveClusterEvent.java similarity index 51% rename from src/main/java/fr/irit/smac/clumate/event/RemoveClusterEvent.java rename to src/main/java/fr/irit/smac/amas4dc/event/RemoveClusterEvent.java index 6137a81..be840a5 100644 --- a/src/main/java/fr/irit/smac/clumate/event/RemoveClusterEvent.java +++ b/src/main/java/fr/irit/smac/amas4dc/event/RemoveClusterEvent.java @@ -1,8 +1,8 @@ -package fr.irit.smac.clumate.event; +package fr.irit.smac.amas4dc.event; import fr.irit.smac.amak.event.Event; -import fr.irit.smac.clumate.cluster.Cluster; -import fr.irit.smac.clumate.cluster.DataPoint; +import fr.irit.smac.amas4dc.cluster.Cluster; +import fr.irit.smac.amas4dc.cluster.DataPoint; public record RemoveClusterEvent<T extends DataPoint>(Cluster<T> cluster) implements Event { } diff --git a/src/main/java/fr/irit/smac/clumate/CluMATE.java b/src/main/java/fr/irit/smac/clumate/CluMATE.java deleted file mode 100644 index 8dfbabf..0000000 --- a/src/main/java/fr/irit/smac/clumate/CluMATE.java +++ /dev/null @@ -1,28 +0,0 @@ -package fr.irit.smac.clumate; - -import fr.irit.smac.amak.event.EventStore; -import fr.irit.smac.clumate.amas.MASSettings; -import fr.irit.smac.clumate.amas.controller.CluMATEController; -import fr.irit.smac.clumate.amas.controller.command.NewDataPointCommand; -import fr.irit.smac.clumate.amas.controller.command.SolveCommand; -import fr.irit.smac.clumate.amas.controller.query.Result; -import fr.irit.smac.clumate.amas.controller.query.RetrieveClustersResultQuery; -import fr.irit.smac.clumate.cluster.Cluster; -import fr.irit.smac.clumate.cluster.DataPoint; - -import java.util.List; - -public class CluMATE<T extends DataPoint> { - private final CluMATEController<T> controller; - - public CluMATE(MASSettings<T> masSettings) { - this.controller = new CluMATEController<T>(masSettings); - } - public void fit(List<T> data) { - controller.handle(new NewDataPointCommand<T>(data)); - controller.handle(new SolveCommand()); - } - public Result<T> retrieveClusters() { - return controller.handle(new RetrieveClustersResultQuery()); - } -} diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java b/src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java deleted file mode 100644 index 7f14015..0000000 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java +++ /dev/null @@ -1,53 +0,0 @@ -package fr.irit.smac.clumate.amas.controller; - -import fr.irit.smac.amak.event.EventStore; -import fr.irit.smac.amak.scheduling.Scheduler; -import fr.irit.smac.clumate.amas.controller.command.NewDataPointCommand; -import fr.irit.smac.clumate.amas.controller.command.ShutdownCommand; -import fr.irit.smac.clumate.amas.controller.command.SolveCommand; -import fr.irit.smac.clumate.amas.controller.query.Result; -import fr.irit.smac.clumate.amas.controller.query.RetrieveClustersResultQuery; -import fr.irit.smac.clumate.amas.ClusterAMAS; -import fr.irit.smac.clumate.amas.ClusterAgent; -import fr.irit.smac.clumate.amas.ClusterEnvironment; -import fr.irit.smac.clumate.amas.MASSettings; -import fr.irit.smac.clumate.cluster.Cluster; -import fr.irit.smac.clumate.cluster.DataPoint; -import lombok.Getter; - -import java.util.concurrent.Executors; - -public class CluMATEController<T extends DataPoint> { - @Getter - private final ClusterEnvironment<T> environment; - @Getter - private final MASSettings<T> masSettings; - @Getter - private final ClusterAMAS<T> amas; - @Getter - private final Scheduler scheduler; - - public CluMATEController(MASSettings<T> masSettings) { - this.masSettings = masSettings; - environment = new ClusterEnvironment<T>(); - amas = new ClusterAMAS<T>(environment, masSettings); - scheduler = new Scheduler(Executors.newSingleThreadExecutor(), amas, environment); - } - - public void handle(NewDataPointCommand<T> newDataPointCommand) { - environment.addDataPoints(newDataPointCommand.newDataPoints()); - } - - public void handle(SolveCommand solveCommand) { - scheduler.startWithSleepSync(0); - } - - public void handle(ShutdownCommand shutdownCommand) { - scheduler.stop(); - } - - public Result<T> handle(RetrieveClustersResultQuery retrieveClustersResultQuery) { - var clusters = amas.getAgents(ClusterAgent.class).stream().map(agent -> ((ClusterAgent<T>) agent).getCluster()).toList(); - return new Result<T>(clusters, masSettings); - } -} diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java b/src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java deleted file mode 100644 index ed8e0ad..0000000 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.irit.smac.clumate.amas.controller.command; - -public interface Command { -} diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java b/src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java deleted file mode 100644 index 7af6bdf..0000000 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.irit.smac.clumate.amas.controller.command; - -public record SolveCommand() implements Command { -} diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java b/src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java deleted file mode 100644 index c6ae431..0000000 --- a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.irit.smac.clumate.amas.controller.query; - -public interface Query { -} diff --git a/src/test/groovy/SimpleClusteringIT.groovy b/src/test/groovy/SimpleClusteringIT.groovy index a27cd58..ced6dec 100644 --- a/src/test/groovy/SimpleClusteringIT.groovy +++ b/src/test/groovy/SimpleClusteringIT.groovy @@ -1,22 +1,20 @@ -import fr.irit.smac.amak.event.EventStore -import fr.irit.smac.clumate.CluMATE -import fr.irit.smac.clumate.amas.AMASOption -import fr.irit.smac.clumate.amas.MASSettings -import fr.irit.smac.clumate.cluster.Cluster -import fr.irit.smac.clumate.cluster.DataPoint -import fr.irit.smac.clumate.cluster.SimilarityScoreMethod +import fr.irit.smac.amas4dc.AMAS4DC +import fr.irit.smac.amas4dc.amas.AMASOption +import fr.irit.smac.amas4dc.amas.MASSettings +import fr.irit.smac.amas4dc.cluster.DataPoint +import fr.irit.smac.amas4dc.cluster.SimilarityScoreMethod import spock.lang.Specification class SimpleClusteringIT extends Specification { def "Clustering of two similar 1D objects"() { given: - def clumate = new CluMATE<OneDDataPoint>(new MASSettings(new OneDSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), (OneDDataPoint dp1, OneDDataPoint dp2) -> { + def amas4dc = new AMAS4DC<OneDDataPoint>(new MASSettings(new OneDSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), (OneDDataPoint dp1, OneDDataPoint dp2) -> { return new OneDDataPoint(dp1.value + (dp2.value - dp1.value) * 0.1f) })) when: - clumate.fit([new OneDDataPoint(1), new OneDDataPoint(2)]) - var results = clumate.retrieveClusters() + amas4dc.fit([new OneDDataPoint(1), new OneDDataPoint(2)]) + var results = amas4dc.retrieveClusters() then: results.clusters().size() == 1 diff --git a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy b/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy similarity index 69% rename from src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy rename to src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy index 699e79b..c858fd5 100644 --- a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy +++ b/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy @@ -1,14 +1,13 @@ -package fr.irit.smac.clumate.amas +package fr.irit.smac.amas4dc.amas + -import fr.irit.smac.amak.event.EventStore import fr.irit.smac.amak.messaging.Mailbox -import fr.irit.smac.amak.messaging.Message -import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage -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 fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage +import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityMessage +import fr.irit.smac.amas4dc.cluster.Cluster +import fr.irit.smac.amas4dc.cluster.DataPoint +import fr.irit.smac.amas4dc.cluster.DataPointFuser +import fr.irit.smac.amas4dc.cluster.SimilarityScoreMethod import spock.lang.Specification import spock.util.concurrent.BlockingVariable @@ -20,9 +19,9 @@ class ClusterAgentTest extends Specification { def similarityScoreMethodMock = Mock(SimilarityScoreMethod) similarityScoreMethodMock.apply(_, _) >> 0.3 - def amasMock = Mock(ClusterAMAS<DataPoint>) + def amasMock = Mock(DynamicClusteringAMAS<DataPoint>) amasMock.getMasSettings() >> new MASSettings(similarityScoreMethodMock, 0.5f, EnumSet.noneOf(AMASOption), Mock(DataPointFuser)) - amasMock.getEnvironment() >> Mock(ClusterEnvironment) + amasMock.getEnvironment() >> Mock(DynamicClusteringEnvironment) def agent = new ClusterAgent(amasMock, Mock(DataPoint)) agent.state = ClusterAgent.State.DORMANT -- GitLab