Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 64 additions & 37 deletions src/simulador/Leitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,34 +65,24 @@ public static void Simulacao(String estimador, int passoIncremento, int maxTags,

numSlots = numSlots + Q; //Atualizando a quantidade total de Slots utilizados
comandosT++; //Comando para informar o tamanho do quadr
//Esse for é o nosso Broadcast(Q)
for(int i = 0; i < tagsR; i++){ //Tento ler nos slots do quadro
frame[rdmGenerator.nextInt(Q)]++;
}
//Agora investigo o num de vazios, sucessos e colisoes
for(int i = 0; i < Q; i++){
comandosT++; //simulando um comando pra informar por slot "Tente se identificar"
if(frame[i] == 0){
vazios++;
}else if(frame[i] == 1){
sucessos++;
tagsR--; //se houve sucesso, decremento o numero de tags restantes
} else colisoes++;
}
//Agora tenho que redimensionar o quadro segundo os estimadores
switch (estimador) {
case "Lower Bound":
if(potDois){
Q = checaPotDois(2 * colisoes);
}else Q = 2 * colisoes;
break;

case "Schoute":
if(potDois){
Q = checaPotDois((int) Math.ceil(2.39 * colisoes));
}else Q = (int) Math.ceil(2.39 * colisoes);
break;

case "ILCM-SbS":


if(estimador != "ILCM-SbS"){
for(int i = 0; i < Q; i++){
comandosT++; //simulando um comando pra informar por slot "Tente se identificar"
if(frame[i] == 0){
vazios++;
}else if(frame[i] == 1){
sucessos++;
tagsR--; //se houve sucesso, decremento o numero de tags restantes
} else colisoes++;
}
}else{ //Codigo do ILCM
int i = 0;
int Qn = -1;
double l = 0.0;
Expand All @@ -107,27 +97,64 @@ public static void Simulacao(String estimador, int passoIncremento, int maxTags,
double zxx = Math.pow(2, Q);
double rAnt = 0.0;

while((Qn == -1)&&(i < zxx)){
while((Qn == -1)&&(i < zxx)&&(i < Q)){
if(frame[i] == 0){
vazios++;
}else if(frame[i] == 1){
sucessos++;
tagsR--; //se houve sucesso, decremento o numero de tags restantes
} else colisoes++;
i++;
k = colisoes / ((4.344 * i - 16.28) + (i / (-2.282 - 0.273 * i) * colisoes) + 0.2407 * Math.log(i + 42.56));
l = (1.2592 + 1.513 * i) * Math.tan(Math.pow(1.234 * i, -0.9907)) * colisoes;
if (k < 0) k = 0;
n = k * sucessos + l;
r = (n * Math.pow(2, Q)) / i;
if (colisoes == 0) r = (sucessos * Math.pow(2, Q)) / i;
if ((i > 1) && ((r - rAnt) < 1)) {
k = colisoes / (((4.344 * i - 16.28) + ((i / (-2.282 - 0.273 * i))) * colisoes) + (0.2407 * Math.log(i + 42.56)));
l = (1.2592 + (1.513 * i)) * (Math.tan((Math.pow((1.234 * i), -0.9907)) * colisoes));
if (k < 0) {
k = 0;
}
n = k * sucessos + l;
r = ((n * (Math.pow(2, Q))) / i);
if (colisoes == 0) {
r = ((sucessos * (Math.pow(2, Q))) / i);
}
if ((i > 1) && ((r - rAnt) < 1)) { //
l1 = Math.pow(2, Q);
qTemp = (int) Math.round(Math.log(r) / Math.log(2));
qTemp = (int) Math.round((Math.log(r)) / (Math.log(2)));
l2 = Math.pow(2, qTemp);
ps1 = (r / l1) * Math.pow((1 - (1 / l1)), (r - 1));
ps2 = (r / l2) * Math.pow((1 - (1 / l2)), (r - 1));
if((l1 * ps1 - sucessos) < l2 * ps2) Qn = qTemp;
ps2 = (r / l2) * Math.pow((1 - (1 / l2)), (r - 1));
/* if (tagsR == 0) {
break;
}*/
if(((l1 * ps1) - sucessos) <= (l2 * ps2)){
Qn = qTemp;
}
}
rAnt = r;
}
}//fim do while do ILCM
if(Qn != -1){
Q = Qn;
}
System.out.println("Tamanho do Quadro = "+Q+", tags a identificar: "+tagsR);
}
//Agora tenho que redimensionar o quadro segundo os estimadores
switch (estimador) {
case "Lower Bound":
if(potDois){
Q = checaPotDois(2 * colisoes);
}else Q = 2 * colisoes;
break;

case "Schoute":
if(potDois){
Q = checaPotDois((int) Math.ceil(2.39 * colisoes));
}else Q = (int) Math.ceil(2.39 * colisoes);
break;

case "ILCM-SbS":
//Devido ao if antes de processar a leitura, já temos o valor atualizado
//de Q, pois recebeu ou não Qn do pseudo-código do ILCM, logo não precisamos
//mais alterá-lo.
Q = Q;

break;

case "Eom-Lee":
Expand Down Expand Up @@ -278,7 +305,7 @@ public static void main(String[] args) {
//Parametros (estimador, passoIncremento, maxTags, numRepeticoes, frameSize, usaPotenciaDois)
Simulacao("Lower Bound", 100, 1000, 2000, 64, false);
Simulacao("Schoute", 100, 1000, 2000, 64, false);
// Simulacao("ILCM-SbS", 100, 1000, 2000, 64, false);
Simulacao("ILCM-SbS", 100, 1000, 1, 4, false);
Simulacao("Eom-Lee", 100, 1000, 2000, 64, false);
graphTotalSlots();
graphTotalVazios();
Expand Down