diff --git a/src/decentralizepy/graphs/Regular.py b/src/decentralizepy/graphs/Regular.py
new file mode 100644
index 0000000000000000000000000000000000000000..6aedddd63888b16a6edf057a1c381ae41397ea72
--- /dev/null
+++ b/src/decentralizepy/graphs/Regular.py
@@ -0,0 +1,32 @@
+import networkx as nx
+
+from decentralizepy.graphs.Graph import Graph
+
+
+class Regular(Graph):
+    """
+    The class for generating a Regular topology
+
+    """
+
+    def __init__(self, n_procs, degree, seed=None):
+        """
+        Constructor. Generates a Ring graph
+
+        Parameters
+        ----------
+        n_procs : int
+            total number of nodes in the graph
+        degree : int
+            Neighbors of each node
+
+        """
+        super().__init__(n_procs)
+        G = nx.random_regular_graph(degree, n_procs, seed)
+        adj = G.adjacency()
+        for i, l in adj:
+            self.adj_list[i] = set()  # new set
+            for k in l:
+                self.adj_list[i].add(k)
+        if not nx.is_connected(G):
+            self.connect_graph()
diff --git a/src/decentralizepy/sharing/RandomAlpha.py b/src/decentralizepy/sharing/RandomAlpha.py
new file mode 100644
index 0000000000000000000000000000000000000000..c81e23345118af00ef01d9adca034a59ea264892
--- /dev/null
+++ b/src/decentralizepy/sharing/RandomAlpha.py
@@ -0,0 +1,79 @@
+import random
+
+from decentralizepy.sharing.PartialModel import PartialModel
+
+
+class RandomAlpha(PartialModel):
+    """
+    This class implements the partial model sharing with a random alpha each iteration.
+
+    """
+
+    def __init__(
+        self,
+        rank,
+        machine_id,
+        communication,
+        mapping,
+        graph,
+        model,
+        dataset,
+        log_dir,
+        dict_ordered=True,
+        save_shared=False,
+        metadata_cap=1.0,
+    ):
+        """
+        Constructor
+
+        Parameters
+        ----------
+        rank : int
+            Local rank
+        machine_id : int
+            Global machine id
+        communication : decentralizepy.communication.Communication
+            Communication module used to send and receive messages
+        mapping : decentralizepy.mappings.Mapping
+            Mapping (rank, machine_id) -> uid
+        graph : decentralizepy.graphs.Graph
+            Graph reprensenting neighbors
+        model : decentralizepy.models.Model
+            Model to train
+        dataset : decentralizepy.datasets.Dataset
+            Dataset for sharing data. Not implemented yet! TODO
+        log_dir : str
+            Location to write shared_params (only writing for 2 procs per machine)
+        dict_ordered : bool
+            Specifies if the python dict maintains the order of insertion
+        save_shared : bool
+            Specifies if the indices of shared parameters should be logged
+        metadata_cap : float
+            Share full model when self.alpha > metadata_cap
+
+        """
+        super().__init__(
+            rank,
+            machine_id,
+            communication,
+            mapping,
+            graph,
+            model,
+            dataset,
+            log_dir,
+            1.0,
+            dict_ordered,
+            save_shared,
+            metadata_cap,
+        )
+
+    def step(self):
+        """
+        Perform a sharing step. Implements D-PSGD with alpha randomly chosen.
+
+        """
+        random.seed(
+            self.mapping.get_uid(self.rank, self.machine_id) + self.communication_round
+        )
+        self.alpha = random.randint(1, 7) / 10.0
+        super().step()