Ejemplo n.º 1
0
        public void PreparaCenario(List <Cenario> cenarios, ParametrosPerna[] parametrosPernas, ParametrosPernaCenario[] parametrosPernasCenario, int perna)
        {
            ParametrosPerna parametrosPerna = parametrosPernas[perna];

            if (perna < parametrosPernas.Length - 1)
            {
                List <Task>            tasks            = new List <Task>();
                List <List <Cenario> > cenariosPorTasks = new List <List <Cenario> >();

                for (decimal x = parametrosPerna.MinX; x <= parametrosPerna.MaxX; x = decimal.Add(x, 0.01m))
                {
                    parametrosPernasCenario[perna].X = x;

                    if (perna == 0)
                    {
                        ParametrosPernaCenario[] parametrosPernasNovoCenario = new ParametrosPernaCenario[parametrosPernas.Length];

                        for (int i = 0; i < parametrosPernas.Length; i++)
                        {
                            parametrosPernasNovoCenario[i] = new ParametrosPernaCenario(parametrosPernasCenario[i]);
                        }

                        /// Cada task tem uma lista de cenários, para evitar problemas de concorrência
                        List <Cenario> cenariosPorTask = new List <Cenario>();
                        cenariosPorTasks.Add(cenariosPorTask);

                        Task task = Task.Run(() => PreparaCenario(cenariosPorTask, parametrosPernas, parametrosPernasNovoCenario, perna + 1));

                        tasks.Add(task);
                    }
                    else
                    {
                        PreparaCenario(cenarios, parametrosPernas, parametrosPernasCenario, perna + 1);
                    }
                }

                if (tasks.Count > 0)
                {
                    Task.WaitAll(tasks.ToArray());

                    foreach (List <Cenario> cenariosPorTask in cenariosPorTasks)
                    {
                        cenarios.AddRange(cenariosPorTask);
                    }
                }
            }
            else
            {
                Cenario cenario = new Cenario(parametrosPernasCenario);

                cenario = CalculaUltimaPernaCenario(parametrosPernas, cenario, perna);

                if (cenario != null)
                {
                    cenario = CalculaCenario(cenario);

                    cenarios.Add(cenario);
                }
            }
        }
Ejemplo n.º 2
0
        public void PreparaCenarios(List <Cenario> cenarios, ParametrosPerna[] parametrosPernas)
        {
            ParametrosPernaCenario[] parametrosPernasCenario = new ParametrosPernaCenario[parametrosPernas.Length];

            for (int i = 0; i < parametrosPernas.Length; i++)
            {
                parametrosPernasCenario[i] = new ParametrosPernaCenario(parametrosPernas[i]);
            }

            PreparaCenario(cenarios, parametrosPernas, parametrosPernasCenario, 0);
        }
Ejemplo n.º 3
0
        public Cenario(ParametrosPernaCenario[] parametros)
        {
            if (parametros == null)
            {
                throw new ArgumentNullException(nameof(parametros));
            }

            Parametros = new ParametrosPernaCenario[parametros.Length];

            for (int i = 0; i < parametros.Length; i++)
            {
                Parametros[i] = new ParametrosPernaCenario(parametros[i]);
            }
            ;
        }
 public ParametrosPernaCenario(ParametrosPernaCenario source)
 {
     X         = source.X;
     PrecoExec = source.PrecoExec;
     Vega      = source.Vega;
 }