Пример #1
0
 public SConnection(SActivity conn, Func <double> calc, double prob = 1.0)
 {
     Connection  = conn;
     CalcTS      = calc;
     Probability = prob;
 }
Пример #2
0
        static void Main(string[] args)
        {
            // Semente aleatória para o programa
            Random rand = new Random();

            // Tempo Servidor de Aplicações Interação 2
            Func <double> tSA2 = () =>
            {
                return(GetUniform(rand, 40, 60));
            };
            // Tempo Servidor de Aplicações Interação 3
            Func <double> tSA3 = () =>
            {
                return(GetUniform(rand, 60, 120));
            };

            // Tempo Servidor Web Interação 1
            Func <double> tSW1 = () =>
            {
                return(GetUniform(rand, 4, 6));
            };
            // Tempo Servidor Web Interação 2-2
            Func <double> tSW22 = () =>
            {
                return(GetUniform(rand, 5, 7));
            };
            // Tempo Servidor Web Interação 2-5
            Func <double> tSW25 = () =>
            {
                return(GetUniform(rand, 7, 10));
            };
            // Tempo Servidor Web Interação 3
            Func <double> tSW3 = () =>
            {
                return(GetUniform(rand, 9, 12));
            };

            // Tempo Banco de Dados
            Func <double> tBD = () =>
            {
                return(GetUniform(rand, 15, 30) + GetUniform(rand, 50, 400));
            };

            // Funções de Calcular tamanho
            Func <double> m1 = () =>
            {
                return(GetTriangular(rand, 100, 200, 250) * overHeadProtocolo);
            };
            Func <double> m2 = () =>
            {
                return(GetTriangular(rand, 100, 200, 300) * overHeadProtocolo);
            };
            Func <double> m3 = () =>
            {
                return(GetTriangular(rand, 250, 400, 450) * overHeadProtocolo);
            };
            Func <double> m4 = () =>
            {
                return(GetTriangular(rand, 1500, 2500, 3000) * overHeadProtocolo);
            };
            Func <double> m5 = () =>
            {
                return(GetTriangular(rand, 1500, 2100, 2800) * overHeadProtocolo);
            };
            Func <double> m6 = () =>
            {
                return(GetTriangular(rand, 400, 550, 800) * overHeadProtocolo);
            };
            Func <double> m7 = () =>
            {
                return(GetTriangular(rand, 2000, 3000, 3500) * overHeadProtocolo);
            };
            Func <double> m8 = () =>
            {
                return(GetTriangular(rand, 1800, 2000, 2300) * overHeadProtocolo);
            };
            Func <double> m9 = () =>
            {
                return(GetTriangular(rand, 1500, 2100, 2800) * overHeadProtocolo);
            };


            // Definição das Propriedades das Atividades
            var no1 = new SActivity {
                Nome = "Nó 1"
            };
            var no2 = new SActivity {
                Nome = "Nó 2"
            };
            var no3 = new SActivity {
                Nome = "Nó 3"
            };
            var no4 = new SActivity {
                Nome = "Nó 4"
            };
            var no5 = new SActivity {
                Nome = "Nó 5"
            };
            var no6 = new SActivity {
                Nome = "Nó 6"
            };
            var no7 = new SActivity {
                Nome = "Nó 7"
            };
            var no8 = new SActivity {
                Nome = "Nó 8"
            };
            var no9 = new SActivity {
                Nome = "Nó 9"
            };
            var no10 = new SActivity {
                Nome = "Nó 10"
            };

            // Definir as conexões entre os nós e a função de calcular o tempo de processamento em cada uma delas
            no1.AddConnection(new SConnection(no2, () =>
            {
                var tamanho = m1();
                return(GetTempoLan(tamanho) + aRoteador + GetTempoInternet(tamanho) + procCliente);
            }));

            // nó 2 - 0.05 de chance de ir para o nó 3 e 0.95 de ir para o nó 4
            no2.AddConnection(new SConnection(no3, () =>
            {
                var tamanho = m2();
                return(tSW1() + GetTempoLan(tamanho) + aRoteador + GetTempoInternet(tamanho) + procCliente);
            }, 0.05));
            no2.AddConnection(new SConnection(no4, () =>
            {
                var tamanho = m3();
                return(tSW22() + GetTempoLan(tamanho));
            }));

            // nó 4 - 0.2 de chance de ir para o nó 5 e 0.8 de ir para o nó 7
            no4.AddConnection(new SConnection(no5, () =>
            {
                var tamanho = m4();
                return(tSA2() + GetTempoLan(tamanho));
            }, 0.2));
            no4.AddConnection(new SConnection(no7, () =>
            {
                var tamanho = m6();
                return(tSA2() + GetTempoLan(tamanho));
            }));

            // nó 5 para nó 6
            no5.AddConnection(new SConnection(no6, () =>
            {
                var tamanho = m5();
                return(tSW25() + GetTempoLan(tamanho) + aRoteador + GetTempoInternet(tamanho) + procCliente);
            }));

            // nó 7 para nó 8
            no7.AddConnection(new SConnection(no8, () =>
            {
                var tamanho = m7();
                return(tBD() + GetTempoLan(tamanho));
            }));

            // nó 8 para nó 9
            no8.AddConnection(new SConnection(no9, () =>
            {
                var tamanho = m8();
                return(tSA3() + GetTempoLan(tamanho));
            }));

            // nó 9 para nó 10
            no9.AddConnection(new SConnection(no10, () =>
            {
                var tamanho = m9();
                return(tSW3() + GetTempoLan(tamanho) + aRoteador + GetTempoInternet(tamanho) + procCliente);
            }));

            // Gera os pacotes que serão simulados
            List <SItem> visitas = GerarEntrada(rand);

            // Preenche a fila de chegada do no1
            no1.PreencheEntrada(visitas);

            // Roda a Simulação
            no1.Run();

            // Evita que o console feche automaticamente
            Console.ReadKey();
        }