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 03:30:45 2015 +0000
Child:
1:6e6574fdb585
Commit message:
finaL?

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Nov 16 03:30:45 2015 +0000
@@ -0,0 +1,126 @@
+#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
+
+int 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
+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
+
+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
+
+float evalmin[4] = {t_arrival , t_out1 , t_out2 , t_out3};
+
+float a=1103515245;
+float m=4294967295;
+int c=12345;
+float x=100;
+float u=x/m;
+
+// RANDOM
+double r_unif(void)
+{
+    x= (a*x+c)-m*floor((a*x+c)/m);
+    u=x/m;
+    return u;
+}
+
+// RANDOM EXPONENCIAL
+double r_exp(float mu)
+{
+    double temp=-mu*log(r_unif());
+    return temp;
+}
+
+
+
+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);
+        } else {
+            t_out1=t_arrival+1;
+        }
+        if (C_Q2[k]>0) {
+            t_out2= r_exp(1/mu_q2);
+        } else {
+            t_out2=t_arrival+1;
+        }
+        if (C_Q3[k]>0)  {
+            t_out3= r_exp(1/mu_q3);
+        } else {
+            t_out3=t_arrival+1;
+        }
+
+//Se calcula el evento que pasara primero
+        int i;
+        for (i=0; i<4; i++ ) {
+            if(t_min > evalmin[i]) {
+                t_min= evalmin[i];
+                mini=i;
+            }
+        }
+
+// Se actualiza el vector de tiempos
+        t=t+t_min;
+//Se actualiza el log de eventos
+        Vt[k]=t;
+
+//Ahora se analiza el evento de minimo tiempo y se aplican los cambios
+
+        switch (mini) {
+            case 1:
+                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
+                    C_Q3[k] = C_Q3[k-1];    //Q3 permanece igual
+                } else {
+                    C_Q2[k] = C_Q2[k-1]+1;  //Entra a Q2
+                    C_Q1[k] = C_Q1[k-1];   //Q1 permanece igual
+                    C_Q3[k] = C_Q3[k-1];   //Q3 permanece igual
+                }
+                break;
+            case 2:             //La salida de la cola 1 es primero
+                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
+                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:
+                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
+                    C_Q1[k] = C_Q1[k-1]+1; //Entra a Q1
+                } else {
+                    C_Q1[k] = C_Q1[k-1];    //Q1 permanece igual
+                }
+                break;
+        }
+        pc.printf("%.2f \r\n  ",C_Q1[k]);
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Nov 16 03:30:45 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9296ab0bfc11
\ No newline at end of file