/*Initial data are represented as a table of normalized data which was stored in order: * image number, filter number, fitness, parameters.*/ //for 2 chromosome public Population RandomInitialise(int PopulationQuantity, double[,] initialData, int rowsNumder, int columnsNumber) { Population popolation = new Population(PopulationQuantity); Random rnd = new Random(); ChromosomeTypeOne ch1; ChromosomeTypeTwo ch2; Chromosome[] ch = new Chromosome[2]; double first; double second; int counter = 2; for (int i = 0; i < PopulationQuantity; i++) { ch2 = new ChromosomeTypeTwo(2); ch1 = new ChromosomeTypeOne(columnsNumber - 3); counter = (int)(rnd.NextDouble() * (double)(columnsNumber / 2)); for (int k = 0; k < counter; k++) { first = rnd.NextDouble(); second = first + (1 - first) * rnd.NextDouble(); ch1.ChangeChromosomeGene((int)(rnd.NextDouble() * (double)ch1.GenesNumber), first, second); } ch2.ChangeChromosomeGene(0, (int)(rnd.NextDouble() * (double)324)); ch[0] = ch1; ch[1] = ch2; Individual ind = new Individual(columnsNumber - 3, 2); ind.SetIndividualContent(ch); popolation.AddIndividual(ind); } return(popolation); }
public Individual(double[,] parameters, int parametersNumber, int[] parametersTwo, int parametersNumberTwo) { chromosomesNumber = 2; chromosomes = new Chromosome[chromosomesNumber]; chromosomes[0] = new ChromosomeTypeOne(parametersNumber, parameters); chromosomes[1] = new ChromosomeTypeTwo(parametersNumberTwo, parametersTwo); }
public Population InitialiseFromInitialData(int PopulationQuantity, double[,] initialData, int rowsNumber, int columnsNumber, double percentOfChangeGene) { Population popolation = new Population(PopulationQuantity); Random rnd = new Random(); ChromosomeTypeOne ch1; ChromosomeTypeTwo ch2; Chromosome[] ch = new Chromosome[2]; double first; double second; int counter = 2; int colum; int firstRow = 0; int secondRow = 0; int count; for (int i = 0; i < PopulationQuantity; i++) { ch2 = new ChromosomeTypeTwo(1); ch1 = new ChromosomeTypeOne(columnsNumber - 3); //for half of all genes counter = (int)(rnd.NextDouble() * (double)(columnsNumber * percentOfChangeGene)); firstRow = (int)(rnd.NextDouble() * (double)rowsNumber); secondRow = (int)(rnd.NextDouble() * (double)rowsNumber); for (int k = 0; k < counter; k++) { colum = (int)(rnd.NextDouble() * (double)ch1.GenesNumber); count = 0; /*while (initialData[firstRow, colum + 3] == initialData[secondRow, colum + 3] && (count < 100)) * { * secondRow = (int)(rnd.NextDouble() * (double)rowsNumber); * count++; * }*/ first = initialData[firstRow, colum + 3]; second = initialData[secondRow, colum + 3]; if (first < second) { ch1.ChangeChromosomeGene(colum, first, second); } else { ch1.ChangeChromosomeGene(colum, second, first); } } ch2.ChangeChromosomeGene(0, (int)initialData[firstRow, 1]); ch[0] = ch1; ch[1] = ch2; Individual ind = new Individual(columnsNumber - 3, 2); ind.SetIndividualContent(ch); popolation.AddIndividual(ind); } return(popolation); }
public Population MutationFromInitialDataInSecondChromosome(Population population, double[,] initialData, int rowsNumber) { Random rnd = new Random(); int indx = (int)(rnd.NextDouble() * (double)population.PopulationQuantity); Individual indiv = population.GetIndividualByIndex(indx); Chromosome[] ch = indiv.GetIndividualContent(); ChromosomeTypeTwo chr = (ChromosomeTypeTwo)ch[1]; int colum = 1; int row = (int)(rnd.NextDouble() * (double)rowsNumber); chr.ChangeChromosomeGene(0, (int)initialData[row, colum]); indiv.SetIndividualContent(ch); population.SetIndividualByIndex(indx, indiv); return(population); }
public Individual(Individual ind) { int len1 = ((ChromosomeTypeOne)ind.chromosomes[0]).GenesNumber; int len2 = ((ChromosomeTypeTwo)ind.chromosomes[1]).GenesNumber; double[,] CH1 = ((ChromosomeTypeOne)ind.chromosomes[0]).ChromosomeContent; int[] CH2 = ((ChromosomeTypeTwo)ind.chromosomes[1]).ChromosomeContent; double[,] ch1 = new double[len1, 2]; int[] ch2 = new int[len2]; for (int i = 0; i < len1; i++) { ch1[i, 0] = CH1[i, 0]; ch1[i, 1] = CH1[i, 1]; } for (int i = 0; i < len2; i++) { ch2[i] = CH2[i]; } chromosomes = new Chromosome[2]; chromosomes[0] = new ChromosomeTypeOne(((ChromosomeTypeOne)ind.chromosomes[0]).GenesNumber, ch1); chromosomes[1] = new ChromosomeTypeTwo(((ChromosomeTypeTwo)ind.chromosomes[1]).GenesNumber, ch2); chromosomesNumber = ind.ChromosomesNumber; }