Simulaciones Computacionales / Mbed 2 deprecated Proyecto_3_simulacionesC

Dependencies:   mbed

Committer:
gcorderop
Date:
Sat Nov 28 06:46:41 2015 +0000
Revision:
4:2c93a9f6c9fd
Parent:
3:2191cc27f1c4
final sin push button

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
gcorderop 4:2c93a9f6c9fd 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
gcorderop 4:2c93a9f6c9fd 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
gcorderop 4:2c93a9f6c9fd 33 double a=16807.0;
gcorderop 4:2c93a9f6c9fd 34 double m=2147483646.0;
gcorderop 4:2c93a9f6c9fd 35 int c=0;
gcorderop 4:2c93a9f6c9fd 36 double x=72841.0; //semilla, cualquier numero entre 0 y m
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;
gcorderop 4:2c93a9f6c9fd 46 double meanT = 0;
gcorderop 4:2c93a9f6c9fd 47
gcorderop 4:2c93a9f6c9fd 48 double uti1 = 0;
gcorderop 4:2c93a9f6c9fd 49 double uti2 = 0;
gcorderop 4:2c93a9f6c9fd 50 double uti3 = 0;
gcorderop 4:2c93a9f6c9fd 51
gcorderop 4:2c93a9f6c9fd 52
JhonToroM 0:9204c5565a45 53
JhonToroM 0:9204c5565a45 54 // RANDOM
JhonToroM 0:9204c5565a45 55 double r_unif(void)
JhonToroM 0:9204c5565a45 56 {
JhonToroM 0:9204c5565a45 57 x= (a*x+c)-m*floor((a*x+c)/m);
JhonToroM 0:9204c5565a45 58 u=x/m;
JhonToroM 0:9204c5565a45 59 return u;
JhonToroM 0:9204c5565a45 60 }
JhonToroM 0:9204c5565a45 61
JhonToroM 0:9204c5565a45 62 // RANDOM EXPONENCIAL
JhonToroM 1:6e6574fdb585 63 double r_exp(double mu)
JhonToroM 0:9204c5565a45 64 {
JhonToroM 0:9204c5565a45 65 double temp=-mu*log(r_unif());
JhonToroM 0:9204c5565a45 66 return temp;
JhonToroM 0:9204c5565a45 67 }
JhonToroM 0:9204c5565a45 68
JhonToroM 0:9204c5565a45 69
JhonToroM 0:9204c5565a45 70
JhonToroM 0:9204c5565a45 71 int main()
JhonToroM 0:9204c5565a45 72 {
JhonToroM 0:9204c5565a45 73 pc.baud(115200);
JhonToroM 1:6e6574fdb585 74
JhonToroM 1:6e6574fdb585 75 for(k=1; k<total; k++) {
JhonToroM 1:6e6574fdb585 76 t_arrival= r_exp(1.0/lamb); //Tiempo de llegada del siguiente paquete
canrilo 2:789421c43e73 77 if (C_Q1>0) {
JhonToroM 1:6e6574fdb585 78 t_out1= r_exp(1.0/mu_q1);
JhonToroM 0:9204c5565a45 79 } else {
JhonToroM 1:6e6574fdb585 80 t_out1=t_arrival+1.0;
JhonToroM 0:9204c5565a45 81 }
canrilo 2:789421c43e73 82 if (C_Q2>0) {
JhonToroM 1:6e6574fdb585 83 t_out2= r_exp(1.0/mu_q2);
JhonToroM 0:9204c5565a45 84 } else {
JhonToroM 1:6e6574fdb585 85 t_out2=t_arrival+1.0;
JhonToroM 0:9204c5565a45 86 }
canrilo 2:789421c43e73 87 if (C_Q3>0) {
JhonToroM 1:6e6574fdb585 88 t_out3= r_exp(1.0/mu_q3);
JhonToroM 0:9204c5565a45 89 } else {
JhonToroM 1:6e6574fdb585 90 t_out3=t_arrival+1.0;
JhonToroM 0:9204c5565a45 91 }
JhonToroM 0:9204c5565a45 92
JhonToroM 0:9204c5565a45 93 //Se calcula el evento que pasara primero
JhonToroM 1:6e6574fdb585 94 evalmin[0]=t_arrival;
JhonToroM 1:6e6574fdb585 95 evalmin[1]= t_out1;
JhonToroM 1:6e6574fdb585 96 evalmin[2]=t_out2;
JhonToroM 1:6e6574fdb585 97 evalmin[3]= t_out3;
JhonToroM 1:6e6574fdb585 98 t_min=100;
JhonToroM 1:6e6574fdb585 99 for (int i=0; i<4; i++ ) {
gcorderop 4:2c93a9f6c9fd 100 if (t_min > evalmin[i]) {
JhonToroM 0:9204c5565a45 101 t_min= evalmin[i];
JhonToroM 0:9204c5565a45 102 mini=i;
JhonToroM 0:9204c5565a45 103 }
JhonToroM 0:9204c5565a45 104 }
gcorderop 4:2c93a9f6c9fd 105
JhonToroM 0:9204c5565a45 106 // Se actualiza el vector de tiempos
canrilo 3:2191cc27f1c4 107 t_ant=t;
JhonToroM 0:9204c5565a45 108 t=t+t_min;
JhonToroM 0:9204c5565a45 109 //Se actualiza el log de eventos
canrilo 2:789421c43e73 110 //Vt[k]=t;
JhonToroM 0:9204c5565a45 111
JhonToroM 0:9204c5565a45 112 //Ahora se analiza el evento de minimo tiempo y se aplican los cambios
JhonToroM 0:9204c5565a45 113
JhonToroM 0:9204c5565a45 114 switch (mini) {
JhonToroM 1:6e6574fdb585 115 case 0:
JhonToroM 1:6e6574fdb585 116 //pc.printf("Arriving\r\n");
JhonToroM 0:9204c5565a45 117 if (r_unif() >= P) {
canrilo 2:789421c43e73 118 C_Q1 = C_Q1+1; //Entra a Q1
canrilo 2:789421c43e73 119 C_Q2 = C_Q2; //Q2 permanece igual
canrilo 2:789421c43e73 120 C_Q3 = C_Q3; //Q3 permanece igual
JhonToroM 0:9204c5565a45 121 } else {
canrilo 2:789421c43e73 122 C_Q2 = C_Q2+1; //Entra a Q2
canrilo 2:789421c43e73 123 C_Q1 = C_Q1; //Q1 permanece igual
canrilo 2:789421c43e73 124 C_Q3 = C_Q3; //Q3 permanece igual
JhonToroM 0:9204c5565a45 125 }
JhonToroM 0:9204c5565a45 126 break;
JhonToroM 1:6e6574fdb585 127 case 1: //La salida de la cola 1 es primero
JhonToroM 1:6e6574fdb585 128 //pc.printf("Leaving 1\r\n");
canrilo 2:789421c43e73 129 C_Q1 = C_Q1-1; //Sale de Q1
canrilo 2:789421c43e73 130 C_Q3 = C_Q3+1; //Entra a Q3
canrilo 2:789421c43e73 131 C_Q2 = C_Q2; //Q2 permanece igual
JhonToroM 0:9204c5565a45 132 break;
JhonToroM 1:6e6574fdb585 133 case 2: //La salida de la cola 2 es primero
JhonToroM 1:6e6574fdb585 134 //pc.printf("Leaving 2\r\n");
canrilo 2:789421c43e73 135 C_Q2 = C_Q2-1; //Sale de Q2
canrilo 2:789421c43e73 136 C_Q3 = C_Q3+1; //Entra a Q3
canrilo 2:789421c43e73 137 C_Q1 = C_Q1; //Q1 permanece igual
JhonToroM 0:9204c5565a45 138 break;
JhonToroM 1:6e6574fdb585 139 case 3:
JhonToroM 1:6e6574fdb585 140 //pc.printf("Leaving 3\r\n");
canrilo 2:789421c43e73 141 C_Q3 = C_Q3-1; //Sale de Q3
canrilo 2:789421c43e73 142 C_Q2 = C_Q2; //Q2 permanece igual
JhonToroM 0:9204c5565a45 143 if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1
canrilo 2:789421c43e73 144 C_Q1 = C_Q1+1; //Entra a Q1
JhonToroM 0:9204c5565a45 145 } else {
canrilo 2:789421c43e73 146 C_Q1 = C_Q1; //Q1 permanece igual
JhonToroM 0:9204c5565a45 147 }
JhonToroM 0:9204c5565a45 148 break;
JhonToroM 1:6e6574fdb585 149 default:
JhonToroM 1:6e6574fdb585 150 pc.printf("Error\r\n");
JhonToroM 1:6e6574fdb585 151 //mini=0;
JhonToroM 1:6e6574fdb585 152 break;
JhonToroM 0:9204c5565a45 153 }
JhonToroM 1:6e6574fdb585 154 //pc.printf("T actual: %f\r\n",t);
JhonToroM 1:6e6574fdb585 155 //pc.printf("Tiempo min: %f \r\n",t_min);
JhonToroM 1:6e6574fdb585 156 //pc.printf("Ind min: %d \r\n",mini);
JhonToroM 1:6e6574fdb585 157 // pc.printf("Cola 1: %d \r\n",C_Q1[k]);
JhonToroM 1:6e6574fdb585 158 // pc.printf("Cola 2: %d \r\n",C_Q2[k]);
JhonToroM 1:6e6574fdb585 159 //pc.printf("Cola 3: %d \r\n",C_Q3[k]);
JhonToroM 1:6e6574fdb585 160 //pc.printf("Arrival: %.2f \r\n ",t_arrival);
JhonToroM 1:6e6574fdb585 161 //pc.printf("T_1: %.2f \r\n ",t_out1);
JhonToroM 1:6e6574fdb585 162 //pc.printf("T_2: %.2f \r\n ",t_out2);
JhonToroM 1:6e6574fdb585 163 //pc.printf("T_3: %.2f \r\n ",t_out3);
JhonToroM 1:6e6574fdb585 164 // pc.printf("-------------- \r\n");
canrilo 3:2191cc27f1c4 165 //suma1=suma1+C_Q1;
canrilo 3:2191cc27f1c4 166 //suma2=suma1+C_Q2;
canrilo 3:2191cc27f1c4 167 //suma3=suma1+C_Q3;
canrilo 3:2191cc27f1c4 168 mean1=(mean1*t_ant+C_Q1*(t-t_ant))/t;
canrilo 3:2191cc27f1c4 169 mean2=(mean2*t_ant+C_Q2*(t-t_ant))/t;
canrilo 3:2191cc27f1c4 170 mean3=(mean3*t_ant+C_Q3*(t-t_ant))/t;
gcorderop 4:2c93a9f6c9fd 171
gcorderop 4:2c93a9f6c9fd 172 if (C_Q1==0) {
gcorderop 4:2c93a9f6c9fd 173 uti1 = uti1 + (t-t_ant);
gcorderop 4:2c93a9f6c9fd 174 }
gcorderop 4:2c93a9f6c9fd 175 if (C_Q2==0) {
gcorderop 4:2c93a9f6c9fd 176 uti2 = uti2 + (t-t_ant);
gcorderop 4:2c93a9f6c9fd 177 }
gcorderop 4:2c93a9f6c9fd 178 if (C_Q3==0) {
gcorderop 4:2c93a9f6c9fd 179 uti3 = uti3 + (t-t_ant);
gcorderop 4:2c93a9f6c9fd 180 }
gcorderop 4:2c93a9f6c9fd 181
JhonToroM 0:9204c5565a45 182 }
canrilo 3:2191cc27f1c4 183
canrilo 3:2191cc27f1c4 184 //mean2=suma2/total;
canrilo 3:2191cc27f1c4 185 //mean3=suma3/total;
gcorderop 4:2c93a9f6c9fd 186 meanT = mean1+mean2+mean3;
gcorderop 4:2c93a9f6c9fd 187 uti1 = 1-uti1/t;
gcorderop 4:2c93a9f6c9fd 188 uti2 = 1-uti2/t;
gcorderop 4:2c93a9f6c9fd 189 uti3 = 1-uti3/t;
gcorderop 4:2c93a9f6c9fd 190
JhonToroM 0:9204c5565a45 191
JhonToroM 1:6e6574fdb585 192 pc.printf("Media Cola 1: %f \r\n",mean1);
JhonToroM 1:6e6574fdb585 193 pc.printf("Media Cola 2: %f \r\n",mean2);
gcorderop 4:2c93a9f6c9fd 194 pc.printf("Media Cola 3: %f \r\n",mean3);
JhonToroM 1:6e6574fdb585 195 pc.printf("Media Total : %f \r\n",meanT);
gcorderop 4:2c93a9f6c9fd 196 pc.printf("Utilizacion Cola 1: %f \r\n",uti1);
gcorderop 4:2c93a9f6c9fd 197 pc.printf("Utilizacion Cola 2: %f \r\n",uti2);
gcorderop 4:2c93a9f6c9fd 198 pc.printf("Utilizacion Cola 3: %f \r\n",uti3);
gcorderop 4:2c93a9f6c9fd 199 pc.printf("Tiempo medio Cola 1: %f \r\n",mean1/(lamb*0.5+mu_q3*S));
gcorderop 4:2c93a9f6c9fd 200 pc.printf("Tiempo medio Cola 2: %f \r\n",mean2/(lamb*0.5));
gcorderop 4:2c93a9f6c9fd 201 pc.printf("Tiempo medio Cola 3: %f \r\n",mean3/(mu_q1+mu_q2));
gcorderop 4:2c93a9f6c9fd 202 pc.printf("Tiempo medio de todo el sistema : %f \r\n",meanT/lamb);
JhonToroM 0:9204c5565a45 203 }