diff --git a/.gitignore b/.gitignore
index b83d222..bef0727 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/target/
+.idea
diff --git a/README.md b/README.md
index e55053d..e21fac8 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ The following algorithms are implemented:
Main class: myra.algorithm.AntMiner
```
-The first rule induction ACO classification algorithm. Ant-Miner uses a sequentical covering strategy combined with an ACO search to create a list of rules. Ant-Miner only supports categorical attributes, continuous attributes need to be discretised in a pre-processing step.
+The first rule induction ACO classification algorithm. Ant-Miner uses a sequential covering strategy combined with an ACO search to create a list of rules. Ant-Miner only supports categorical attributes, continuous attributes need to be discretised in a pre-processing step.
##### Continuous Ant-Miner (*c*Ant-Miner)
```
@@ -66,24 +66,29 @@ A decision tree induction algorithm that uses an ACO procedure to creates decisi
Main class: myra.algorithm.AntMinerReg
```
-The first rule induction ACO regression algorithm. Ant-Miner-Reg uses a sequentical covering strategy combined with an ACO search to create a list of regression rules.
+The first rule induction ACO regression algorithm. Ant-Miner-Reg uses a sequential covering strategy combined with an ACO search to create a list of regression rules.
##### Hierarchical Multi-Label Ant-Miner (*hm*Ant-Miner)
```
Main class: myra.algorithm.HierarchicalMultiLabelAntMiner
```
-*hm*Ant-Miner is the first Ant-Miner variation for hierarchical multi-label classification problems. *hm*Ant-Miner uses a sequentical covering strategy combined with an ACO search to create a list of hierarchical classification rules that predict multiple class labels from a hierarchy.
+*hm*Ant-Miner is the first Ant-Miner variation for hierarchical multi-label classification problems. *hm*Ant-Miner uses a sequential covering strategy combined with an ACO search to create a list of hierarchical classification rules that predict multiple class labels from a hierarchy.
+
+#### *e*Ant-MinerPB+HMA
+```
+Main class: myra.algorithm.EnsemblePittsburghMixedAttributeAntMiner
+```
### Running the algorithms
-All algorihtms can be used in the command line:
+All algorithms can be used in the command line:
```
java -cp myra-.jar -f
```
-where `` is MYRA version number (e.g., `5.0`), `` is the main class name of the algorithm and `` is the path to the ARFF file to be used as training data. The minimum requirement to run an algorihtm is a training file. If no training file is specified, a list of options is printed:
+where `` is MYRA version number (e.g., `5.0`), `` is the main class name of the algorithm and `` is the path to the ARFF file to be used as training data. The minimum requirement to run an algorithm is a training file. If no training file is specified, a list of options is printed:
```
[febo@uok myra]$ java -cp myra-4.5.jar myra.algorithm.ContinuousAntMiner
@@ -129,7 +134,7 @@ The following options are available:
--parallel enable parallel execution in multiple cores; if no cores
are specified, use all available cores
```
-Usinng command-line options you can tweak the parameters of an algorithm. Note that when running the algorithm in parallel (`--parallel` option), there is no guarantee that it will have the same behaviour even if the same seed value is used (`-s` option), since the thread allocation is not controlled by the code.
+Using command-line options you can tweak the parameters of an algorithm. Note that when running the algorithm in parallel (`--parallel` option), there is no guarantee that it will have the same behaviour even if the same seed value is used (`-s` option), since the thread allocation is not controlled by the code.
### Citation Policy
@@ -288,3 +293,16 @@ If you also would like to make a reference to the MYRA repository, please includ
pages = {165–-181}
}
```
+
+#### Ensemble Ant-Miner (*e*Ant-MinerPB+HMA)
+* J. Brookhouse, A. Helal and F.E.B. Otero. An Ensemble Ant Colony Optimisation Algorithm with a Hybrid Pheromone Model for Learning Rule Lists. In: Proceedings of the Genetic and Evolutionary Computation Conference (GECCO '25), pp. 1532–1539, 2025.
+```
+ @INPROCEEDINGS{Brookhouse2025ensemble,
+ author = {J. Brookhouse and A. Helal and F.E.B. Otero},
+ title = {An Ensemble Ant Colony Optimisation Algorithm with a Hybrid Pheromone Model for Learning Rule Lists},
+ booktitle = {Proceedings of the Genetic and Evolutionary Computation Conference (GECCO '25)},
+ publisher = {Association for Computing Machinery}
+ year = {2025},
+ pages = {1532--1539}
+ }
+```
diff --git a/pom.xml b/pom.xml
index b3d52e1..4d0bf29 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,20 +36,20 @@
UTF-8
- 8
+ 25org.junit.jupiterjunit-jupiter
- 5.6.2
+ 5.9.3testorg.junit.vintagejunit-vintage-engine
- 5.6.2
+ 5.9.3test
diff --git a/src/main/java/myra/algorithm/EnsembleMixedAttributeAntMiner.java b/src/main/java/myra/algorithm/EnsembleMixedAttributeAntMiner.java
new file mode 100644
index 0000000..ddea7c6
--- /dev/null
+++ b/src/main/java/myra/algorithm/EnsembleMixedAttributeAntMiner.java
@@ -0,0 +1,147 @@
+/*
+ * EnsembleMixedAttributeAntMiner.java
+ * (this file is part of MYRA)
+ *
+ * Copyright 2008-2025
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package myra.algorithm;
+
+import static myra.Config.CONFIG;
+import static myra.Scheduler.COLONY_SIZE;
+import static myra.ensemble.bagging.EnsembleModel.DEFAULT_COLONIES;
+import static myra.ensemble.bagging.FeatureBagging.DEFAULT_FEATURE_BAGGING;
+import static myra.ensemble.bagging.InstanceBootstrapping.DEFAULT_INSTANCE_BOOTSTRAPPING;
+import static myra.rule.Heuristic.DEFAULT_HEURISTIC;
+import static myra.rule.Heuristic.DYNAMIC_HEURISTIC;
+import static myra.rule.irl.RuleFactory.DEFAULT_FACTORY;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import myra.Option;
+
+import myra.Config.ConfigKey;
+import myra.Option.DoubleOption;
+import myra.Option.IntegerOption;
+
+import myra.classification.ClassificationModel;
+import myra.datamining.Dataset;
+import myra.ensemble.bagging.BaggingArchiveRuleFactory;
+import myra.ensemble.bagging.EnsembleModel;
+import myra.ensemble.bagging.FeatureBagging;
+import myra.ensemble.bagging.InstanceBootstrapping;
+
+import myra.rule.archive.Graph;
+import myra.rule.irl.SequentialCovering;
+
+/**
+ * Executable class file for the eAnt-MinerHMA
+ * algorithm.
+ *
+ * @author Ayah Helal
+ * @author James Brookhouse
+ */
+public class EnsembleMixedAttributeAntMiner extends MixedAttributeAntMiner {
+
+ public static final ConfigKey DEFAULT_VALIDATION = new ConfigKey<>();
+
+ @Override
+ protected void defaults() {
+ super.defaults();
+
+ // configuration not set via command line
+ CONFIG.set(DEFAULT_FACTORY, new BaggingArchiveRuleFactory());
+
+ // default configuration values
+ CONFIG.set(DEFAULT_FEATURE_BAGGING, 0.4);
+ CONFIG.set(DEFAULT_INSTANCE_BOOTSTRAPPING, 0.4);
+ CONFIG.set(DEFAULT_VALIDATION, 0.2);
+ CONFIG.set(DEFAULT_COLONIES, 10);
+ CONFIG.set(COLONY_SIZE, 10);
+ }
+
+ @Override
+ protected Collection