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:
- 1:6e6574fdb585
- Parent:
- 0:9204c5565a45
- Child:
- 2:789421c43e73
File content as of revision 1:6e6574fdb585:
#include "mbed.h" #include <math.h> Serial pc(USBTX, USBRX); 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 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) 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[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]; double a=1103515245; double m=4294967295; int c=12345; double x=10; double u=x/m; int suma1 = 0; int suma2 = 0; int suma3 = 0; double mean1 = 0; double mean2 = 0; double mean3 = 0; double meanT = 0; // 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(double mu) { double temp=-mu*log(r_unif()); return temp; } int main() { pc.baud(115200); 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.0; } if (C_Q2[k-1]>0) { t_out2= r_exp(1.0/mu_q2); } else { t_out2=t_arrival+1.0; } if (C_Q3[k-1]>0) { t_out3= r_exp(1.0/mu_q3); } else { t_out3=t_arrival+1.0; } //Se calcula el evento que pasara primero 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; } } // 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 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 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 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 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 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 C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1 } else { C_Q1[k] = C_Q1[k-1]; //Q1 permanece igual } break; default: pc.printf("Error\r\n"); //mini=0; break; } //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); }