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@0:9204c5565a45, 2015-11-16 (annotated)
- Committer:
- JhonToroM
- Date:
- Mon Nov 16 03:30:45 2015 +0000
- Revision:
- 0:9204c5565a45
- Child:
- 1:6e6574fdb585
finaL?
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JhonToroM | 0:9204c5565a45 | 1 | #include "mbed.h" |
JhonToroM | 0:9204c5565a45 | 2 | #include <math.h> |
JhonToroM | 0:9204c5565a45 | 3 | Serial pc(USBTX, USBRX); |
JhonToroM | 0:9204c5565a45 | 4 | int mu_q1 = 8; //Tasa de servicio de Cola Q1 |
JhonToroM | 0:9204c5565a45 | 5 | int mu_q2 = 3*3; //Tasa de servicio de Cola Q2 *3 por n�mero de servidores |
JhonToroM | 0:9204c5565a45 | 6 | int mu_q3 = 15; //Tasa de servicio de Cola Q3 |
JhonToroM | 0:9204c5565a45 | 7 | |
JhonToroM | 0:9204c5565a45 | 8 | int lamb = 10; //Tasa de llegada de paquetes |
JhonToroM | 0:9204c5565a45 | 9 | |
JhonToroM | 0:9204c5565a45 | 10 | float P = 0.5; //Probabilidad de llegada a Q2 (vs. Q1) |
JhonToroM | 0:9204c5565a45 | 11 | float S = 0.1; //Probabilidad de llegada a Q1 (vs. Salida) |
JhonToroM | 0:9204c5565a45 | 12 | |
JhonToroM | 0:9204c5565a45 | 13 | float t=0; //Inicializaci�n del tiempo actual |
JhonToroM | 0:9204c5565a45 | 14 | float Vt[]= {}; //Vector de tiempos de eventos |
JhonToroM | 0:9204c5565a45 | 15 | int k=1; //Indice de los eventos ocurridos |
JhonToroM | 0:9204c5565a45 | 16 | float Tf=1000; //Tiempo m�ximo de simulaci�n |
JhonToroM | 0:9204c5565a45 | 17 | |
JhonToroM | 0:9204c5565a45 | 18 | int C_Q1[]= {}; //Log de N�mero de paquetes en la cola Q1 |
JhonToroM | 0:9204c5565a45 | 19 | int C_Q2[]= {}; //Log de N�mero de paquetes en la cola Q2 |
JhonToroM | 0:9204c5565a45 | 20 | int C_Q3[]= {}; //Log de N�mero de paquetes en la cola Q3 |
JhonToroM | 0:9204c5565a45 | 21 | |
JhonToroM | 0:9204c5565a45 | 22 | float t_arrival=0; //Tiempo de llegada de paquetes |
JhonToroM | 0:9204c5565a45 | 23 | float t_out1=0; //Tiempo de salida de la cola Q1 |
JhonToroM | 0:9204c5565a45 | 24 | float t_out2=0; //Tiempo de salida de la cola Q2 |
JhonToroM | 0:9204c5565a45 | 25 | float t_out3=0; //Tiempo de salida de la cola Q3 |
JhonToroM | 0:9204c5565a45 | 26 | float t_min=0; //Variable auxiliar |
JhonToroM | 0:9204c5565a45 | 27 | int mini=100000; //Variable auxiliar |
JhonToroM | 0:9204c5565a45 | 28 | |
JhonToroM | 0:9204c5565a45 | 29 | float evalmin[4] = {t_arrival , t_out1 , t_out2 , t_out3}; |
JhonToroM | 0:9204c5565a45 | 30 | |
JhonToroM | 0:9204c5565a45 | 31 | float a=1103515245; |
JhonToroM | 0:9204c5565a45 | 32 | float m=4294967295; |
JhonToroM | 0:9204c5565a45 | 33 | int c=12345; |
JhonToroM | 0:9204c5565a45 | 34 | float x=100; |
JhonToroM | 0:9204c5565a45 | 35 | float u=x/m; |
JhonToroM | 0:9204c5565a45 | 36 | |
JhonToroM | 0:9204c5565a45 | 37 | // RANDOM |
JhonToroM | 0:9204c5565a45 | 38 | double r_unif(void) |
JhonToroM | 0:9204c5565a45 | 39 | { |
JhonToroM | 0:9204c5565a45 | 40 | x= (a*x+c)-m*floor((a*x+c)/m); |
JhonToroM | 0:9204c5565a45 | 41 | u=x/m; |
JhonToroM | 0:9204c5565a45 | 42 | return u; |
JhonToroM | 0:9204c5565a45 | 43 | } |
JhonToroM | 0:9204c5565a45 | 44 | |
JhonToroM | 0:9204c5565a45 | 45 | // RANDOM EXPONENCIAL |
JhonToroM | 0:9204c5565a45 | 46 | double r_exp(float mu) |
JhonToroM | 0:9204c5565a45 | 47 | { |
JhonToroM | 0:9204c5565a45 | 48 | double temp=-mu*log(r_unif()); |
JhonToroM | 0:9204c5565a45 | 49 | return temp; |
JhonToroM | 0:9204c5565a45 | 50 | } |
JhonToroM | 0:9204c5565a45 | 51 | |
JhonToroM | 0:9204c5565a45 | 52 | |
JhonToroM | 0:9204c5565a45 | 53 | |
JhonToroM | 0:9204c5565a45 | 54 | int main() |
JhonToroM | 0:9204c5565a45 | 55 | { |
JhonToroM | 0:9204c5565a45 | 56 | pc.baud(115200); |
JhonToroM | 0:9204c5565a45 | 57 | for(k=1; k<3000; k++) { |
JhonToroM | 0:9204c5565a45 | 58 | t_arrival= r_exp(1/lamb); //Tiempo de llegada del siguiente paquete |
JhonToroM | 0:9204c5565a45 | 59 | if (C_Q1[k]>0) { |
JhonToroM | 0:9204c5565a45 | 60 | t_out1= r_exp(1/mu_q1); |
JhonToroM | 0:9204c5565a45 | 61 | } else { |
JhonToroM | 0:9204c5565a45 | 62 | t_out1=t_arrival+1; |
JhonToroM | 0:9204c5565a45 | 63 | } |
JhonToroM | 0:9204c5565a45 | 64 | if (C_Q2[k]>0) { |
JhonToroM | 0:9204c5565a45 | 65 | t_out2= r_exp(1/mu_q2); |
JhonToroM | 0:9204c5565a45 | 66 | } else { |
JhonToroM | 0:9204c5565a45 | 67 | t_out2=t_arrival+1; |
JhonToroM | 0:9204c5565a45 | 68 | } |
JhonToroM | 0:9204c5565a45 | 69 | if (C_Q3[k]>0) { |
JhonToroM | 0:9204c5565a45 | 70 | t_out3= r_exp(1/mu_q3); |
JhonToroM | 0:9204c5565a45 | 71 | } else { |
JhonToroM | 0:9204c5565a45 | 72 | t_out3=t_arrival+1; |
JhonToroM | 0:9204c5565a45 | 73 | } |
JhonToroM | 0:9204c5565a45 | 74 | |
JhonToroM | 0:9204c5565a45 | 75 | //Se calcula el evento que pasara primero |
JhonToroM | 0:9204c5565a45 | 76 | int i; |
JhonToroM | 0:9204c5565a45 | 77 | for (i=0; i<4; i++ ) { |
JhonToroM | 0:9204c5565a45 | 78 | if(t_min > evalmin[i]) { |
JhonToroM | 0:9204c5565a45 | 79 | t_min= evalmin[i]; |
JhonToroM | 0:9204c5565a45 | 80 | mini=i; |
JhonToroM | 0:9204c5565a45 | 81 | } |
JhonToroM | 0:9204c5565a45 | 82 | } |
JhonToroM | 0:9204c5565a45 | 83 | |
JhonToroM | 0:9204c5565a45 | 84 | // Se actualiza el vector de tiempos |
JhonToroM | 0:9204c5565a45 | 85 | t=t+t_min; |
JhonToroM | 0:9204c5565a45 | 86 | //Se actualiza el log de eventos |
JhonToroM | 0:9204c5565a45 | 87 | Vt[k]=t; |
JhonToroM | 0:9204c5565a45 | 88 | |
JhonToroM | 0:9204c5565a45 | 89 | //Ahora se analiza el evento de minimo tiempo y se aplican los cambios |
JhonToroM | 0:9204c5565a45 | 90 | |
JhonToroM | 0:9204c5565a45 | 91 | switch (mini) { |
JhonToroM | 0:9204c5565a45 | 92 | case 1: |
JhonToroM | 0:9204c5565a45 | 93 | if (r_unif() >= P) { |
JhonToroM | 0:9204c5565a45 | 94 | C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 |
JhonToroM | 0:9204c5565a45 | 95 | C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual |
JhonToroM | 0:9204c5565a45 | 96 | C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual |
JhonToroM | 0:9204c5565a45 | 97 | } else { |
JhonToroM | 0:9204c5565a45 | 98 | C_Q2[k] = C_Q2[k-1]+1; //Entra a Q2 |
JhonToroM | 0:9204c5565a45 | 99 | C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual |
JhonToroM | 0:9204c5565a45 | 100 | C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual |
JhonToroM | 0:9204c5565a45 | 101 | } |
JhonToroM | 0:9204c5565a45 | 102 | break; |
JhonToroM | 0:9204c5565a45 | 103 | case 2: //La salida de la cola 1 es primero |
JhonToroM | 0:9204c5565a45 | 104 | C_Q1[k] = C_Q1[k-1]-1; //Sale de Q1 |
JhonToroM | 0:9204c5565a45 | 105 | C_Q3[k] = C_Q3[k-1]+1; //Entra a Q3 |
JhonToroM | 0:9204c5565a45 | 106 | C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual |
JhonToroM | 0:9204c5565a45 | 107 | break; |
JhonToroM | 0:9204c5565a45 | 108 | case 3: //La salida de la cola 2 es primero |
JhonToroM | 0:9204c5565a45 | 109 | C_Q2[k] = C_Q2[k-1]-1; //Sale de Q2 |
JhonToroM | 0:9204c5565a45 | 110 | C_Q3[k] = C_Q3[k-1]+1; //Entra a Q3 |
JhonToroM | 0:9204c5565a45 | 111 | C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual |
JhonToroM | 0:9204c5565a45 | 112 | break; |
JhonToroM | 0:9204c5565a45 | 113 | case 4: |
JhonToroM | 0:9204c5565a45 | 114 | C_Q3[k] = C_Q3[k-1]-1; //Sale de Q3 |
JhonToroM | 0:9204c5565a45 | 115 | C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual |
JhonToroM | 0:9204c5565a45 | 116 | if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1 |
JhonToroM | 0:9204c5565a45 | 117 | C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 |
JhonToroM | 0:9204c5565a45 | 118 | } else { |
JhonToroM | 0:9204c5565a45 | 119 | C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual |
JhonToroM | 0:9204c5565a45 | 120 | } |
JhonToroM | 0:9204c5565a45 | 121 | break; |
JhonToroM | 0:9204c5565a45 | 122 | } |
JhonToroM | 0:9204c5565a45 | 123 | pc.printf("%.2f \r\n ",C_Q1[k]); |
JhonToroM | 0:9204c5565a45 | 124 | } |
JhonToroM | 0:9204c5565a45 | 125 | |
JhonToroM | 0:9204c5565a45 | 126 | } |