资源简介
附件中是遗传算法的Java版本的代码实现,可以正常运行;下载者可以根据自己的应用场景来修改。
代码片段和文件信息
package com.bjfu.ga;
import java.util.ArrayList;
import java.util.List;
public class Chromosome {
private boolean[] gene; //基因序列
private double score; //基因序列对应的函数得分
/**
* 生成一个新基因
*/
public Chromosome() {
}
/**
* 随机生成基因序列
* @param size
*/
public Chromosome(int size) {
if (size <= 0) {
return ;
}
initGeneSize(size);
for (int i = 0; i < size; i++) {
gene[i] = Math.random() >= 0.5;
}
}
/**
* 初始化基因长度
* @param size
*/
public void initGeneSize(int size) {
if (size <= 0) {
return;
}
gene = new boolean[size];
}
/**
* 将基因转化为对应的数字
* @return
*/
public int getNum() {
if (gene == null) {
return 0;
}
int num = 0;
for (boolean bool : gene) {
num <<= 1;
if (bool) {
num += 1;
}
}
return num;
}
/**
* 遗传产生下一代
* 把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中;一般要求适应度较高的个体将有更多的机会遗传到下一代群体中。
* @param parent1
* @param parent2
* @return
*/
public static List generateNextGeneration(Chromosome parent1 Chromosome parent2) {
//染色体有一个为空,不产生下一代
if (parent1 == null || parent2 == null) {
return null;
}
//染色体有一个没有基因序列,不产生下一代
if (parent1.gene == null || parent2.gene == null) {
return null;
}
//染色体基因序列长度不同,不产生下一代
if (parent1.gene.length != parent2.gene.length) {
return null;
}
Chromosome c1 = clone(parent1);
Chromosome c2 = clone(parent2);
//随机产生交叉互换位置
int size = c1.gene.length;
int a = (int) ((Math.random() * size) % size);
int b = (int) ((Math.random() * size) % size);
int min = a > b ? b : a;
int max = a > b ? a : b;
//对位置上的基因进行交叉互换
boolean t;
for (int i = min; i <= max; i++) {
t = c1.gene[i];
c1.gene[i] = c2.gene[i];
c2.gene[i] = t;
}
List list = new ArrayList();
list.add(c1);
list.add(c2);
return list;
}
/**
* 克隆基因
* @param chromosome
* @return
*/
public static Chromosome clone(final Chromosome chromosome) {
if (chromosome == null || chromosome.gene == null) {
return null;
}
Chromosome copy = new Chromosome();
copy.initGeneSize(chromosome.gene.length);
for (int i = 0; i < chromosome.gene.length; i++) {
copy.gene[i] = chromosome.gene[i];
}
return copy;
}
/**
* 基因num个位置发生变异
* @param num
*/
public void mutation(int num) {
//允许变异
int size = gene.length;
for (int i = 0; i < num; i++) {
//寻找变异位置
int position = (int) ((Math.random() * size) % size);
//变异后的值
boolean bool = !gene[position];
gene[position] = bool;
}
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-08 15:18 GA\
文件 295 2018-03-08 15:18 GA\.classpath
文件 361 2018-03-08 15:18 GA\.project
目录 0 2018-03-08 15:18 GA\.settings\
文件 587 2018-03-08 15:18 GA\.settings\org.eclipse.jdt.core.prefs
目录 0 2018-03-08 15:18 GA\bin\
目录 0 2018-03-08 15:18 GA\bin\com\
目录 0 2018-03-08 15:18 GA\bin\com\bjfu\
目录 0 2018-03-08 16:25 GA\bin\com\bjfu\ga\
文件 2655 2018-03-08 22:15 GA\bin\com\bjfu\ga\Chromosome.class
文件 5664 2018-03-08 16:33 GA\bin\com\bjfu\ga\DynamicDataWindow.class
文件 7557 2018-03-09 15:42 GA\bin\com\bjfu\ga\GeneticAlgorithm.class
文件 1114 2018-03-09 10:58 GA\bin\com\bjfu\ga\GeneticAlgorithmDriver.class
目录 0 2018-03-08 15:18 GA\src\
目录 0 2018-03-08 15:18 GA\src\com\
目录 0 2018-03-08 15:18 GA\src\com\bjfu\
目录 0 2018-03-08 16:25 GA\src\com\bjfu\ga\
文件 3127 2018-03-08 22:15 GA\src\com\bjfu\ga\Chromosome.java
文件 6919 2018-03-08 16:33 GA\src\com\bjfu\ga\DynamicDataWindow.java
文件 7898 2018-03-09 15:42 GA\src\com\bjfu\ga\GeneticAlgorithm.java
文件 797 2018-03-09 10:58 GA\src\com\bjfu\ga\GeneticAlgorithmDriver.java
- 上一篇:粒子群算法的Java实现源码
- 下一篇:韩顺平jsp+servlet源码
评论
共有 条评论