Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
- Committer:
- JhonToroM
- Date:
- 2015-11-16
- Revision:
- 0:9204c5565a45
- Child:
- 1:6e6574fdb585
File content as of revision 0:9204c5565a45:
#include "mbed.h" #include <math.h> Serial pc(USBTX, USBRX); int mu_q1 = 8; //Tasa de servicio de Cola Q1 int mu_q2 = 3*3; //Tasa de servicio de Cola Q2 *3 por n�mero de servidores int mu_q3 = 15; //Tasa de servicio de Cola Q3 int lamb = 10; //Tasa de llegada de paquetes float P = 0.5; //Probabilidad de llegada a Q2 (vs. Q1) float S = 0.1; //Probabilidad de llegada a Q1 (vs. Salida) float t=0; //Inicializaci�n del tiempo actual float Vt[]= {}; //Vector de tiempos de eventos int k=1; //Indice de los eventos ocurridos float Tf=1000; //Tiempo m�ximo de simulaci�n int C_Q1[]= {}; //Log de N�mero de paquetes en la cola Q1 int C_Q2[]= {}; //Log de N�mero de paquetes en la cola Q2 int C_Q3[]= {}; //Log de N�mero de paquetes en la cola Q3 float t_arrival=0; //Tiempo de llegada de paquetes float t_out1=0; //Tiempo de salida de la cola Q1 float t_out2=0; //Tiempo de salida de la cola Q2 float t_out3=0; //Tiempo de salida de la cola Q3 float t_min=0; //Variable auxiliar int mini=100000; //Variable auxiliar float evalmin[4] = {t_arrival , t_out1 , t_out2 , t_out3}; float a=1103515245; float m=4294967295; int c=12345; float x=100; float u=x/m; // RANDOM double r_unif(void) { x= (a*x+c)-m*floor((a*x+c)/m); u=x/m; return u; } // RANDOM EXPONENCIAL double r_exp(float mu) { double temp=-mu*log(r_unif()); return temp; } int main() { pc.baud(115200); for(k=1; k<3000; k++) { t_arrival= r_exp(1/lamb); //Tiempo de llegada del siguiente paquete if (C_Q1[k]>0) { t_out1= r_exp(1/mu_q1); } else { t_out1=t_arrival+1; } if (C_Q2[k]>0) { t_out2= r_exp(1/mu_q2); } else { t_out2=t_arrival+1; } if (C_Q3[k]>0) { t_out3= r_exp(1/mu_q3); } else { t_out3=t_arrival+1; } //Se calcula el evento que pasara primero int i; for (i=0; i<4; i++ ) { if(t_min > evalmin[i]) { t_min= evalmin[i]; mini=i; } } // Se actualiza el vector de tiempos t=t+t_min; //Se actualiza el log de eventos Vt[k]=t; //Ahora se analiza el evento de minimo tiempo y se aplican los cambios switch (mini) { case 1: if (r_unif() >= P) { C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual } else { C_Q2[k] = C_Q2[k-1]+1; //Entra a Q2 C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual } break; case 2: //La salida de la cola 1 es primero C_Q1[k] = C_Q1[k-1]-1; //Sale de Q1 C_Q3[k] = C_Q3[k-1]+1; //Entra a Q3 C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual break; case 3: //La salida de la cola 2 es primero C_Q2[k] = C_Q2[k-1]-1; //Sale de Q2 C_Q3[k] = C_Q3[k-1]+1; //Entra a Q3 C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual break; case 4: C_Q3[k] = C_Q3[k-1]-1; //Sale de Q3 C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1 C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 } else { C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual } break; } pc.printf("%.2f \r\n ",C_Q1[k]); } }