Simulaciones Computacionales / Mbed 2 deprecated Proyecto_3_simulacionesC

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
JhonToroM
Date:
Mon Nov 16 15:42:20 2015 +0000
Parent:
0:9204c5565a45
Child:
2:789421c43e73
Commit message:
?ltimo c?digo

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Nov 16 03:30:45 2015 +0000
+++ b/main.cpp	Mon Nov 16 15:42:20 2015 +0000
@@ -1,38 +1,48 @@
 #include "mbed.h"
 #include <math.h>
 Serial pc(USBTX, USBRX);
-int mu_q1 = 8;           //Tasa de servicio de Cola Q1
-int mu_q2 = 3*3;         //Tasa de servicio de Cola Q2 *3 por n�mero de servidores
-int mu_q3 = 15;          //Tasa de servicio de Cola Q3
+double mu_q1 = 8;           //Tasa de servicio de Cola Q1
+double mu_q2 = 3*3;         //Tasa de servicio de Cola Q2 *3 por n�mero de servidores
+double mu_q3 = 15;          //Tasa de servicio de Cola Q3
 
-int lamb = 10;           //Tasa de llegada de paquetes
+double lamb = 10;           //Tasa de llegada de paquetes
 
 float P = 0.5;           //Probabilidad de llegada a Q2 (vs. Q1)
 float S = 0.1;           //Probabilidad de llegada a Q1 (vs. Salida)
 
-float t=0;               //Inicializaci�n del tiempo actual
-float Vt[]= {};             //Vector de tiempos de eventos
-int k=1;                 //Indice de los eventos ocurridos
+double t=0;               //Inicializaci�n del tiempo actual
+const int total =700;
+double Vt[total];             //Vector de tiempos de eventos
+int k = 1;                 //Indice de los eventos ocurridos
 float Tf=1000;           //Tiempo m�ximo de simulaci�n
 
-int C_Q1[]= {};             //Log de N�mero de paquetes en la cola Q1
-int C_Q2[]= {};             //Log de N�mero de paquetes en la cola Q2
-int C_Q3[]= {};             //Log de N�mero de paquetes en la cola Q3
+int C_Q1[total];             //Log de N�mero de paquetes en la cola Q1
+int C_Q2[total];             //Log de N�mero de paquetes en la cola Q2
+int C_Q3[total];             //Log de N�mero de paquetes en la cola Q3
+
+double t_arrival=0;       //Tiempo de llegada de paquetes
+double t_out1=0;          //Tiempo de salida de la cola Q1
+double t_out2=0;          //Tiempo de salida de la cola Q2
+double t_out3=0;          //Tiempo de salida de la cola Q3
+double t_min=10000;           //Variable auxiliar
+int mini=100;            //Variable auxiliar
+
+double evalmin[4];
 
-float t_arrival=0;       //Tiempo de llegada de paquetes
-float t_out1=0;          //Tiempo de salida de la cola Q1
-float t_out2=0;          //Tiempo de salida de la cola Q2
-float t_out3=0;          //Tiempo de salida de la cola Q3
-float t_min=0;           //Variable auxiliar
-int mini=100000;            //Variable auxiliar
+double a=1103515245;
+double m=4294967295;
+int c=12345;
+double x=10;
+double u=x/m;
 
-float evalmin[4] = {t_arrival , t_out1 , t_out2 , t_out3};
+int suma1 = 0; 
+int suma2 = 0; 
+int suma3 = 0;
 
-float a=1103515245;
-float m=4294967295;
-int c=12345;
-float x=100;
-float u=x/m;
+double mean1 = 0;
+double mean2 = 0;
+double mean3 = 0;
+double meanT = 0; 
 
 // RANDOM
 double r_unif(void)
@@ -43,7 +53,7 @@
 }
 
 // RANDOM EXPONENCIAL
-double r_exp(float mu)
+double r_exp(double mu)
 {
     double temp=-mu*log(r_unif());
     return temp;
@@ -54,27 +64,32 @@
 int main()
 {
     pc.baud(115200);
-    for(k=1; k<3000; k++) {
-        t_arrival= r_exp(1/lamb);  //Tiempo de llegada del siguiente paquete
-        if (C_Q1[k]>0) {
-            t_out1= r_exp(1/mu_q1);
+
+    for(k=1; k<total; k++) {
+        t_arrival= r_exp(1.0/lamb);  //Tiempo de llegada del siguiente paquete
+        if (C_Q1[k-1]>0) {
+            t_out1= r_exp(1.0/mu_q1);
         } else {
-            t_out1=t_arrival+1;
+            t_out1=t_arrival+1.0;
         }
-        if (C_Q2[k]>0) {
-            t_out2= r_exp(1/mu_q2);
+        if (C_Q2[k-1]>0) {
+            t_out2= r_exp(1.0/mu_q2);
         } else {
-            t_out2=t_arrival+1;
+            t_out2=t_arrival+1.0;
         }
-        if (C_Q3[k]>0)  {
-            t_out3= r_exp(1/mu_q3);
+        if (C_Q3[k-1]>0)  {
+            t_out3= r_exp(1.0/mu_q3);
         } else {
-            t_out3=t_arrival+1;
+            t_out3=t_arrival+1.0;
         }
 
 //Se calcula el evento que pasara primero
-        int i;
-        for (i=0; i<4; i++ ) {
+        evalmin[0]=t_arrival;
+        evalmin[1]= t_out1;
+        evalmin[2]=t_out2;
+        evalmin[3]= t_out3;
+        t_min=100;
+        for (int i=0; i<4; i++ ) {
             if(t_min > evalmin[i]) {
                 t_min= evalmin[i];
                 mini=i;
@@ -89,7 +104,8 @@
 //Ahora se analiza el evento de minimo tiempo y se aplican los cambios
 
         switch (mini) {
-            case 1:
+            case 0:
+                //pc.printf("Arriving\r\n");
                 if (r_unif() >= P) {
                     C_Q1[k] = C_Q1[k-1]+1;  //Entra a Q1
                     C_Q2[k] = C_Q2[k-1];    //Q2 permanece igual
@@ -100,17 +116,20 @@
                     C_Q3[k] = C_Q3[k-1];   //Q3 permanece igual
                 }
                 break;
-            case 2:             //La salida de la cola 1 es primero
+            case 1:             //La salida de la cola 1 es primero
+                //pc.printf("Leaving 1\r\n");
                 C_Q1[k] = C_Q1[k-1]-1;  //Sale de Q1
                 C_Q3[k] = C_Q3[k-1]+1;  //Entra a Q3
                 C_Q2[k] = C_Q2[k-1];    //Q2 permanece igual
                 break;
-            case 3:                  //La salida de la cola 2 es primero
+            case 2:                  //La salida de la cola 2 es primero
+                //pc.printf("Leaving 2\r\n");
                 C_Q2[k] = C_Q2[k-1]-1;      //Sale de Q2
                 C_Q3[k] = C_Q3[k-1]+1;      //Entra a Q3
                 C_Q1[k] = C_Q1[k-1];        //Q1 permanece igual
                 break;
-            case 4:
+            case 3:
+                //pc.printf("Leaving 3\r\n");
                 C_Q3[k] = C_Q3[k-1]-1;     //Sale de Q3
                 C_Q2[k] = C_Q2[k-1];       //Q2 permanece igual
                 if (r_unif()<S) {    //Distr. uniforme para calcular prob 0.1
@@ -119,8 +138,33 @@
                     C_Q1[k] = C_Q1[k-1];    //Q1 permanece igual
                 }
                 break;
+            default:
+                pc.printf("Error\r\n");
+                //mini=0;
+                break;
         }
-        pc.printf("%.2f \r\n  ",C_Q1[k]);
+        //pc.printf("T actual: %f\r\n",t);
+        //pc.printf("Tiempo min: %f \r\n",t_min);
+        //pc.printf("Ind min: %d \r\n",mini);
+       // pc.printf("Cola 1: %d \r\n",C_Q1[k]);
+       // pc.printf("Cola 2: %d \r\n",C_Q2[k]);
+        //pc.printf("Cola 3: %d \r\n",C_Q3[k]);
+        //pc.printf("Arrival: %.2f \r\n  ",t_arrival);
+        //pc.printf("T_1: %.2f \r\n  ",t_out1);
+        //pc.printf("T_2: %.2f \r\n  ",t_out2);
+        //pc.printf("T_3: %.2f \r\n  ",t_out3);
+       // pc.printf("-------------- \r\n");
+        suma1=suma1+C_Q1[k];
+        suma2=suma1+C_Q2[k];
+        suma3=suma1+C_Q3[k];
     }
+    mean1=suma1/total;
+    mean2=suma2/total;
+    mean3=suma3/total;
+    meanT = mean1+mean2+mean3;
     
+    pc.printf("Media Cola 1: %f \r\n",mean1);
+    pc.printf("Media Cola 2: %f \r\n",mean2);
+    pc.printf("Media Cola 2: %f \r\n",mean3);
+    pc.printf("Media Total : %f \r\n",meanT);
 }