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@1:6e6574fdb585, 2015-11-16 (annotated)
- Committer:
- JhonToroM
- Date:
- Mon Nov 16 15:42:20 2015 +0000
- Revision:
- 1:6e6574fdb585
- Parent:
- 0:9204c5565a45
- Child:
- 2:789421c43e73
?ltimo c?digo
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 | 1:6e6574fdb585 | 4 | double mu_q1 = 8; //Tasa de servicio de Cola Q1 |
JhonToroM | 1:6e6574fdb585 | 5 | double mu_q2 = 3*3; //Tasa de servicio de Cola Q2 *3 por n�mero de servidores |
JhonToroM | 1:6e6574fdb585 | 6 | double mu_q3 = 15; //Tasa de servicio de Cola Q3 |
JhonToroM | 0:9204c5565a45 | 7 | |
JhonToroM | 1:6e6574fdb585 | 8 | double 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 | 1:6e6574fdb585 | 13 | double t=0; //Inicializaci�n del tiempo actual |
JhonToroM | 1:6e6574fdb585 | 14 | const int total =700; |
JhonToroM | 1:6e6574fdb585 | 15 | double Vt[total]; //Vector de tiempos de eventos |
JhonToroM | 1:6e6574fdb585 | 16 | int k = 1; //Indice de los eventos ocurridos |
JhonToroM | 0:9204c5565a45 | 17 | float Tf=1000; //Tiempo m�ximo de simulaci�n |
JhonToroM | 0:9204c5565a45 | 18 | |
JhonToroM | 1:6e6574fdb585 | 19 | int C_Q1[total]; //Log de N�mero de paquetes en la cola Q1 |
JhonToroM | 1:6e6574fdb585 | 20 | int C_Q2[total]; //Log de N�mero de paquetes en la cola Q2 |
JhonToroM | 1:6e6574fdb585 | 21 | int C_Q3[total]; //Log de N�mero de paquetes en la cola Q3 |
JhonToroM | 1:6e6574fdb585 | 22 | |
JhonToroM | 1:6e6574fdb585 | 23 | double t_arrival=0; //Tiempo de llegada de paquetes |
JhonToroM | 1:6e6574fdb585 | 24 | double t_out1=0; //Tiempo de salida de la cola Q1 |
JhonToroM | 1:6e6574fdb585 | 25 | double t_out2=0; //Tiempo de salida de la cola Q2 |
JhonToroM | 1:6e6574fdb585 | 26 | double t_out3=0; //Tiempo de salida de la cola Q3 |
JhonToroM | 1:6e6574fdb585 | 27 | double t_min=10000; //Variable auxiliar |
JhonToroM | 1:6e6574fdb585 | 28 | int mini=100; //Variable auxiliar |
JhonToroM | 1:6e6574fdb585 | 29 | |
JhonToroM | 1:6e6574fdb585 | 30 | double evalmin[4]; |
JhonToroM | 0:9204c5565a45 | 31 | |
JhonToroM | 1:6e6574fdb585 | 32 | double a=1103515245; |
JhonToroM | 1:6e6574fdb585 | 33 | double m=4294967295; |
JhonToroM | 1:6e6574fdb585 | 34 | int c=12345; |
JhonToroM | 1:6e6574fdb585 | 35 | double x=10; |
JhonToroM | 1:6e6574fdb585 | 36 | double u=x/m; |
JhonToroM | 0:9204c5565a45 | 37 | |
JhonToroM | 1:6e6574fdb585 | 38 | int suma1 = 0; |
JhonToroM | 1:6e6574fdb585 | 39 | int suma2 = 0; |
JhonToroM | 1:6e6574fdb585 | 40 | int suma3 = 0; |
JhonToroM | 0:9204c5565a45 | 41 | |
JhonToroM | 1:6e6574fdb585 | 42 | double mean1 = 0; |
JhonToroM | 1:6e6574fdb585 | 43 | double mean2 = 0; |
JhonToroM | 1:6e6574fdb585 | 44 | double mean3 = 0; |
JhonToroM | 1:6e6574fdb585 | 45 | double meanT = 0; |
JhonToroM | 0:9204c5565a45 | 46 | |
JhonToroM | 0:9204c5565a45 | 47 | // RANDOM |
JhonToroM | 0:9204c5565a45 | 48 | double r_unif(void) |
JhonToroM | 0:9204c5565a45 | 49 | { |
JhonToroM | 0:9204c5565a45 | 50 | x= (a*x+c)-m*floor((a*x+c)/m); |
JhonToroM | 0:9204c5565a45 | 51 | u=x/m; |
JhonToroM | 0:9204c5565a45 | 52 | return u; |
JhonToroM | 0:9204c5565a45 | 53 | } |
JhonToroM | 0:9204c5565a45 | 54 | |
JhonToroM | 0:9204c5565a45 | 55 | // RANDOM EXPONENCIAL |
JhonToroM | 1:6e6574fdb585 | 56 | double r_exp(double mu) |
JhonToroM | 0:9204c5565a45 | 57 | { |
JhonToroM | 0:9204c5565a45 | 58 | double temp=-mu*log(r_unif()); |
JhonToroM | 0:9204c5565a45 | 59 | return temp; |
JhonToroM | 0:9204c5565a45 | 60 | } |
JhonToroM | 0:9204c5565a45 | 61 | |
JhonToroM | 0:9204c5565a45 | 62 | |
JhonToroM | 0:9204c5565a45 | 63 | |
JhonToroM | 0:9204c5565a45 | 64 | int main() |
JhonToroM | 0:9204c5565a45 | 65 | { |
JhonToroM | 0:9204c5565a45 | 66 | pc.baud(115200); |
JhonToroM | 1:6e6574fdb585 | 67 | |
JhonToroM | 1:6e6574fdb585 | 68 | for(k=1; k<total; k++) { |
JhonToroM | 1:6e6574fdb585 | 69 | t_arrival= r_exp(1.0/lamb); //Tiempo de llegada del siguiente paquete |
JhonToroM | 1:6e6574fdb585 | 70 | if (C_Q1[k-1]>0) { |
JhonToroM | 1:6e6574fdb585 | 71 | t_out1= r_exp(1.0/mu_q1); |
JhonToroM | 0:9204c5565a45 | 72 | } else { |
JhonToroM | 1:6e6574fdb585 | 73 | t_out1=t_arrival+1.0; |
JhonToroM | 0:9204c5565a45 | 74 | } |
JhonToroM | 1:6e6574fdb585 | 75 | if (C_Q2[k-1]>0) { |
JhonToroM | 1:6e6574fdb585 | 76 | t_out2= r_exp(1.0/mu_q2); |
JhonToroM | 0:9204c5565a45 | 77 | } else { |
JhonToroM | 1:6e6574fdb585 | 78 | t_out2=t_arrival+1.0; |
JhonToroM | 0:9204c5565a45 | 79 | } |
JhonToroM | 1:6e6574fdb585 | 80 | if (C_Q3[k-1]>0) { |
JhonToroM | 1:6e6574fdb585 | 81 | t_out3= r_exp(1.0/mu_q3); |
JhonToroM | 0:9204c5565a45 | 82 | } else { |
JhonToroM | 1:6e6574fdb585 | 83 | t_out3=t_arrival+1.0; |
JhonToroM | 0:9204c5565a45 | 84 | } |
JhonToroM | 0:9204c5565a45 | 85 | |
JhonToroM | 0:9204c5565a45 | 86 | //Se calcula el evento que pasara primero |
JhonToroM | 1:6e6574fdb585 | 87 | evalmin[0]=t_arrival; |
JhonToroM | 1:6e6574fdb585 | 88 | evalmin[1]= t_out1; |
JhonToroM | 1:6e6574fdb585 | 89 | evalmin[2]=t_out2; |
JhonToroM | 1:6e6574fdb585 | 90 | evalmin[3]= t_out3; |
JhonToroM | 1:6e6574fdb585 | 91 | t_min=100; |
JhonToroM | 1:6e6574fdb585 | 92 | for (int i=0; i<4; i++ ) { |
JhonToroM | 0:9204c5565a45 | 93 | if(t_min > evalmin[i]) { |
JhonToroM | 0:9204c5565a45 | 94 | t_min= evalmin[i]; |
JhonToroM | 0:9204c5565a45 | 95 | mini=i; |
JhonToroM | 0:9204c5565a45 | 96 | } |
JhonToroM | 0:9204c5565a45 | 97 | } |
JhonToroM | 0:9204c5565a45 | 98 | |
JhonToroM | 0:9204c5565a45 | 99 | // Se actualiza el vector de tiempos |
JhonToroM | 0:9204c5565a45 | 100 | t=t+t_min; |
JhonToroM | 0:9204c5565a45 | 101 | //Se actualiza el log de eventos |
JhonToroM | 0:9204c5565a45 | 102 | Vt[k]=t; |
JhonToroM | 0:9204c5565a45 | 103 | |
JhonToroM | 0:9204c5565a45 | 104 | //Ahora se analiza el evento de minimo tiempo y se aplican los cambios |
JhonToroM | 0:9204c5565a45 | 105 | |
JhonToroM | 0:9204c5565a45 | 106 | switch (mini) { |
JhonToroM | 1:6e6574fdb585 | 107 | case 0: |
JhonToroM | 1:6e6574fdb585 | 108 | //pc.printf("Arriving\r\n"); |
JhonToroM | 0:9204c5565a45 | 109 | if (r_unif() >= P) { |
JhonToroM | 0:9204c5565a45 | 110 | C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 |
JhonToroM | 0:9204c5565a45 | 111 | C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual |
JhonToroM | 0:9204c5565a45 | 112 | C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual |
JhonToroM | 0:9204c5565a45 | 113 | } else { |
JhonToroM | 0:9204c5565a45 | 114 | C_Q2[k] = C_Q2[k-1]+1; //Entra a Q2 |
JhonToroM | 0:9204c5565a45 | 115 | C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual |
JhonToroM | 0:9204c5565a45 | 116 | C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual |
JhonToroM | 0:9204c5565a45 | 117 | } |
JhonToroM | 0:9204c5565a45 | 118 | break; |
JhonToroM | 1:6e6574fdb585 | 119 | case 1: //La salida de la cola 1 es primero |
JhonToroM | 1:6e6574fdb585 | 120 | //pc.printf("Leaving 1\r\n"); |
JhonToroM | 0:9204c5565a45 | 121 | C_Q1[k] = C_Q1[k-1]-1; //Sale de Q1 |
JhonToroM | 0:9204c5565a45 | 122 | C_Q3[k] = C_Q3[k-1]+1; //Entra a Q3 |
JhonToroM | 0:9204c5565a45 | 123 | C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual |
JhonToroM | 0:9204c5565a45 | 124 | break; |
JhonToroM | 1:6e6574fdb585 | 125 | case 2: //La salida de la cola 2 es primero |
JhonToroM | 1:6e6574fdb585 | 126 | //pc.printf("Leaving 2\r\n"); |
JhonToroM | 0:9204c5565a45 | 127 | C_Q2[k] = C_Q2[k-1]-1; //Sale de Q2 |
JhonToroM | 0:9204c5565a45 | 128 | C_Q3[k] = C_Q3[k-1]+1; //Entra a Q3 |
JhonToroM | 0:9204c5565a45 | 129 | C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual |
JhonToroM | 0:9204c5565a45 | 130 | break; |
JhonToroM | 1:6e6574fdb585 | 131 | case 3: |
JhonToroM | 1:6e6574fdb585 | 132 | //pc.printf("Leaving 3\r\n"); |
JhonToroM | 0:9204c5565a45 | 133 | C_Q3[k] = C_Q3[k-1]-1; //Sale de Q3 |
JhonToroM | 0:9204c5565a45 | 134 | C_Q2[k] = C_Q2[k-1]; //Q2 permanece igual |
JhonToroM | 0:9204c5565a45 | 135 | if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1 |
JhonToroM | 0:9204c5565a45 | 136 | C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 |
JhonToroM | 0:9204c5565a45 | 137 | } else { |
JhonToroM | 0:9204c5565a45 | 138 | C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual |
JhonToroM | 0:9204c5565a45 | 139 | } |
JhonToroM | 0:9204c5565a45 | 140 | break; |
JhonToroM | 1:6e6574fdb585 | 141 | default: |
JhonToroM | 1:6e6574fdb585 | 142 | pc.printf("Error\r\n"); |
JhonToroM | 1:6e6574fdb585 | 143 | //mini=0; |
JhonToroM | 1:6e6574fdb585 | 144 | break; |
JhonToroM | 0:9204c5565a45 | 145 | } |
JhonToroM | 1:6e6574fdb585 | 146 | //pc.printf("T actual: %f\r\n",t); |
JhonToroM | 1:6e6574fdb585 | 147 | //pc.printf("Tiempo min: %f \r\n",t_min); |
JhonToroM | 1:6e6574fdb585 | 148 | //pc.printf("Ind min: %d \r\n",mini); |
JhonToroM | 1:6e6574fdb585 | 149 | // pc.printf("Cola 1: %d \r\n",C_Q1[k]); |
JhonToroM | 1:6e6574fdb585 | 150 | // pc.printf("Cola 2: %d \r\n",C_Q2[k]); |
JhonToroM | 1:6e6574fdb585 | 151 | //pc.printf("Cola 3: %d \r\n",C_Q3[k]); |
JhonToroM | 1:6e6574fdb585 | 152 | //pc.printf("Arrival: %.2f \r\n ",t_arrival); |
JhonToroM | 1:6e6574fdb585 | 153 | //pc.printf("T_1: %.2f \r\n ",t_out1); |
JhonToroM | 1:6e6574fdb585 | 154 | //pc.printf("T_2: %.2f \r\n ",t_out2); |
JhonToroM | 1:6e6574fdb585 | 155 | //pc.printf("T_3: %.2f \r\n ",t_out3); |
JhonToroM | 1:6e6574fdb585 | 156 | // pc.printf("-------------- \r\n"); |
JhonToroM | 1:6e6574fdb585 | 157 | suma1=suma1+C_Q1[k]; |
JhonToroM | 1:6e6574fdb585 | 158 | suma2=suma1+C_Q2[k]; |
JhonToroM | 1:6e6574fdb585 | 159 | suma3=suma1+C_Q3[k]; |
JhonToroM | 0:9204c5565a45 | 160 | } |
JhonToroM | 1:6e6574fdb585 | 161 | mean1=suma1/total; |
JhonToroM | 1:6e6574fdb585 | 162 | mean2=suma2/total; |
JhonToroM | 1:6e6574fdb585 | 163 | mean3=suma3/total; |
JhonToroM | 1:6e6574fdb585 | 164 | meanT = mean1+mean2+mean3; |
JhonToroM | 0:9204c5565a45 | 165 | |
JhonToroM | 1:6e6574fdb585 | 166 | pc.printf("Media Cola 1: %f \r\n",mean1); |
JhonToroM | 1:6e6574fdb585 | 167 | pc.printf("Media Cola 2: %f \r\n",mean2); |
JhonToroM | 1:6e6574fdb585 | 168 | pc.printf("Media Cola 2: %f \r\n",mean3); |
JhonToroM | 1:6e6574fdb585 | 169 | pc.printf("Media Total : %f \r\n",meanT); |
JhonToroM | 0:9204c5565a45 | 170 | } |