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); }
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); } } }
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); }