Simulaciones Computacionales / Mbed 2 deprecated Proyecto_3_simulacionesC

Dependencies:   mbed

Committer:
JhonToroM
Date:
Mon Nov 16 03:30:45 2015 +0000
Revision:
0:9204c5565a45
Child:
1:6e6574fdb585
finaL?

Who changed what in which revision?

UserRevisionLine numberNew 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 }