add space and maj reuse3

This commit is contained in:
iboyeau 2023-04-04 16:59:45 +02:00
parent 6b816534d7
commit f93b1c4c22
4 changed files with 20 additions and 51 deletions

View File

@ -9,7 +9,7 @@ public class AccessPoint {
private final Cell cell1; private final Cell cell1;
private final Cell cell2; private final Cell cell2;
public AccessPoint(Cell cell1, Cell cell2){ public AccessPoint (Cell cell1, Cell cell2){
this.cell1 = cell1; this.cell1 = cell1;
this.cell2 = cell2; this.cell2 = cell2;
} }
@ -18,7 +18,7 @@ public class AccessPoint {
* Lancer la simulation * Lancer la simulation
* @param duration * @param duration
*/ */
public void startSimulation(int duration) { public void startSimulation (int duration) {
for (int ticks = 0; ticks < duration; ++ticks) { for (int ticks = 0; ticks < duration; ++ticks) {
// Simulation // Simulation
cell1.reset(); cell1.reset();
@ -39,31 +39,4 @@ public class AccessPoint {
} }
} }
public void computeInterference() {
ResourceBlock[][] frameCell1 = cell1.getFrame();
ResourceBlock[][] frameCell2 = cell2.getFrame();
for (int k = 0; k < frameCell1.length; k++) {
for (int l = 0; l < frameCell1[k].length; l++) {
//interférences si les deux cellules parlent au même UE sur le même time slot
User user1 = frameCell1[k][l].getUser();
User user2 = frameCell2[k][l].getUser();
if ((user1 != null || user2 != null) && user1 == user2) {
double bandwidth1 = frameCell1[k][l].getBandwidth();
double bandwidth2 = frameCell2[k][l].getBandwidth();
//User proche
if (user1.getDistance() < 200d) {
frameCell1[k][l].getUser().getBandwidthTable()[k][l] = bandwidth1 / 2;
frameCell2[k][l].getUser().getBandwidthTable()[k][l] = bandwidth2 / 2;
}
//User loin
else {
frameCell1[k][l].getUser().getBandwidthTable()[k][l] = bandwidth1 / 4;
frameCell2[k][l].getUser().getBandwidthTable()[k][l] = bandwidth2 / 4;
}
}
}
}
}
} }

View File

@ -16,13 +16,13 @@ import java.util.concurrent.TimeUnit;
public class Main { public class Main {
public static void main(String[] args) { public static void main (String[] args) {
if(args.length == 2) { if (args.length == 2) {
int numberOfTicks; // Nombre de ticks de la simulation -> durée de la simulation int numberOfTicks; // Nombre de ticks de la simulation -> durée de la simulation
int maximumLoad; // Nombre maximal d'utilisateurs dans le système int maximumLoad; // Nombre maximal d'utilisateurs dans le système
//TODO make this cleanly
boolean isReuse3 = false; //reuse 1 par défaut sinon reuse 3 boolean isReuse3 = false; //reuse 1 par défaut sinon reuse 3
int nbcell = 2; //nombre de cellules que l'on va utiliser int nbcell = 2; //nombre de cellules que l'on va utiliser
@ -39,11 +39,19 @@ public class Main {
//instancie nombre de time slots et sous-porteuses //instancie nombre de time slots et sous-porteuses
int timeSlotNb = 2; int timeSlotNb = 2;
int subCarrierNb = 100; //nb subcarrier si reuse1 ou reuse3
int subCarrierNb;
if (isReuse3) {
subCarrierNb = 100 / nbcell;
}
else{
subCarrierNb = 100;
}
//préparation pour exportation des données //préparation pour exportation des données
File folder = new File("export"); File folder = new File("export");
if(!folder.exists() && !folder.mkdir()) { if (!folder.exists() && !folder.mkdir()) {
System.err.println("Cannot create export folder"); System.err.println("Cannot create export folder");
System.exit(1); System.exit(1);
} }
@ -59,7 +67,7 @@ public class Main {
Cell.setTimeSlotNb(timeSlotNb); Cell.setTimeSlotNb(timeSlotNb);
Cell.setSubCarrierNb(subCarrierNb); Cell.setSubCarrierNb(subCarrierNb);
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for(int i = 2; i <= maximumLoad; i += 2) { for (int i = 2; i <= maximumLoad; i += 2) {
//génération des utilisateurs //génération des utilisateurs
List<User> usersCell1 = generateUsers(i, timeSlotNb, subCarrierNb); List<User> usersCell1 = generateUsers(i, timeSlotNb, subCarrierNb);
List<User> usersCell2 = generateUsers(i, timeSlotNb, subCarrierNb); List<User> usersCell2 = generateUsers(i, timeSlotNb, subCarrierNb);
@ -86,7 +94,7 @@ public class Main {
AccessPoint accessPoint = new AccessPoint(cell1, cell2); AccessPoint accessPoint = new AccessPoint(cell1, cell2);
executor.submit(() -> accessPoint.startSimulation(numberOfTicks)); executor.submit(() -> accessPoint.startSimulation(numberOfTicks));
} }
catch(IOException e) { catch (IOException e) {
System.err.println(e.getClass().getSimpleName() + " : " + e.getMessage()); System.err.println(e.getClass().getSimpleName() + " : " + e.getMessage());
System.exit(1); System.exit(1);
} }

View File

@ -26,13 +26,6 @@ public class MaxSNR extends Scheduler {
allocateRessource(userMax, myFrame, neighborFrame, ts, sp, ticks); allocateRessource(userMax, myFrame, neighborFrame, ts, sp, ticks);
} }
} }
for(int ts = 0; ts < 2; ts++){
for(int sp = 0; sp < 100; sp++){
userMax = userSelection(ts, sp);
allocateRessource(userMax, myFrame, neighborFrame, ts, sp, ticks);
}
}
} }
/** /**
@ -48,7 +41,6 @@ public class MaxSNR extends Scheduler {
if (!u.getPacketsToSend().isEmpty() && (maxSnr < u.getBandwidthTable()[ts][sp])) { if (!u.getPacketsToSend().isEmpty() && (maxSnr < u.getBandwidthTable()[ts][sp])) {
maxSnr = u.getBandwidthTable()[ts][sp]; maxSnr = u.getBandwidthTable()[ts][sp];
userMax = u; userMax = u;
} }
} }
return userMax; return userMax;

View File

@ -6,11 +6,7 @@ import fr.ntr.User;
public abstract class Scheduler { public abstract class Scheduler {
/**
* Entry
* Rempli la trame avec les utilisateurs
* Return
*/
public abstract void scheduling(int ticks); public abstract void scheduling(int ticks);
protected void allocateRessource(User userMax, ResourceBlock[][] myFrame, ResourceBlock[][] neighborFrame, int ts, int sp, int ticks) { protected void allocateRessource(User userMax, ResourceBlock[][] myFrame, ResourceBlock[][] neighborFrame, int ts, int sp, int ticks) {
@ -24,12 +20,12 @@ public abstract class Scheduler {
//User proche //User proche
if (userMax.getDistance() < 200d) { if (userMax.getDistance() < 200d) {
rb1.getUser().getBandwidthTable()[ts][sp] = bandwidth1 / 2; rb1.getUser().getBandwidthTable()[ts][sp] = bandwidth1 / 2;
rb2.getUser().getBandwidthTable()[ts][sp] = bandwidth2 / 2; //rb2.getUser().getBandwidthTable()[ts][sp] = bandwidth2 / 2;
} }
//User loin //User loin
else { else {
rb1.getUser().getBandwidthTable()[ts][sp] = bandwidth1 / 4; rb1.getUser().getBandwidthTable()[ts][sp] = bandwidth1 / 4;
rb2.getUser().getBandwidthTable()[ts][sp] = bandwidth2 / 4; //rb2.getUser().getBandwidthTable()[ts][sp] = bandwidth2 / 4;
} }
} }
Packets p = userMax.getPacketsToSend().get(userMax.getPacketsToSend().size()-1); Packets p = userMax.getPacketsToSend().get(userMax.getPacketsToSend().size()-1);