static void Main(string[] args) { List <TempoDeSistema> tempos = new List <TempoDeSistema>(); List <double> roleta = new List <double>(); double somatoria; string arquivoDeEntrada; if (args.Length != 0) { arquivoDeEntrada = leArquivo(args[0]); } else { Console.WriteLine("Entre com os valores separados por ';'"); arquivoDeEntrada = Console.ReadLine(); } string[] listaDeTempos = arquivoDeEntrada.Split(';'); foreach (string tempo in listaDeTempos) { tempos.Add(new TempoDeSistema(Convert.ToInt32(tempo))); } Console.WriteLine("Quantas gerações?"); int geracoes = Convert.ToInt32(Console.ReadLine()); for (int k = 0; k < geracoes; k++) { somatoria = tempos.Sum(t => t.quadrado); foreach (TempoDeSistema item in tempos) { item.probabilidade = item.quadrado / somatoria; } somatoria = 0; foreach (var item in tempos) { roleta.Add(somatoria); somatoria += item.probabilidade; } roleta.Add(somatoria); List <TempoDeSistema> temp = new List <TempoDeSistema>(); temp = tempos; Random rand = new Random(); for (int j = 0; j < tempos.Count; j++) { int i; double numRandomico = rand.NextDouble(); for (i = 0; numRandomico > roleta[i]; i++) { ; } tempos[j] = new TempoDeSistema(temp[i - 1].tempo); } int quantidadeCrossover; if (tempos.Count % 2 == 0) { quantidadeCrossover = tempos.Count / 2; } else { quantidadeCrossover = (tempos.Count - 1) / 2; } int bitsCross = 2; for (int i = 0; i < quantidadeCrossover; i += 2) { if (tempos[i].binario.Length > 5 && tempos[i].binario.Length > 5) { bitsCross = 3; } else { bitsCross = 2; } string temporaria = tempos[i].binario.Substring(tempos[i].binario.Length - bitsCross); tempos[i].binario = tempos[i].binario.Remove(tempos[i].binario.Length - bitsCross); tempos[i].SetBinario(tempos[i].binario + tempos[i + 1].binario.Substring(tempos[i + 1].binario.Length - bitsCross)); tempos[i + 1].binario = tempos[i + 1].binario.Remove(tempos[i + 1].binario.Length - bitsCross); tempos[i + 1].SetBinario(tempos[i + 1].binario + temporaria); } Console.WriteLine("Geração " + (k + 1).ToString() + ": " + ParaString(tempos)); } Console.Read(); }
static void Main(string[] args) { List<TempoDeSistema> tempos = new List<TempoDeSistema>(); List<double> roleta = new List<double>(); double somatoria; string arquivoDeEntrada; if (args.Length != 0) { arquivoDeEntrada = leArquivo(args[0]); } else { Console.WriteLine("Entre com os valores separados por ';'"); arquivoDeEntrada = Console.ReadLine(); } string[] listaDeTempos = arquivoDeEntrada.Split(';'); foreach (string tempo in listaDeTempos) { tempos.Add(new TempoDeSistema(Convert.ToInt32(tempo))); } Console.WriteLine("Quantas gerações?"); int geracoes = Convert.ToInt32(Console.ReadLine()); for (int k = 0; k < geracoes; k++) { somatoria = tempos.Sum(t => t.quadrado); foreach (TempoDeSistema item in tempos) { item.probabilidade = item.quadrado / somatoria; } somatoria = 0; foreach (var item in tempos) { roleta.Add(somatoria); somatoria += item.probabilidade; } roleta.Add(somatoria); List<TempoDeSistema> temp = new List<TempoDeSistema>(); temp = tempos; Random rand = new Random(); for (int j = 0; j < tempos.Count; j++) { int i; double numRandomico = rand.NextDouble(); for (i = 0; numRandomico > roleta[i]; i++) ; tempos[j] = new TempoDeSistema(temp[i - 1].tempo); } int quantidadeCrossover; if (tempos.Count % 2 == 0) { quantidadeCrossover = tempos.Count / 2; } else { quantidadeCrossover = (tempos.Count - 1) / 2; } int bitsCross = 2; for (int i = 0; i < quantidadeCrossover; i += 2) { if (tempos[i].binario.Length > 5 && tempos[i].binario.Length > 5) bitsCross = 3; else bitsCross = 2; string temporaria = tempos[i].binario.Substring(tempos[i].binario.Length - bitsCross); tempos[i].binario = tempos[i].binario.Remove(tempos[i].binario.Length - bitsCross); tempos[i].SetBinario(tempos[i].binario + tempos[i + 1].binario.Substring(tempos[i + 1].binario.Length - bitsCross)); tempos[i + 1].binario = tempos[i + 1].binario.Remove(tempos[i + 1].binario.Length - bitsCross); tempos[i + 1].SetBinario(tempos[i + 1].binario + temporaria); } Console.WriteLine("Geração " + (k+1).ToString() + ": " + ParaString(tempos)); } Console.Read(); }