public BackPackIndividual BruteForce(BackPackEnvironment environment) { var possibleIndividuals = new List<BackPackIndividual>(); int genomeSize = environment.ComputeGenomeSize(); var chromosome = new int[genomeSize]; var posssibilitiesPerInt = environment.AvailableItems.Count > 31 ? uint.MaxValue : (uint)1 << environment.AvailableItems.Count; // 2^n for (uint i = 0; i < posssibilitiesPerInt; i++) { for (int j = 0; j < genomeSize; j++) { chromosome[j] = (int)i; var individual = new BackPackIndividual(environment); individual.Genome.Chromosome = (int[])chromosome.Clone(); if (environment.Validate(individual)) { possibleIndividuals.Add(individual); } } } return possibleIndividuals.Aggregate((a, b) => environment.RateFitness(a) > environment.RateFitness(b) ? a : b); }
public void RateFitnessOfRandomIndividuals() { const int tests = 3; for (int n = 0; n < tests; n++) { var backPack = new BackPack(volume: random.Next(10000)); var items = RandomItems(random.Next(512), backPack.Volume, 100); var environment = new BackPackEnvironment(backPack, items); for (int i = 0; i <= items.Count; i++) { // compute chromosome var chromosome = new int[environment.ComputeGenomeSize()]; // set every bit that encodes an Item at an index j < i for (int j = 0; j < i; j++) { ChromosomeIndex index = environment.ComputeChromosomeIndex(j); IntBitHelper.Set(ref chromosome[index.IntIndex], index.BitIndex); } var individual = new BackPackIndividual(environment) { Genome = new BackPackIndividualGenome(chromosome) }; // compute fitness with Item-List double fitness = 0.0; for (int j = 0; j < i; j++) { fitness += items[j].Value; } Assert.AreEqual(fitness, environment.RateFitness(individual)); } } }