我正在尝试JGAP来完成一个遗传算法任务。我使用了他们的例子:
// Start with a DefaultConfiguration, which comes setup with the
// most common settings.
// -------------------------------------------------------------
Configuration conf = new DefaultConfiguration();
// Set the fitness function we want to use, which is our
// MinimizingMakeChangeFitnessFunction that we created earlier.
// We construct it with the target amount of change provided
// by the user.
// ------------------------------------------------------------
int targetAmount = TARGET_AMOUNT_OF_CHANGE;
FitnessFunction myFunc = new MinimizingMakeChangeFitnessFunction(targetAmount);
conf.setFitnessFunction(myFunc);
// Now we need to tell the Configuration object how we want our
// Chromosomes to be setup. We do that by actually creating a
// sample Chromosome and then setting it on the Configuration
// object. As mentioned earlier, we want our Chromosomes to
// each have four genes, one for each of the coin types. We
// want the values of those genes to be integers, which represent
// how many coins of that type we have. We therefore use the
// IntegerGene class to represent each of the genes. That class
// also lets us specify a lower and upper bound, which we set
// to sensible values for each coin type.
// --------------------------------------------------------------
Gene[] sampleGenes = new Gene[4];
sampleGenes[0] = new IntegerGene(conf, 0, 3); // Quarters
sampleGenes[1] = new IntegerGene(conf, 0, 2); // Dimes
sampleGenes[2] = new IntegerGene(conf, 0, 1); // Nickels
sampleGenes[3] = new IntegerGene(conf, 0, 4); // Pennies
Chromosome sampleChromosome = new Chromosome(conf, sampleGenes);
conf.setSampleChromosome(sampleChromosome);
// Finally, we need to tell the Configuration object how many
// Chromosomes we want in our population. The more Chromosomes,
// the larger the number of potential solutions (which is good
// for finding the answer), but the longer it will take to evolve
// the population each round. We'll set the population size to
// 500 here.
// --------------------------------------------------------------
conf.setPopulationSize(30000);
Genotype population = Genotype.randomInitialGenotype(conf);
for (int i = 0; i < MAX_ALLOWED_EVOLUTIONS; i++) {
population.evolve();
}
IChromosome bestSolutionSoFar = population.getFittestChromosome();当我打印出来的时候:
System.out.println(population.getConfiguration().isPreserveFittestIndividual());我看到它是false。我错过什么了吗?
发布于 2016-04-20 17:23:38
默认情况下,JGAP使用NaturalSelectors。这意味着每条染色体在下一步中被选择的概率与其染色体的适应值成正比。被选中的可能性最高并不能保证被后代选中。
JGAP允许您在Configuration设置中使用以下命令以确定性方式始终保留最好的染色体。一个通用的例子:
Configuration.setPreservFittestIndividual(boolean a_preserveFittest);在您的情况下,您应该编写如下内容:
...
conf.setFitnessFunction(myFunc);
conf.setPreservFittestIndividual(true);
...我希望它能帮助你。有关更多信息,可以查看JGAPv3.6API Here
https://stackoverflow.com/questions/36379060
复制相似问题