callback to render stages of the evolution
diff --git a/src/main/java/algorithms/project/algorithm/Callback.java b/src/main/java/algorithms/project/algorithm/Callback.java
new file mode 100644
index 0000000..5eb159a
--- /dev/null
+++ b/src/main/java/algorithms/project/algorithm/Callback.java
@@ -0,0 +1,14 @@
+package algorithms.project.algorithm;
+
+import java.util.List;
+import java.util.Vector;
+
+public interface Callback {
+
+ /**
+ * @return Callback interval in number of generations
+ */
+ int interval();
+
+ void callback(List<Vector<Double>> population);
+}
diff --git a/src/main/java/algorithms/project/algorithm/DE.java b/src/main/java/algorithms/project/algorithm/DE.java
index e3a70c6..454fe16 100644
--- a/src/main/java/algorithms/project/algorithm/DE.java
+++ b/src/main/java/algorithms/project/algorithm/DE.java
@@ -8,7 +8,7 @@
import static algorithms.project.util.Utility.*;
-public class DE implements GeneticAlgorithm {
+public class DE extends GeneticAlgorithm {
private final Random random = new Random();
@@ -48,9 +48,12 @@
if (bUi < bXi) {
population.set(i, Ui);
}
- if(bUi < minFitness) {
+ if (bUi < minFitness) {
minFitness = bUi;
}
+ if (callback != null && i % callback.interval() == 0) {
+ callback.callback(population);
+ }
}
}
Double bestFitness = Double.POSITIVE_INFINITY;
diff --git a/src/main/java/algorithms/project/algorithm/DEBuilder.java b/src/main/java/algorithms/project/algorithm/DEBuilder.java
index 27ca2d2..de051e1 100644
--- a/src/main/java/algorithms/project/algorithm/DEBuilder.java
+++ b/src/main/java/algorithms/project/algorithm/DEBuilder.java
@@ -32,4 +32,9 @@
de.setVarRange(min, max);
return this;
}
+
+ public DEBuilder setCallback(final Callback callback) {
+ de.setCallback(callback);
+ return this;
+ }
}
diff --git a/src/main/java/algorithms/project/algorithm/GeneticAlgorithm.java b/src/main/java/algorithms/project/algorithm/GeneticAlgorithm.java
index d608d05..bd80e39 100644
--- a/src/main/java/algorithms/project/algorithm/GeneticAlgorithm.java
+++ b/src/main/java/algorithms/project/algorithm/GeneticAlgorithm.java
@@ -4,7 +4,13 @@
import java.util.Vector;
-public interface GeneticAlgorithm {
+public abstract class GeneticAlgorithm {
- Vector<Double> run(Benchmark benchmark);
+ protected Callback callback = null;
+
+ public abstract Vector<Double> run(Benchmark benchmark);
+
+ public void setCallback(Callback callback) {
+ this.callback = callback;
+ }
}