Simulaciones Computacionales / Mbed 2 deprecated Proyecto_3_simulacionesC

Dependencies:   mbed

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?

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