作家
登录

遗传算法的基本概念和实现(附 Java 实现案例)

作者: 来源: 2017-07-12 15:48:31 阅读 我要评论


} 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() {

【编辑推荐】

  1. JavaScript异步开辟全攻略 之 异步的来源
  2. 若何应用JavaScript构建机械进修模型
  3. 教你若何成为Java的OOM Killer
  4. JavaScript代码风格要素
  5. “先觉”赫拉利:AI将代替天然选择成变革基准
【义务编辑:张子龙 TEL:(010)68476606】
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;

  推荐阅读

  如何理解并正确使用MySql索引

1、概述索引是存储引擎用于快速查找记录的一种数据构造,经由过程合理的应用数据库索引可以大年夜大年夜进步体系的拜访机能,接下来重要介绍在MySql数据库中索引类型,以及若何创建出加倍>>>详细阅读


本文标题:遗传算法的基本概念和实现(附 Java 实现案例)

地址:http://www.17bianji.com/lsqh/36176.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)