Java的遗传编程库

15

我正在寻找一个适用于JVM的优秀基因编程库,不是遗传算法而是基因编程。

我已经尝试了JGAP(jgap.sourceforge.net)和Watchmaker(watchmaker.uncommons.org)。不幸的是,这些工具只有实验性的、不成熟的基因编程支持(它们主要专注于遗传算法)。

也许你知道更好的JVM基因编程工具,可以用Java或任何其他JVM编译语言编写。

我不是在寻找一个全面的GP工具列表,我更想要一个好的、流行的工具(就像流行的操作系统是Windows、Linux和Mac,流行的Java IDE是Eclipse、IDEA和NetBeans)。

它不一定是基因编程库(GP),它也可以是(可能更好)基因表达式编程库(GEP)。

编辑(问题两个月后): 我分析了您发布的大部分链接,并且在维基百科中可用,我必须说,这些库中每一个都至少存在以下问题之一:

  • 没有开源,或者开源但非常限制(GPL);

  • 没有文档(或者非常差的文档);

  • 没有内置支持基因编程或基因表达式编程(或实验性支持);

  • 有些使用起来过于复杂。

在这种情况下,我最终编写了自己的简单库供项目使用(采用基因表达式编程方法,使其非常简单)。


2
@Carlos:我对自己的答案能够赢得这个悬赏有些失望。如果你想要在问题中增加更多内容,我愿意将我的奖金捐赠给第二个悬赏。请直接在这里发送@消息给我。 - Bill the Lizard
1
@Bill the Lizard,嘿,不用担心伙计,我已经开始着手我的项目了,所以现在我很好。你能如此真诚和诚实,真是太好了。向你致敬并给你点赞;)。祝一切顺利。 - Carlos
看着你的下一个问题,你现在是否正在使用Drools Planner(ASL,带有文档和示例)?你喜欢它吗? :) - Geoffrey De Smet
我只是在看到一些真实的代码使用它之后才尝试了它()。我不是说我不喜欢它,但我可以列举出两件事情会让人们不喜欢Drools Planner: - iirekm
啊,我又编辑太久了:
  • 模拟退火和禁忌搜索(Drools Planner中的内容)只是计算智能的另一种方法 - 它对某些问题类别(例如时间表规划)非常有效,而对其他问题可能不太适用 - 没有完美的计算智能方法。
  • 我有点不喜欢Drools Planner和Drools之间的关系 - 我宁愿将Drools Planner视为一个独立的库,并且我认为由程序员决定如何实现适应度函数(Drools或Java代码)。
- iirekm
@iirekm 感谢您的反馈。1)模拟退火和禁忌搜索确实专注于调度、装箱和路径规划问题。2)可以实现使适应函数可定制化(我会接受这样的补丁),这将产生一些有趣的基准测试。然而,使用规则引擎的整个重点是免费获得增量分数计算,自己实现这种样板代码非常麻烦。 - Geoffrey De Smet
6个回答

5

ECJ为遗传程序设计提供了许多资源,包括多个示例项目。


2
有一些Java编程的库,如GenPron-genes,以及Groovy的JGProg
遗传编程维基百科文章的实现部分中列出了更多不同语言的库,但正如你所提到的,其中许多看起来更适用于GA,因此您需要评估每个库以确定它是否符合您的需求。

你尝试过使用这些库来进行GP吗?互联网上有许多GP库,但它们中的大部分质量非常差,完全不适合生产。我已经尝试了JGAP和Watchmaker,但无法尝试所有可用的库,所以我向您——stackoverflow的用户询问意见,也许你们中的某些人在Java GP方面拥有丰富的经验。 - iirekm

1
我有点偏袒,因为我是其中一位作者,但EpochX是一个专门用于遗传编程的Java库。它支持强类型树表示法和两种语法引导表示法。它主要面向研究人员,但根据您的需求,它也可能适合您。您可以在epochx.org获取更多信息。

啊 - 我差点就准备尝试 epochx 了,但是我注意到它是在 GPL 许可证下发布的!由于我做的项目是商业用途的(因此我不能使用 GPL),为什么不将其发布在 LGPL 下呢 - 这是一种在 GPL 和“你想干嘛就干嘛”的许可证(如 Apache、MIT 或 BSD)之间达成妥协的方式。可能还有更多这样的用户,他们不会使用你的库,只因为它是 GPL 的。 - iirekm
谢谢您的建议。我会看看是否可以重新评估许可证,因为我没有理由禁止商业使用。 - Tom Castle
现在已经获得了LGPL许可。 - Robert Harvey

1

我刚刚完成了在Clojure(基于JVM)中构建自己的遗传编程工具。一旦我能够进行符号回归,我意识到该工具比我想象的更加限制,并且更复杂地解决了强类型问题。因此,我决定转向语法演化工具(遗传编程可以被看作是语法演化的子集)。GEVA 工具是我寻找语法演化工具的第一站。据我所知,它仍在开发中(今年(2010年)最近进行了一次更新)。


谢谢提供的信息,我之前不知道GEVA。我猜对于某些问题,GEVA更加强大,而对于其他问题,遗传算法更加强大,还有一些则需要神经网络或贝叶斯网络。我想现在先尝试使用遗传算法和GEP,因为我对它们很熟悉,如果不满意的话,再尝试使用GEVA。 - iirekm
仅澄清此处的答案 - GEVA是语法演化(GE)的一种实现,这是一种使用语法的进化算法。还有其他的GE实现,例如jGE、libGE和EpochX,已经在另一个答案中提到了。 - Tom Castle

1
也许你可以使用TinyGP的部分内容?它不是一个真正的库,更像是一个GP系统,但由于它非常小,你可以很容易地为你的用途进行调整。

0
JGAP(Java遗传算法包)是一款先进的GA库,可在jgap.sf.net免费获取,包含许多示例。

我尝试过JGAP(jgap.sourceforge.net)... - Tansir1
我在我的问题中提到了JGAP - 这是非常不成熟的遗传编程支持,只在最近的版本中添加。 - iirekm
此外,与 Watchmaker 相比,JGAP 的设计非常丑陋。 - iirekm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接