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