diff --git a/ndp/main.py b/ndp/main.py index fffdb9aafc650687467bf5c1357d2c5ad0fa9987..4084582905e65d05963dbbf72a71818efa51519f 100644 --- a/ndp/main.py +++ b/ndp/main.py @@ -1,7 +1,6 @@ import matplotlib.pyplot as plt import numpy as np - class Protocol: def __init__(self, name, c, n): self.name = name @@ -19,11 +18,11 @@ class Protocol: slots = np.zeros(total_slots) for g in guardians: - slots[g] = 1 # Guardian slots + slots[g % total_slots] = 1 # Guardian slots for p in patrols: - if slots[p] == 0: # Only mark patrol if not already a guardian - slots[p] = 2 # Patrol slots + if slots[p % total_slots] == 0: # Only mark patrol if not already a guardian + slots[p % total_slots] = 2 # Patrol slots slots = slots.reshape(self.n, self.c) @@ -35,15 +34,19 @@ class Protocol: class QuorumProtocol(Protocol): def schedule(self): - guardians = [i * self.c for i in range(self.n)] + guardians = [i % self.c for i in range(self.n)] patrols = [i for i in range(self.c) if i not in guardians] return {"Guardians": guardians, "Patrols": patrols} class DiscoProtocol(Protocol): def schedule(self): + # Generate guardians based on the formula i * c guardians = [i * self.c for i in range(self.n)] + + # Generate patrols based on the formula j * n, excluding guardians patrols = [j * self.n for j in range(self.c) if j * self.n not in guardians] + return {"Guardians": guardians, "Patrols": patrols} @@ -57,20 +60,24 @@ class UConnectProtocol(Protocol): class SearchlightProtocol(Protocol): def schedule(self): guardians = [i * self.c for i in range(self.n)] - patrols = [(j * self.c + (j % (self.c // 2))) for j in range(self.n) if + patrols = [(j * self.c + (j % (self.c // 2))) for j in range(self.n * 2) if (j * self.c + (j % (self.c // 2))) not in guardians] - return {"Guardians": guardians, "Patrols": patrols} + return {"Guardians": guardians, "Patrols": patrols[:self.n]} + +# Get user input for c and n +c = int(input("Enter the number of slots per cycle (c): ")) +n = int(input("Enter the number of cycles (n): ")) # Plot all protocols fig, axes = plt.subplots(4, 1, figsize=(12, 20), sharex=True) fig.subplots_adjust(hspace=0.4) protocols = [ - QuorumProtocol("Quorum Protocol", 9, 3), - DiscoProtocol("Disco Protocol", 7, 5), - UConnectProtocol("U-Connect Protocol", 7, 7), - SearchlightProtocol("Searchlight Protocol", 7, 3) + QuorumProtocol("Quorum Protocol", c, n), + DiscoProtocol("Disco Protocol", c, n), + UConnectProtocol("U-Connect Protocol", c, n), + SearchlightProtocol("Searchlight Protocol", c, n) ] for i, protocol in enumerate(protocols):