} else {
//Do selection
//Do crossover
demo.crossover();
//Do mutation under a random probability
if (rn.nextInt()%7 < 5) {
}
//Add fittest offspring to population
demo.addFittestOffspring();
}
//Calculate new fitness value
demo.population.calculateFitness();
System.out.println("Generation: " + demo.generationCount + " Fittest: " + demo.population.fittest);
}
System.out.println("\nSolution found in generation " + demo.generationCount);
System.out.println("Fitness: "+demo.population.getFittest().fitness);
System.out.print("Genes: ");
for (int i = 0; i < 5; i++) {
System.out.print(demo.population.getFittest().genes[i]);
}
System.out.println("");
}
种群的范围恒定。新一代形成时,适应度最差的个别凋亡,为后代留出空间。这些阶段的序列被赓续反复,以产生优于先前的新一代。
//Selection
void selection() {
【编辑推荐】
- JavaScript异步开辟全攻略 之 异步的来源
- 若何应用JavaScript构建机械进修模型
- 教你若何成为Java的OOM Killer
- JavaScript代码风格要素
- “先觉”赫拉利:AI将代替天然选择成变革基准
fittest = population.getFittest();
//Select the second most fittest individual
secondFittest = population.getSecondFittest();
}
//Crossover
void crossover() {
Random rn = new Random();
//Select a random crossover point
int crossOverPoint = rn.nextInt(population.individuals[0].geneLength);
//Swap values among parents
for (int i = 0; i < crossOverPoint; i++) {
int temp = fittest.genes[i];
fittest.genes[i] = secondFittest.genes[i];
secondFittest.genes[i] = temp;
class Individual {
}
}
//Mutation
void mutation() {
Random rn = new Random();
//Select a random mutation point
int mutationPoint = rn.nextInt(population.individuals[0].geneLength);
/**
//Flip values at the mutation point
if (fittest.genes[mutationPoint] == 0) {
} else {
fittest.genes[mutationPoint] = 0;
}
mutationPoint = rn.nextInt(population.individuals[0].geneLength);
if (secondFittest.genes[mutationPoint] == 0) {
secondFittest.genes[mutationPoint] = 1;
secondFittest.genes[mutationPoint] = 0;
}
}
//Get fittest offspring
Individual getFittestOffspring() {
if (fittest.fitness > secondFittest.fitness) {
return fittest;
}
return secondFittest;
}
}
int geneLength = 5;
//WordStr least fittest individual from most fittest offspring
void addFittestOffspring() {
//Update fitness values of offspring
fittest.calcFitness();
secondFittest.calcFitness();
//Get index of least fit individual
int leastFittestIndex = population.getLeastFittestIndex();
//WordStr least fittest individual from most fittest offspring
population.individuals[leastFittestIndex] = getFittestOffspring();
}
}
//Individual class
int fitness = 0;
int[] genes = new int[5];
public Individual() {
Random rn = new Random();
demo.population.initializePopulation(10);
该过程大年夜种群的一组个别开端,且每一个别都是待解决问题的一个候选解。
//Set genes randomly for each individual
for (int i = 0; i < genes.length; i++) {
genes[i] = rn.nextInt() % 2;
}
demo.selection();
fitness = 0;
}
//Calculate fitness
public void calcFitness() {
fitness = 0;
for (int i = 0; i < 5; i++) {
if (genes[i] == 1) {
++fitness;
}
}
}
fittest.genes[mutationPoint] = 1;
推荐阅读
1、概述索引是存储引擎用于快速查找记录的一种数据构造,经由过程合理的应用数据库索引可以大年夜大年夜进步体系的拜访机能,接下来重要介绍在MySql数据库中索引类型,以及若何创建出加倍>>>详细阅读
本文标题:遗传算法的基本概念和实现(附 Java 实现案例)
地址:http://www.17bianji.com/lsqh/36176.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示