Improve pf performances

This commit is contained in:
Quentin Legot 2023-04-04 09:27:06 +02:00
parent 05d51acdc0
commit b073d58f21
2 changed files with 26 additions and 31 deletions

View File

@ -1,6 +1,7 @@
package fr.ntr; package fr.ntr;
import fr.ntr.scheduler.MaxSNR; import fr.ntr.scheduler.MaxSNR;
import fr.ntr.scheduler.ProportionalFair;
import fr.ntr.scheduler.Scheduler; import fr.ntr.scheduler.Scheduler;
import java.io.File; import java.io.File;
@ -49,8 +50,8 @@ public class Main {
for(int i = 2; i <= maximumLoad; i += 2) { for(int i = 2; i <= maximumLoad; i += 2) {
List<User> users = generateUsers(i, timeSlotNb, subCarrierNb); List<User> users = generateUsers(i, timeSlotNb, subCarrierNb);
ResourceBlock[][] frame = new ResourceBlock[timeSlotNb][subCarrierNb]; ResourceBlock[][] frame = new ResourceBlock[timeSlotNb][subCarrierNb];
Scheduler scheduler = new MaxSNR(frame, users); // Scheduler scheduler = new MaxSNR(frame, users);
// Scheduler scheduler = new ProportionalFair(frame, users); Scheduler scheduler = new ProportionalFair(frame, users);
// Scheduler scheduler = new RoundRobin(frame, users); // Scheduler scheduler = new RoundRobin(frame, users);
AccessPoint accessPoint = new AccessPoint(scheduler, frame, users); AccessPoint accessPoint = new AccessPoint(scheduler, frame, users);
executor.submit(() -> accessPoint.startSimulation(numberOfTicks)); executor.submit(() -> accessPoint.startSimulation(numberOfTicks));

View File

@ -3,57 +3,51 @@ package fr.ntr.scheduler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import fr.ntr.AccessPoint;
import fr.ntr.ResourceBlock; import fr.ntr.ResourceBlock;
import fr.ntr.User; import fr.ntr.User;
public class ProportionalFair extends Scheduler { public class ProportionalFair extends Scheduler {
private final List<User> users;
private List<User> users; private final ResourceBlock[][] frame;
private ResourceBlock[][] frame;
public ProportionalFair(ResourceBlock[][] frame, List<User> users) { public ProportionalFair(ResourceBlock[][] frame, List<User> users) {
this.frame = frame; this.frame = frame;
this.users = users; this.users = users;
} }
@Override @Override
public void scheduling(int ticks) { public void scheduling(int ticks) {
ArrayList<Double> averageBandwiths = new ArrayList<Double>(); for(int ts = 0; ts < AccessPoint.getTimeSlotNb(); ts++){
for(User u : users){ for(int sp = 0; sp < AccessPoint.getSubCarrierNb(); sp++){
double avg = 0d; User selectedUser = userSelection(ts, sp, users);
double[][] bandwidthTable = u.getBandwidthTable();
for(int i = 0; i < bandwidthTable.length; i++){
for(int j = 0; j < bandwidthTable[i].length; j++){
avg += bandwidthTable[i][j];
}
}
avg = avg / (bandwidthTable.length * bandwidthTable[0].length);
averageBandwiths.add(avg);
}
for(int ts = 0; ts < 2; ts++){
for(int sp = 0; sp < 100; sp++){
User selectedUser = userSelection(ts, sp, users, averageBandwiths);
allocateRessource(selectedUser, frame, ts, sp, ticks); allocateRessource(selectedUser, frame, ts, sp, ticks);
} }
} }
} }
private User userSelection(int ts, int sp, List<User> users, List<Double> averageBandwiths) { private User userSelection(int ts, int sp, List<User> users) {
double PF = 0.0; double PF = 0.0;
User selectedUser = null; User selectedUser = null;
for(int i = 0; i < users.size(); i++){ for (User u : users) {
User u = users.get(i); double avg = 0d;
double[][] bandwidthTable = u.getBandwidthTable();
for (double[] doubles : bandwidthTable) {
for (double aDouble : doubles) {
avg += aDouble;
}
}
avg = avg / (bandwidthTable.length * bandwidthTable[0].length);
double mkn = u.getBandwidthTable()[ts][sp]; double mkn = u.getBandwidthTable()[ts][sp];
double averageMkn = averageBandwiths.get(i); double pf = mkn / avg;
double pf = mkn / averageMkn; if (PF < pf) {
if (PF < pf){
PF = pf; PF = pf;
selectedUser = u; selectedUser = u;
} }
} }
return selectedUser; return selectedUser;
} }
} }