Simulaciones Computacionales / Mbed 2 deprecated Proyecto_3_simulacionesC

Dependencies:   mbed

Committer:
canrilo
Date:
Mon Nov 16 15:49:34 2015 +0000
Revision:
2:789421c43e73
Parent:
1:6e6574fdb585
Child:
3:2191cc27f1c4
Versi?n Final sin vectores;

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
canrilo 2:789421c43e73 14 const int total =30000;
canrilo 2:789421c43e73 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
canrilo 2:789421c43e73 19 int C_Q1=0; //Log de N�mero de paquetes en la cola Q1
canrilo 2:789421c43e73 20 int C_Q2=0; //Log de N�mero de paquetes en la cola Q2
canrilo 2:789421c43e73 21 int C_Q3=0; //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
canrilo 2:789421c43e73 70 if (C_Q1>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 }
canrilo 2:789421c43e73 75 if (C_Q2>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 }
canrilo 2:789421c43e73 80 if (C_Q3>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
canrilo 2:789421c43e73 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) {
canrilo 2:789421c43e73 110 C_Q1 = C_Q1+1; //Entra a Q1
canrilo 2:789421c43e73 111 C_Q2 = C_Q2; //Q2 permanece igual
canrilo 2:789421c43e73 112 C_Q3 = C_Q3; //Q3 permanece igual
JhonToroM 0:9204c5565a45 113 } else {
canrilo 2:789421c43e73 114 C_Q2 = C_Q2+1; //Entra a Q2
canrilo 2:789421c43e73 115 C_Q1 = C_Q1; //Q1 permanece igual
canrilo 2:789421c43e73 116 C_Q3 = C_Q3; //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");
canrilo 2:789421c43e73 121 C_Q1 = C_Q1-1; //Sale de Q1
canrilo 2:789421c43e73 122 C_Q3 = C_Q3+1; //Entra a Q3
canrilo 2:789421c43e73 123 C_Q2 = C_Q2; //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");
canrilo 2:789421c43e73 127 C_Q2 = C_Q2-1; //Sale de Q2
canrilo 2:789421c43e73 128 C_Q3 = C_Q3+1; //Entra a Q3
canrilo 2:789421c43e73 129 C_Q1 = C_Q1; //Q1 permanece igual
JhonToroM 0:9204c5565a45 130 break;
JhonToroM 1:6e6574fdb585 131 case 3:
JhonToroM 1:6e6574fdb585 132 //pc.printf("Leaving 3\r\n");
canrilo 2:789421c43e73 133 C_Q3 = C_Q3-1; //Sale de Q3
canrilo 2:789421c43e73 134 C_Q2 = C_Q2; //Q2 permanece igual
JhonToroM 0:9204c5565a45 135 if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1
canrilo 2:789421c43e73 136 C_Q1 = C_Q1+1; //Entra a Q1
JhonToroM 0:9204c5565a45 137 } else {
canrilo 2:789421c43e73 138 C_Q1 = C_Q1; //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");
canrilo 2:789421c43e73 157 suma1=suma1+C_Q1;
canrilo 2:789421c43e73 158 suma2=suma1+C_Q2;
canrilo 2:789421c43e73 159 suma3=suma1+C_Q3;
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 }