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;
+    }
 }