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
Revision 1:6e6574fdb585, committed 2015-11-16
- Comitter:
- JhonToroM
- Date:
- Mon Nov 16 15:42:20 2015 +0000
- Parent:
- 0:9204c5565a45
- Child:
- 2:789421c43e73
- Commit message:
- ?ltimo c?digo
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Nov 16 03:30:45 2015 +0000 +++ b/main.cpp Mon Nov 16 15:42:20 2015 +0000 @@ -1,38 +1,48 @@ #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 +double mu_q1 = 8; //Tasa de servicio de Cola Q1 +double mu_q2 = 3*3; //Tasa de servicio de Cola Q2 *3 por n�mero de servidores +double mu_q3 = 15; //Tasa de servicio de Cola Q3 -int lamb = 10; //Tasa de llegada de paquetes +double 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 +double t=0; //Inicializaci�n del tiempo actual +const int total =700; +double Vt[total]; //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 +int C_Q1[total]; //Log de N�mero de paquetes en la cola Q1 +int C_Q2[total]; //Log de N�mero de paquetes en la cola Q2 +int C_Q3[total]; //Log de N�mero de paquetes en la cola Q3 + +double t_arrival=0; //Tiempo de llegada de paquetes +double t_out1=0; //Tiempo de salida de la cola Q1 +double t_out2=0; //Tiempo de salida de la cola Q2 +double t_out3=0; //Tiempo de salida de la cola Q3 +double t_min=10000; //Variable auxiliar +int mini=100; //Variable auxiliar + +double evalmin[4]; -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 +double a=1103515245; +double m=4294967295; +int c=12345; +double x=10; +double u=x/m; -float evalmin[4] = {t_arrival , t_out1 , t_out2 , t_out3}; +int suma1 = 0; +int suma2 = 0; +int suma3 = 0; -float a=1103515245; -float m=4294967295; -int c=12345; -float x=100; -float u=x/m; +double mean1 = 0; +double mean2 = 0; +double mean3 = 0; +double meanT = 0; // RANDOM double r_unif(void) @@ -43,7 +53,7 @@ } // RANDOM EXPONENCIAL -double r_exp(float mu) +double r_exp(double mu) { double temp=-mu*log(r_unif()); return temp; @@ -54,27 +64,32 @@ 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); + + for(k=1; k<total; k++) { + t_arrival= r_exp(1.0/lamb); //Tiempo de llegada del siguiente paquete + if (C_Q1[k-1]>0) { + t_out1= r_exp(1.0/mu_q1); } else { - t_out1=t_arrival+1; + t_out1=t_arrival+1.0; } - if (C_Q2[k]>0) { - t_out2= r_exp(1/mu_q2); + if (C_Q2[k-1]>0) { + t_out2= r_exp(1.0/mu_q2); } else { - t_out2=t_arrival+1; + t_out2=t_arrival+1.0; } - if (C_Q3[k]>0) { - t_out3= r_exp(1/mu_q3); + if (C_Q3[k-1]>0) { + t_out3= r_exp(1.0/mu_q3); } else { - t_out3=t_arrival+1; + t_out3=t_arrival+1.0; } //Se calcula el evento que pasara primero - int i; - for (i=0; i<4; i++ ) { + evalmin[0]=t_arrival; + evalmin[1]= t_out1; + evalmin[2]=t_out2; + evalmin[3]= t_out3; + t_min=100; + for (int i=0; i<4; i++ ) { if(t_min > evalmin[i]) { t_min= evalmin[i]; mini=i; @@ -89,7 +104,8 @@ //Ahora se analiza el evento de minimo tiempo y se aplican los cambios switch (mini) { - case 1: + case 0: + //pc.printf("Arriving\r\n"); 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 @@ -100,17 +116,20 @@ C_Q3[k] = C_Q3[k-1]; //Q3 permanece igual } break; - case 2: //La salida de la cola 1 es primero + case 1: //La salida de la cola 1 es primero + //pc.printf("Leaving 1\r\n"); 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 + case 2: //La salida de la cola 2 es primero + //pc.printf("Leaving 2\r\n"); 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: + case 3: + //pc.printf("Leaving 3\r\n"); 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 @@ -119,8 +138,33 @@ C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual } break; + default: + pc.printf("Error\r\n"); + //mini=0; + break; } - pc.printf("%.2f \r\n ",C_Q1[k]); + //pc.printf("T actual: %f\r\n",t); + //pc.printf("Tiempo min: %f \r\n",t_min); + //pc.printf("Ind min: %d \r\n",mini); + // pc.printf("Cola 1: %d \r\n",C_Q1[k]); + // pc.printf("Cola 2: %d \r\n",C_Q2[k]); + //pc.printf("Cola 3: %d \r\n",C_Q3[k]); + //pc.printf("Arrival: %.2f \r\n ",t_arrival); + //pc.printf("T_1: %.2f \r\n ",t_out1); + //pc.printf("T_2: %.2f \r\n ",t_out2); + //pc.printf("T_3: %.2f \r\n ",t_out3); + // pc.printf("-------------- \r\n"); + suma1=suma1+C_Q1[k]; + suma2=suma1+C_Q2[k]; + suma3=suma1+C_Q3[k]; } + mean1=suma1/total; + mean2=suma2/total; + mean3=suma3/total; + meanT = mean1+mean2+mean3; + pc.printf("Media Cola 1: %f \r\n",mean1); + pc.printf("Media Cola 2: %f \r\n",mean2); + pc.printf("Media Cola 2: %f \r\n",mean3); + pc.printf("Media Total : %f \r\n",meanT); }