Пример #1
0
        public double CalculaDistancia(Sorteio sorteio1, Sorteio sorteio2)
        {
            double soma = 0.0;

            for (int i = 0; i < 60; i++)
            {
                soma += 100.0 / Math.Pow(2, sorteio1.Numeros[i] * sorteio2.Numeros[i]);
            }

            return(soma);
        }
Пример #2
0
        public void EscolheClusters(bool random)
        {
            List <int> numConcursos = new List <int>();

            numConcursos.AddRange(sorteios.Select(s => s.Concurso));

            if (random)
            {
                // Escolhe centros dos clusters randomicamente
                Random r = new Random();
                for (int i = 0; i < numClusters; i++)
                {
                    int sorteado = r.Next(numConcursos.Count());
                    clusters.Add(new List <Sorteio> {
                        sorteios[numConcursos[sorteado] - 1]
                    });
                    numConcursos.Remove(sorteado);
                }
            }
            else
            {
                // Escolhe centros dos clusters de acordo com a menor distância total para cada cluster
                for (int i = 0; i < clusters.Count; i++)
                {
                    int    clusterIndex = -1;
                    double distancia    = 0;
                    for (int j = 0; j < clusters[i].Count; j++)
                    {
                        List <Sorteio> clusterTemp = new List <Sorteio>();
                        clusterTemp.AddRange(clusters[i]);
                        clusterTemp.RemoveAt(j);
                        clusterTemp.Insert(0, clusters[i][j]);

                        double distanciaTemp = CalculaDistanciaTotalCluster(clusterTemp);
                        if (clusterIndex == -1 || distanciaTemp < distancia)
                        {
                            clusterIndex = j;
                            distancia    = distanciaTemp;
                        }
                    }
                    Sorteio tempCluster = clusters[i][clusterIndex];
                    clusters[i].RemoveAt(clusterIndex);
                    clusters[i].Insert(0, tempCluster);
                }
            }
        }
Пример #3
0
        public List <Sorteio> Processa()
        {
            string[] linhas = LeArquivo();

            List <Sorteio> sorteios = new List <Sorteio>();

            //Linha 0 correponde ao cabeçalho
            for (int i = 1; i < linhas.Count(); i++)
            {
                string[] colunas = linhas[i].Split(';');

                Sorteio sorteio = new Sorteio
                {
                    Concurso = int.Parse(colunas[0]),
                    Data     = DateTime.Parse(colunas[1]),
                    Dezenas  = new int[] {
                        int.Parse(colunas[2]),
                        int.Parse(colunas[3]),
                        int.Parse(colunas[4]),
                        int.Parse(colunas[5]),
                        int.Parse(colunas[6]),
                        int.Parse(colunas[7])
                    },
                    Numeros = new int[60]
                };

                for (int n = 1; n <= 60; n++)
                {
                    sorteio.Numeros[n - 1] = 0;
                    for (int j = 0; j < 6; j++)
                    {
                        if (sorteio.Dezenas[j] == n)
                        {
                            sorteio.Numeros[n - 1] = 1;
                            break;
                        }
                    }
                }

                sorteios.Add(sorteio);
            }

            return(sorteios);
        }