Sim-LIT  2.0
 All Classes Namespaces Files Functions Variables Typedefs
ChannelErlang.h
Go to the documentation of this file.
1 
10 #ifndef CLASS_CHANNELERLANG
11 #define CLASS_CHANNELERLANG
12 
13 #include <iostream>
14 #include <string>
15 #include <vector>
16 #include "Package.h"
17 #include "Channel.h"
18 
19 class ChannelErlang: public Channel{
20 
21 public:
22 
23  ChannelErlang(vector<string> extras){
24  /*
25  * @brief Constructor de la clase Erlang
26  * @param ext argumentos que serán asignados al simulador
27  */
28  this->setExtras(extras);
29  }
30 
31  vector<Package> simulate(vector<Package> list){
32  /*
33  * @brief Método que realiza la simulación utilizando la Distribución de probabilidad de Erlang
34  * @param list lista con los paquetes que serán simulados
35  * @return lista con los paquetes que llegaron a destino
36  */
37  int size = list.size();
38  vector<string> ext = this->getExtras();
39  if(ext.size()==0)
40  return list;
41  int N = atoi(ext[0].c_str());
42  int lambda = atoi(ext[1].c_str());
43  for (int i = 0; i < size; i = i+1){
44  if(erlang(N,lambda/(list.size()-i))>0.5)
45  list = deletePackageById(i,list);
46  }
47  return list;
48  }
49 
50 private:
51 
52  vector<Package> deletePackageById(int ID, vector<Package> list){
53  /*
54  * @brief Método que elimina un Paquete de la lista por su ID
55  * @param ID identificador del paquete que se eliminará
56  * @param list Lista de Paquetes del cual se eliminará uno por el ID
57  * @return list
58  */
59  for (int i = 0; i < list.size(); i++)
60  {
61  if(list[i].getID()==ID){
62  list.erase(list.begin()+i);
63  i--;
64  }
65  }
66  return list;
67  }
68 
69  double erlang(int N, int A){
70  /*
71  * @brief Método Calcula el valor de Erlang sobre un determinado Valor
72  * @param A cantidad total de tráfico ofrecido en erlangs
73  * @param N es el número de recursos tales como servidores o circuitos en un grupo
74  * @return double el valor calculado de Erlang
75  */
76  double num, den;
77  num = (pow(A,N))/(factorial(N));
78  den = 0;
79  for(int i=0;i<N;i=i+1){
80  den = den + (pow(A,i)/factorial(i));
81  }
82  return num/den;
83  }
84 
85  double factorial(int x){
86  if(x<=0)
87  return 1;
88  return x*factorial(x-1);
89  }
90 
91  double pow(int a, int b){
92  if(b<=0)
93  return 1;
94  return a*pow(a,b-1);
95  }
96 };
97 
98 #endif
Clase que representa el Simulador utilizando Erlang.
Definition: ChannelErlang.h:19
Clase Abstracta que representa el Simulador de pérdida de paquetes.
Definition: Channel.h:16