Funcionamiento push bottom con delay 300ms
Dependencies: mbed
Fork of Proyecto_3_simulacionesC by
main.cpp
00001 #include "mbed.h" 00002 #include <math.h> 00003 Serial pc(USBTX, USBRX); 00004 DigitalIn botton(PTD1); 00005 DigitalOut myled(LED1); 00006 double mu_q1 = 8.0; //Tasa de servicio de Cola Q1 00007 double mu_q2 = 3.0*3.0; //Tasa de servicio de Cola Q2 *3 por n�mero de servidores 00008 double mu_q3 = 15.0; //Tasa de servicio de Cola Q3 00009 00010 double lamb = 10.0; //Tasa de llegada de paquetes 00011 00012 float P = 0.5; //Probabilidad de llegada a Q2 (vs. Q1) 00013 float S = 0.1; //Probabilidad de llegada a Q1 (vs. Salida) 00014 00015 double t=0; //Inicializaci�n del tiempo actual 00016 double t_ant=0; //Inicializacion del tiempo anterior 00017 const int total =30000; 00018 //double Vt[total]; //Vector de tiempos de eventos 00019 int k = 1; //Indice de los eventos ocurridos 00020 float Tf=1000; //Tiempo m�ximo de simulaci�n 00021 00022 int C_Q1=0; //Log de N�mero de paquetes en la cola Q1 00023 int C_Q2=0; //Log de N�mero de paquetes en la cola Q2 00024 int C_Q3=0; //Log de N�mero de paquetes en la cola Q3 00025 00026 double t_arrival=0; //Tiempo de llegada de paquetes 00027 double t_out1=0; //Tiempo de salida de la cola Q1 00028 double t_out2=0; //Tiempo de salida de la cola Q2 00029 double t_out3=0; //Tiempo de salida de la cola Q3 00030 double t_min=10000; //Variable auxiliar 00031 int mini=100; //Variable auxiliar 00032 00033 double evalmin[4]; 00034 00035 double a=16807.0; 00036 double m=2147483646.0; 00037 int c=0.0; 00038 double x=72841.0; 00039 double u=x/m; 00040 00041 int suma1 = 0; 00042 int suma2 = 0; 00043 int suma3 = 0; 00044 00045 double mean1 = 0; 00046 double mean2 = 0; 00047 double mean3 = 0; 00048 double meanT = 0; 00049 00050 double uti1 = 0; 00051 double uti2 = 0; 00052 double uti3 = 0; 00053 // RANDOM 00054 double r_unif(void) 00055 { 00056 x= (a*x+c)-m*floor((a*x+c)/m); 00057 u=x/m; 00058 return u; 00059 } 00060 00061 // RANDOM EXPONENCIAL 00062 double r_exp(double mu) 00063 { 00064 double temp=-mu*log(r_unif()); 00065 return temp; 00066 } 00067 00068 int main() 00069 { 00070 pc.baud(115200); 00071 00072 for(k=1; k<total; k++) { 00073 //t_arrival= r_exp(1.0/lamb); //Tiempo de llegada del siguiente paquete 00074 if(C_Q1+C_Q2+C_Q3==0) 00075 while(botton); 00076 myled=botton; 00077 if(botton==0) { 00078 t_arrival=0.001; 00079 } else { 00080 t_arrival=10000; 00081 } 00082 if (C_Q1>0) { 00083 t_out1= r_exp(1.0/mu_q1); 00084 } else { 00085 t_out1=t_arrival+1.0; 00086 } 00087 if (C_Q2>0) { 00088 t_out2= r_exp(1.0/mu_q2); 00089 } else { 00090 t_out2=t_arrival+1.0; 00091 } 00092 if (C_Q3>0) { 00093 t_out3= r_exp(1.0/mu_q3); 00094 } else { 00095 t_out3=t_arrival+1.0; 00096 } 00097 00098 //Se calcula el evento que pasara primero 00099 evalmin[0]=t_arrival; 00100 evalmin[1]= t_out1; 00101 evalmin[2]=t_out2; 00102 evalmin[3]= t_out3; 00103 t_min=1000000; 00104 for (int i=0; i<4; i++ ) { 00105 if(t_min > evalmin[i]) { 00106 t_min= evalmin[i]; 00107 mini=i; 00108 } 00109 } 00110 00111 // Se actualiza el vector de tiempos 00112 t_ant=t; 00113 t=t+t_min; 00114 //Se actualiza el log de eventos 00115 //Vt[k]=t; 00116 00117 //Ahora se analiza el evento de minimo tiempo y se aplican los cambios 00118 00119 switch (mini) { 00120 case 0: 00121 //pc.printf("Arriving\r\n"); 00122 if (r_unif() >= P) { 00123 C_Q1 = C_Q1+1; //Entra a Q1 00124 C_Q2 = C_Q2; //Q2 permanece igual 00125 C_Q3 = C_Q3; //Q3 permanece igual 00126 } else { 00127 C_Q2 = C_Q2+1; //Entra a Q2 00128 C_Q1 = C_Q1; //Q1 permanece igual 00129 C_Q3 = C_Q3; //Q3 permanece igual 00130 } 00131 break; 00132 case 1: //La salida de la cola 1 es primero 00133 //pc.printf("Leaving 1\r\n"); 00134 C_Q1 = C_Q1-1; //Sale de Q1 00135 C_Q3 = C_Q3+1; //Entra a Q3 00136 C_Q2 = C_Q2; //Q2 permanece igual 00137 break; 00138 case 2: //La salida de la cola 2 es primero 00139 //pc.printf("Leaving 2\r\n"); 00140 C_Q2 = C_Q2-1; //Sale de Q2 00141 C_Q3 = C_Q3+1; //Entra a Q3 00142 C_Q1 = C_Q1; //Q1 permanece igual 00143 break; 00144 case 3: 00145 //pc.printf("Leaving 3\r\n"); 00146 C_Q3 = C_Q3-1; //Sale de Q3 00147 C_Q2 = C_Q2; //Q2 permanece igual 00148 if (r_unif()<S) { //Distr. uniforme para calcular prob 0.1 00149 C_Q1 = C_Q1+1; //Entra a Q1 00150 } else { 00151 C_Q1 = C_Q1; //Q1 permanece igual 00152 } 00153 break; 00154 default: 00155 pc.printf("Error\r\n"); 00156 //mini=0; 00157 break; 00158 } 00159 mean1=(mean1*t_ant+C_Q1*(t-t_ant))/t; 00160 mean2=(mean2*t_ant+C_Q2*(t-t_ant))/t; 00161 mean3=(mean3*t_ant+C_Q3*(t-t_ant))/t; 00162 meanT = mean1+mean2+mean3; 00163 00164 if (C_Q1 == 0) { 00165 uti1=uti1+t-t_ant; 00166 } 00167 00168 if (C_Q2 == 0) { 00169 uti2=uti2+t-t_ant; 00170 } 00171 00172 if (C_Q3 == 0) { 00173 uti3=uti3+t-t_ant; 00174 } 00175 wait_ms(300); 00176 pc.printf("Cola 1: %d \t",C_Q1); 00177 pc.printf("Cola 2: %d \t",C_Q2); 00178 pc.printf("Cola 3: %d \r\n",C_Q3); 00179 00180 } 00181 00182 00183 00184 uti1= 1 - uti1/t; 00185 uti2= 1-uti2/t; 00186 uti3= 1-uti3/t; 00187 00188 00189 pc.printf("Media Cola 1: %f \r\n",mean1); 00190 pc.printf("Media Cola 2: %f \r\n",mean2); 00191 pc.printf("Media Cola 3: %f \r\n",mean3); 00192 pc.printf("Media Total : %f \r\n",meanT); 00193 pc.printf("Tiempo promedio de utilizacion de cola 1: %f \r\n",uti1); 00194 pc.printf("Tiempo promedio de utilizacion de Cola 2 de no utilizacion: %f \r\n",uti2); 00195 pc.printf("Tiempo promedio de utilizacion de Cola 3 de no utilizacion: %f \r\n",uti3); 00196 pc.printf("Tiempo promedio de Tareas en la Cala 1 de no utilizacion: %f \r\n",mean1/(lamb*0.5+(0.1/mu_q1))); 00197 pc.printf("Tiempo promedio de Tareas en la Cala 2 de no utilizacion: %f \r\n",mean2/(0.5*lamb)); 00198 pc.printf("Tiempo promedio de Tareas en la Cala 3 de no utilizacion: %f \r\n",mean3/(1.0/mu_q1+1.0/mu_q2)); 00199 pc.printf("Tiempo medio de respuesta del sistema %f \r\n",meanT/lamb); 00200 }
Generated on Thu Jul 21 2022 20:17:24 by
1.7.2
