java - 进化生物 - 使用由我自己创建的复杂类的实例构建的个体创建遗传算法

标签 java genetic-algorithm genetic-programming

我正在开展一个项目,试图实现 Karl Sims 撰写的“进化虚拟生物”想法。

问题是,在我读过的每个教程中,他们都是从整数或 boolean 值构建个体,如下所示:

pop.subpop.0.species        = ec.vector.BitVectorSpecies
pop.subpop.0.species.ind    = ec.vector.BitVectorIndividual

但是如果我有一个名为“Node”的类,它比这些类复杂得多怎么办?没有这样的ec.vector.BitVectorNode。 在 ECJ 教程页面(http://cs.gmu.edu/~eclab/projects/ecj/docs/)中,有一个名为“Post-Tutorial Discussion”的教程,其中写有以下内容:

Arbitrary Representations It's fairly easy to make arbitrary representations with ECJ. Just subclass Individual and add in your own representation. You may need to make your own BreedingPipelines which know how to cross over or mutate your representation.

我的类 Node 扩展了 individual,但我不知道如何继续或必须对公共(public)代码应用哪些更改才能创建群体(例如,教程 1 和 2 中的代码)

这是其属性的声明:

public class Node extends Individual
{
/** Properties */
private static final long serialVersionUID = -4771047292470201612L;
private double length;
private double width;
private double height;
private int recLimit;
private Joint joint;
private Set<Sensor> setSensors = new HashSet<Sensor>();
private Set<Neuron> setNeurons = new HashSet<Neuron>();
private Set<Effector> setEffectors = new HashSet<Effector>();
private Set<Connection> setConnections = new HashSet<Connection>();

//And then the methods

任何帮助将不胜感激。

最佳答案

教程 1 和 2 是如何使用 ECJ 包定义和解决遗传算法问题的示例,而不是遗传编程(对于两者之间的差异 see here )。

在遗传算法中,您必须将您的问题“编码”到某种基因组中,如教程 1 和 2 所示,位或整数是常见的编码表示形式,因此您必须找到一种方法从 Node 的实例中提取此基因组类(您的人口)来编码问题。非常清楚的是,换句话说,您的节点类必须有一个 getGenome 方法,或者您需要一些其他对象来封装编码逻辑,并且可以查看您的 Node 实例并知道如何提取基因组。

如果您试图改进类本身(您的问题并不完全清楚),教程 4 展示了如何使用遗传编程包。如果您实际上想做的是使用此包“进化代码”(遗传编程),那么您应该引用教程。

关于java - 进化生物 - 使用由我自己创建的复杂类的实例构建的个体创建遗传算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29107632/

相关文章:

python - 如何在基于DEAP的Python遗传算法中加入淘汰机制

md5 - 是否可以使用遗传算法破坏 md5 哈希?

clojure - 在 Clojure 中评估 AST(抽象语法树)

genetic-programming - 如何从树中获取随机节点?

java - 有什么方法可以让我的 JFrame 居中吗?

java - Spring RESTTemplate getForObject 方法不支持返回内容类型 'null'

java - 为什么 java.lang.Object 不是抽象的?

python - 获取遗传算法中使用的对象的值

algorithm - 通过遗传算法生成代码

java - H2事务为什么总是自动提交?