diff --git a/plot/main.py b/plot/main.py index a63b194..0c0c740 100644 --- a/plot/main.py +++ b/plot/main.py @@ -7,33 +7,62 @@ nb_files = os.listdir(".." + os.sep + "export") size = len(nb_files) -# main array -averages = np.empty((size, 2)) -nb = 0 -for i in nb_files: - data = pd.read_csv(".." + os.sep + "export" + os.sep + i, delimiter=';').to_numpy() - rb = data[:, 4] - total = 0.0 - for x in rb: - total = total + x - average = total / len(rb) - nb_users = i.split(".")[0] - averages[nb, 0] = int(nb_users) - averages[nb, 1] = average - nb += 1 +def mean_mkn() -> np.ndarray: + averages_mkn = np.empty((size, 2)) + nb = 0 + for i in nb_files: + data = pd.read_csv(".." + os.sep + "export" + os.sep + i, delimiter=';').to_numpy() + rb = data[:, 4] + total = 0.0 + for x in rb: + total = total + x + average = total / len(rb) + nb_users = i.split(".")[0] + averages_mkn[nb, 0] = int(nb_users) + averages_mkn[nb, 1] = average + nb += 1 + return averages_mkn + + +def rb_available() -> np.ndarray: + available = np.zeros((size, 2)) + nb = 0 + for i in nb_files: + data = pd.read_csv(".." + os.sep + "export" + os.sep + i, delimiter=';').to_numpy() + nb_users = i.split(".")[0] + available[nb, 0] = int(nb_users) + available[nb, 1] = data.shape[0] / (200 * 10000) + nb += 1 + + """for j in range(0, 2): + for k in range(0, 10000): + nb_users = i.split(".")[0] + available[nb, 0] = int(nb_users) + if j == data[nb, 1] and k == data[:, 2]: + available[nb, 1] += 1 + """ + return available + + +averages = mean_mkn() +available = rb_available() # Data for plotting averages.sort(axis=0) -x = averages[:, 0] -y = averages[:, 1] print(averages) fig, ax = plt.subplots() -ax.scatter(x, y) +ax.scatter(averages[:, 0], averages[:, 1]) -ax.set(xlabel='users', ylabel='ressources (RB)', title='MaxSNR') +ax.set(xlabel='number of users', ylabel='Efficacité spectrale', title='Efficacité spectrale') ax.grid() # fig.savefig("test.png") plt.show() + +fig, ax = plt.subplots() +ax.scatter(available[:, 0], available[:, 1]) +ax.set(xlabel='number of users', ylabel='RB utilisés', title='Pourcentage de RB utilisés') +ax.grid() +plt.show() diff --git a/src/main/java/fr/ntr/AccessPoint.java b/src/main/java/fr/ntr/AccessPoint.java index 14df64a..5e92b91 100644 --- a/src/main/java/fr/ntr/AccessPoint.java +++ b/src/main/java/fr/ntr/AccessPoint.java @@ -82,14 +82,14 @@ public class AccessPoint { private void updateBandwidth(int ticks) { int n = 200; - int timeInterval = 50 + random.nextInt(51); + int timeInterval = Math.max(1, random.nextInt(51)); // avoid div by 0 for(User user : users) { // On régénère le tableau de débits toutes les 50 ms if(ticks % 50 == 0){ user.generateBandwidth(); } - // On régénère les sources toutes les 50-100 ms + // On régénère les sources toutes les 0-50 ms if(ticks % timeInterval == 0){ timeInterval = 50 + random.nextInt(51); n = user.createPackets(n, ticks); diff --git a/src/main/java/fr/ntr/User.java b/src/main/java/fr/ntr/User.java index e6b2a36..2096cf5 100644 --- a/src/main/java/fr/ntr/User.java +++ b/src/main/java/fr/ntr/User.java @@ -28,7 +28,7 @@ public class User { double random = this.random.nextDouble(); for(int x = 0; x < bandwidthTable.length; x++) { double h = 1 * Math.sqrt(-2 * Math.log(1 - random)); - double gain = h * Math.pow(10, random * 1/10) * Math.pow(1 / this.distance, 3.5); + double gain = h * h * Math.pow(10, random * 1/10) * Math.pow(1 / this.distance, 3.5); double spectralEfficiency = (20 * gain) / (15000 * (3.9*Math.pow(10, -21))); double mkn = Math.log(1 + spectralEfficiency) / Math.log(2); this.bandwidthTable[x][y] = mkn; diff --git a/src/main/java/fr/ntr/scheduler/ProportionalFair.java b/src/main/java/fr/ntr/scheduler/ProportionalFair.java index 8ed0cb8..7ce759e 100644 --- a/src/main/java/fr/ntr/scheduler/ProportionalFair.java +++ b/src/main/java/fr/ntr/scheduler/ProportionalFair.java @@ -30,16 +30,11 @@ public class ProportionalFair extends Scheduler { avg = avg / (bandwidthTable.length * bandwidthTable[0].length); averageBandwiths.add(avg); } - User selectedUser = null; + User selectedUser; for(int ts = 0; ts < 2; ts++){ for(int sp = 0; sp < 100; sp++){ selectedUser = selectionUtilisateur(ts, sp, users, averageBandwiths); - if (selectedUser.getPacketsToSend().size() != 0) { - selectedUser.getPacketsSent().add(selectedUser.getPacketsToSend().get(0)); - selectedUser.getPacketsToSend().remove(selectedUser.getPacketsToSend().get(0)); - frame[ts][sp].setUser(selectedUser); - frame[ts][sp].setBandwidth(selectedUser.getBandwidthTable()[ts][sp]); - } + allocateRessource(selectedUser, frame, ts, sp); } } } diff --git a/src/main/java/fr/ntr/scheduler/RoundRobin.java b/src/main/java/fr/ntr/scheduler/RoundRobin.java index 4566fbc..db4a3e5 100644 --- a/src/main/java/fr/ntr/scheduler/RoundRobin.java +++ b/src/main/java/fr/ntr/scheduler/RoundRobin.java @@ -36,7 +36,7 @@ public class RoundRobin extends Scheduler { //Pour chaque time slot et sous porteuses for (int Ts = 0; Ts < AccessPoint.getTimeSlotNb(); Ts++) { for(int Sp = 0; Sp < AccessPoint.getSubCarrierNb(); Sp++) { - if (users.get(index).getPacketsToSend().size() != 0) { + if (!users.get(index).getPacketsToSend().isEmpty()) { // on enlève le packet transmis de la liste // TODO Verify sub the packet send need Set packet users.get(index).getPacketsSent().add(users.get(index).getPacketsToSend().get(0)); diff --git a/src/main/java/fr/ntr/scheduler/Scheduler.java b/src/main/java/fr/ntr/scheduler/Scheduler.java index 1a1c104..0652c50 100644 --- a/src/main/java/fr/ntr/scheduler/Scheduler.java +++ b/src/main/java/fr/ntr/scheduler/Scheduler.java @@ -1,5 +1,8 @@ package fr.ntr.scheduler; +import fr.ntr.ResourceBlock; +import fr.ntr.User; + public abstract class Scheduler { /** @@ -8,7 +11,13 @@ public abstract class Scheduler { * Return */ public abstract void scheduling(int ticks); - protected void TraitementDonnees() { + protected void allocateRessource(User userMax, ResourceBlock[][] frame, int ts, int sp) { + if (userMax != null && !userMax.getPacketsToSend().isEmpty()) { + userMax.getPacketsSent().add(userMax.getPacketsToSend().get(0)); + userMax.getPacketsToSend().remove(userMax.getPacketsToSend().get(0)); + frame[ts][sp].setUser(userMax); + frame[ts][sp].setBandwidth(userMax.getBandwidthTable()[ts][sp]); + } } }