Simulaciones Computacionales / Mbed 2 deprecated Proyecto_3_simulacionesC

Dependencies:   mbed

Committer:
canrilo
Date:
Sat Nov 28 03:17:56 2015 +0000
Revision:
3:2191cc27f1c4
Parent:
2:789421c43e73
Child:
4:2c93a9f6c9fd
Nuevo m?todo de promedio de numero de colas

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 3:2191cc27f1c4 14 double t_ant=0; //Inicializacion del tiempo anterior
canrilo 2:789421c43e73 15 const int total =30000;
canrilo 2:789421c43e73 16 //double Vt[total]; //Vector de tiempos de eventos
JhonToroM 1:6e6574fdb585 17 int k = 1; //Indice de los eventos ocurridos
JhonToroM 0:9204c5565a45 18 float Tf=1000; //Tiempo m�ximo de simulaci�n
JhonToroM 0:9204c5565a45 19
canrilo 2:789421c43e73 20 int C_Q1=0; //Log de N�mero de paquetes en la cola Q1
canrilo 2:789421c43e73 21 int C_Q2=0; //Log de N�mero de paquetes en la cola Q2
canrilo 2:789421c43e73 22 int C_Q3=0; //Log de N�mero de paquetes en la cola Q3
JhonToroM 1:6e6574fdb585 23
JhonToroM 1:6e6574fdb585 24 double t_arrival=0; //Tiempo de llegada de paquetes
JhonToroM 1:6e6574fdb585 25 double t_out1=0; //Tiempo de salida de la cola Q1
JhonToroM 1:6e6574fdb585 26 double t_out2=0; //Tiempo de salida de la cola Q2
JhonToroM 1:6e6574fdb585 27 double t_out3=0; //Tiempo de salida de la cola Q3
JhonToroM 1:6e6574fdb585 28 double t_min=10000; //Variable auxiliar
JhonToroM 1:6e6574fdb585 29 int mini=100; //Variable auxiliar
JhonToroM 1:6e6574fdb585 30
JhonToroM 1:6e6574fdb585 31 double evalmin[4];
JhonToroM 0:9204c5565a45 32
JhonToroM 1:6e6574fdb585 33 double a=1103515245;
JhonToroM 1:6e6574fdb585 34 double m=4294967295;
JhonToroM 1:6e6574fdb585 35 int c=12345;
JhonToroM 1:6e6574fdb585 36 double x=10;
JhonToroM 1:6e6574fdb585 37 double u=x/m;
JhonToroM 0:9204c5565a45 38
JhonToroM 1:6e6574fdb585 39 int suma1 = 0;
JhonToroM 1:6e6574fdb585 40 int suma2 = 0;
JhonToroM 1:6e6574fdb585 41 int suma3 = 0;
JhonToroM 0:9204c5565a45 42
JhonToroM 1:6e6574fdb585 43 double mean1 = 0;
JhonToroM 1:6e6574fdb585 44 double mean2 = 0;
JhonToroM 1:6e6574fdb585 45 double mean3 = 0;
JhonToroM 1:6e6574fdb585 46 double meanT = 0;
JhonToroM 0:9204c5565a45 47
JhonToroM 0:9204c5565a45 48 // RANDOM
JhonToroM 0:9204c5565a45 49 double r_unif(void)
JhonToroM 0:9204c5565a45 50 {
JhonToroM 0:9204c5565a45 51 x= (a*x+c)-m*floor((a*x+c)/m);
JhonToroM 0:9204c5565a45 52 u=x/m;
JhonToroM 0:9204c5565a45 53 return u;
JhonToroM 0:9204c5565a45 54 }
JhonToroM 0:9204c5565a45 55
JhonToroM 0:9204c5565a45 56 // RANDOM EXPONENCIAL
JhonToroM 1:6e6574fdb585 57 double r_exp(double mu)
JhonToroM 0:9204c5565a45 58 {
JhonToroM 0:9204c5565a45 59 double temp=-mu*log(r_unif());
JhonToroM 0:9204c5565a45 60 return temp;
JhonToroM 0:9204c5565a45 61 }
JhonToroM 0:9204c5565a45 62
JhonToroM 0:9204c5565a45 63
JhonToroM 0:9204c5565a45 64
JhonToroM 0:9204c5565a45 65 int main()
JhonToroM 0:9204c5565a45 66 {
JhonToroM 0:9204c5565a45 67 pc.baud(115200);
JhonToroM 1:6e6574fdb585 68
JhonToroM 1:6e6574fdb585 69 for(k=1; k<total; k++) {
JhonToroM 1:6e6574fdb585 70 t_arrival= r_exp(1.0/lamb); //Tiempo de llegada del siguiente paquete
canrilo 2:789421c43e73 71 if (C_Q1>0) {
JhonToroM 1:6e6574fdb585 72 t_out1= r_exp(1.0/mu_q1);
JhonToroM 0:9204c5565a45 73 } else {
JhonToroM 1:6e6574fdb585 74 t_out1=t_arrival+1.0;
JhonToroM 0:9204c5565a45 75 }
canrilo 2:789421c43e73 76 if (C_Q2>0) {
JhonToroM 1:6e6574fdb585 77 t_out2= r_exp(1.0/mu_q2);
JhonToroM 0:9204c5565a45 78 } else {
JhonToroM 1:6e6574fdb585 79 t_out2=t_arrival+1.0;
JhonToroM 0:9204c5565a45 80 }
canrilo 2:789421c43e73 81 if (C_Q3>0) {
JhonToroM 1:6e6574fdb585 82 t_out3= r_exp(1.0/mu_q3);
JhonToroM 0:9204c5565a45 83 } else {
JhonToroM 1:6e6574fdb585 84 t_out3=t_arrival+1.0;
JhonToroM 0:9204c5565a45 85 }
JhonToroM 0:9204c5565a45 86
JhonToroM 0:9204c5565a45 87 //Se calcula el evento que pasara primero
JhonToroM 1:6e6574fdb585 88 evalmin[0]=t_arrival;
JhonToroM 1:6e6574fdb585 89 evalmin[1]= t_out1;
JhonToroM 1:6e6574fdb585 90 evalmin[2]=t_out2;
JhonToroM 1:6e6574fdb585 91 evalmin[3]= t_out3;
JhonToroM 1:6e6574fdb585 92 t_min=100;
JhonToroM 1:6e6574fdb585 93 for (int i=0; i<4; i++ ) {
JhonToroM 0:9204c5565a45 94 if(t_min > evalmin[i]) {
JhonToroM 0:9204c5565a45 95 t_min= evalmin[i];
JhonToroM 0:9204c5565a45 96 mini=i;
JhonToroM 0:9204c5565a45 97 }
JhonToroM 0:9204c5565a45 98 }
JhonToroM 0:9204c5565a45 99
JhonToroM 0:9204c5565a45 100 // Se actualiza el vector de tiempos
canrilo 3:2191cc27f1c4 101 t_ant=t;
JhonToroM 0:9204c5565a45 102 t=t+t_min;
JhonToroM 0:9204c5565a45 103 //Se actualiza el log de eventos
canrilo 2:789421c43e73 104 //Vt[k]=t;
JhonToroM 0:9204c5565a45 105
JhonToroM 0:9204c5565a45 106 //Ahora se analiza el evento de minimo tiempo y se aplican los cambios
JhonToroM 0:9204c5565a45 107
JhonToroM 0:9204c5565a45 108 switch (mini) {
JhonToroM 1:6e6574fdb585 109 case 0:
JhonToroM 1:6e6574fdb585 110 //pc.printf("Arriving\r\n");
JhonToroM 0:9204c5565a45 111 if (r_unif() >= P) {
canrilo 2:789421c43e73 112 C_Q1 = C_Q1+1; //Entra a Q1
canrilo 2:789421c43e73 113 C_Q2 = C_Q2; //Q2 permanece igual
canrilo 2:789421c43e73 114 C_Q3 = C_Q3; //Q3 permanece igual
JhonToroM 0:9204c5565a45 115 } else {
canrilo 2:789421c43e73 116 C_Q2 = C_Q2+1; //Entra a Q2
canrilo 2:789421c43e73 117 C_Q1 = C_Q1; //Q1 permanece igual
canrilo 2:789421c43e73 118 C_Q3 = C_Q3; //Q3 permanece igual
JhonToroM 0:9204c5565a45 119 }
JhonToroM 0:9204c5565a45 120 break;
JhonToroM 1:6e6574fdb585 121 case 1: //La salida de la cola 1 es primero
JhonToroM 1:6e6574fdb585 122 //pc.printf("Leaving 1\r\n");
canrilo 2:789421c43e73 123 C_Q1 = C_Q1-1; //Sale de Q1
canrilo 2:789421c43e73 124 C_Q3 = C_Q3+1; //Entra a Q3
canrilo 2:789421c43e73 125 C_Q2 = C_Q2; //Q2 permanece igual
JhonToroM 0:9204c5565a45 126 break;
JhonToroM 1:6e6574fdb585 127 case 2: //La salida de la cola 2 es primero
JhonToroM 1:6e6574fdb585 128 //pc.printf("Leaving 2\r\n");
canrilo 2:789421c43e73 129 C_Q2 = C_Q2-1; //Sale de Q2
canrilo 2:789421c43e73 130 C_Q3 = C_Q3+1; //Entra a Q3
canrilo 2:789421c43e73 131 C_Q1 = C_Q1; //Q1 permanece igual
JhonToroM 0:9204c5565a45 132 break;
JhonToroM 1:6e6574fdb585 133 case 3:
JhonToroM 1:6e6574fdb585 134 //pc.printf("Leaving 3\r\n");
canrilo 2:789421c43e73 135 C_Q3 = C_Q3-1; //Sale de Q3
canrilo 2:789421c43e73 136 C_Q2 = C_Q2; //Q2 permanece igual
JhonToroM 0:9204c5565a45 137 if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1
canrilo 2:789421c43e73 138 C_Q1 = C_Q1+1; //Entra a Q1
JhonToroM 0:9204c5565a45 139 } else {
canrilo 2:789421c43e73 140 C_Q1 = C_Q1; //Q1 permanece igual
JhonToroM 0:9204c5565a45 141 }
JhonToroM 0:9204c5565a45 142 break;
JhonToroM 1:6e6574fdb585 143 default:
JhonToroM 1:6e6574fdb585 144 pc.printf("Error\r\n");
JhonToroM 1:6e6574fdb585 145 //mini=0;
JhonToroM 1:6e6574fdb585 146 break;
JhonToroM 0:9204c5565a45 147 }
JhonToroM 1:6e6574fdb585 148 //pc.printf("T actual: %f\r\n",t);
JhonToroM 1:6e6574fdb585 149 //pc.printf("Tiempo min: %f \r\n",t_min);
JhonToroM 1:6e6574fdb585 150 //pc.printf("Ind min: %d \r\n",mini);
JhonToroM 1:6e6574fdb585 151 // pc.printf("Cola 1: %d \r\n",C_Q1[k]);
JhonToroM 1:6e6574fdb585 152 // pc.printf("Cola 2: %d \r\n",C_Q2[k]);
JhonToroM 1:6e6574fdb585 153 //pc.printf("Cola 3: %d \r\n",C_Q3[k]);
JhonToroM 1:6e6574fdb585 154 //pc.printf("Arrival: %.2f \r\n ",t_arrival);
JhonToroM 1:6e6574fdb585 155 //pc.printf("T_1: %.2f \r\n ",t_out1);
JhonToroM 1:6e6574fdb585 156 //pc.printf("T_2: %.2f \r\n ",t_out2);
JhonToroM 1:6e6574fdb585 157 //pc.printf("T_3: %.2f \r\n ",t_out3);
JhonToroM 1:6e6574fdb585 158 // pc.printf("-------------- \r\n");
canrilo 3:2191cc27f1c4 159 //suma1=suma1+C_Q1;
canrilo 3:2191cc27f1c4 160 //suma2=suma1+C_Q2;
canrilo 3:2191cc27f1c4 161 //suma3=suma1+C_Q3;
canrilo 3:2191cc27f1c4 162 mean1=(mean1*t_ant+C_Q1*(t-t_ant))/t;
canrilo 3:2191cc27f1c4 163 mean2=(mean2*t_ant+C_Q2*(t-t_ant))/t;
canrilo 3:2191cc27f1c4 164 mean3=(mean3*t_ant+C_Q3*(t-t_ant))/t;
JhonToroM 0:9204c5565a45 165 }
canrilo 3:2191cc27f1c4 166
canrilo 3:2191cc27f1c4 167 //mean2=suma2/total;
canrilo 3:2191cc27f1c4 168 //mean3=suma3/total;
canrilo 3:2191cc27f1c4 169 //meanT = mean1+mean2+mean3;
JhonToroM 0:9204c5565a45 170
JhonToroM 1:6e6574fdb585 171 pc.printf("Media Cola 1: %f \r\n",mean1);
JhonToroM 1:6e6574fdb585 172 pc.printf("Media Cola 2: %f \r\n",mean2);
JhonToroM 1:6e6574fdb585 173 pc.printf("Media Cola 2: %f \r\n",mean3);
JhonToroM 1:6e6574fdb585 174 pc.printf("Media Total : %f \r\n",meanT);
JhonToroM 0:9204c5565a45 175 }