示例#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);
                }
            }
        }
示例#2
0
        public void PreparaCenario(List <Cenario> cenarios, ParametrosPerna[] parametrosPernas, ParametrosPernaCenario[] parametrosPernasCenario, int perna)
        {
            ParametrosPerna parametrosPerna = parametrosPernas[perna];

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

                    PreparaCenario(cenarios, parametrosPernas, parametrosPernasCenario, perna + 1);
                }
            }
            else
            {
                Cenario cenario = new Cenario(parametrosPernasCenario);

                cenario = CalculaUltimaPernaCenario(parametrosPernas, cenario, perna);

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

                    cenarios.Add(cenario);
                }
            }
        }
示例#3
0
        static void Main(string[] args)
        {
            ParametrosPerna[] parametros = new ParametrosPerna[5];

            parametros[0] = new ParametrosPerna
            {
                MinX      = 0.18m,
                MaxX      = 0.38m,
                PrecoExec = 0.28m,
                Vega      = 0.05m
            };

            parametros[1] = new ParametrosPerna
            {
                MinX      = -1.22m,
                MaxX      = -0.82m,
                PrecoExec = -1.02m,
                Vega      = 0.05m
            };

            parametros[2] = new ParametrosPerna
            {
                MinX      = 0.14m,
                MaxX      = 0.34m,
                PrecoExec = 0.24m,
                Vega      = 0.05m
            };

            parametros[3] = new ParametrosPerna
            {
                MinX      = 0.10m,
                MaxX      = 0.30m,
                PrecoExec = 0.21m,
                Vega      = 0.05m
            };

            parametros[4] = new ParametrosPerna
            {
                MinX      = 0.20m,
                MaxX      = 0.40m,
                PrecoExec = 0.31m,
                Vega      = 0.05m
            };

            ModulacaoAsync modulacaoAsync = new ModulacaoAsync();

            modulacaoAsync.Modula(parametros);

            ModulacaoSync modulacaoSync = new ModulacaoSync();

            modulacaoSync.Modula(parametros);

            Console.ReadLine();
        }
 public ParametrosPernaCenario(ParametrosPerna source)
 {
     PrecoExec = source.PrecoExec;
     Vega      = source.Vega;
 }