遗传算法(GA)和遗传规划(GP)是一个有趣的研究领域。

我想知道你使用GA/GP解决的具体问题,以及如果你没有自己的库/框架,你使用了什么库/框架。

问题:

你用GA/GP解决过什么问题? 你使用了哪些库/框架?

我在寻找第一手的经验,所以请不要回答,除非你有。


当前回答

我几周前做了这个有趣的小玩意。它生成有趣的互联网图像使用GA。有点傻,但很好笑。

http://www.twitterandom.info/GAFunny/

对此有一些见解。它是一些mysql表。一个用于图像列表及其评分(即适合度),另一个用于子图像及其在页面上的位置。

子图像可以有几个细节,但不是全部实现:+大小,倾斜,旋转,+位置,+image_url。

当人们投票决定这张照片有多有趣时,它或多或少会流传到下一代。如果它存活下来,它会产生5-10个带有轻微突变的后代。目前还没有交叉。

其他回答

在读完《盲人钟表匠》之后,我对道金斯所说的帕斯卡程序产生了兴趣,他开发了一个可以随着时间进化的生物模型。我对使用Swarm编写自己的程序很感兴趣。我没有画出他画的那些奇特的生物图形,但我的“染色体”控制着影响生物体生存能力的特征。他们生活在一个简单的世界里,可以与彼此和环境决一死战。

生物的生存或死亡部分取决于偶然性,但也取决于它们如何有效地适应当地环境,如何有效地消耗营养物质以及如何成功地繁殖。这很有趣,但也向我妻子证明了我是一个极客。

As part of my thesis I wrote a generic java framework for the multi-objective optimisation algorithm mPOEMS (Multiobjective prototype optimization with evolved improvement steps), which is a GA using evolutionary concepts. It is generic in a way that all problem-independent parts have been separated from the problem-dependent parts, and an interface is povided to use the framework with only adding the problem-dependent parts. Thus one who wants to use the algorithm does not have to begin from zero, and it facilitates work a lot.

你可以在这里找到代码。

你可以用这个算法找到的解决方案已经在科学工作中与最先进的算法SPEA-2和NSGA进行了比较,并且已经证明 算法的性能相当,甚至更好,这取决于您用来衡量性能的指标,特别是取决于您正在关注的优化问题。

你可以在这里找到它。

同样,作为我的论文和工作证明的一部分,我将这个框架应用于项目组合管理中的项目选择问题。它是关于选择对公司增加最大价值的项目,支持公司的战略或支持任何其他任意目标。例如,从特定类别中选择一定数量的项目,或最大化项目协同作用,……

我的论文将该框架应用于项目选择问题: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf

之后,我在一家财富500强公司的投资组合管理部门工作,在那里他们使用了一种商业软件,该软件还将GA应用于项目选择问题/投资组合优化。

更多资源:

框架文档: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf

mPOEMS演示论文: http://portal.acm.org/citation.cfm?id=1792634.1792653

实际上,只要有一点热情,每个人都可以很容易地将通用框架的代码适应任意的多目标优化问题。

Several years ago I used ga's to optimize asr (automatic speech recognition) grammars for better recognition rates. I started with fairly simple lists of choices (where the ga was testing combinations of possible terms for each slot) and worked my way up to more open and complex grammars. Fitness was determined by measuring separation between terms/sequences under a kind of phonetic distance function. I also experimented with making weakly equivalent variations on a grammar to find one that compiled to a more compact representation (in the end I went with a direct algorithm, and it drastically increased the size of the "language" that we could use in applications).

最近,我将它们用作默认假设,以此来测试由各种算法生成的解决方案的质量。这主要涉及分类和不同类型的拟合问题(即创建一个“规则”,解释审查员对数据集所做的一组选择)。

我年轻时就尝试过GA。我用Python写了一个模拟器,工作原理如下。

这些基因编码了神经网络的权重。

神经网络的输入是检测触摸的“天线”。较高的数值表示非常接近,0表示不接触。

输出是两个“轮子”。如果两个轮子都向前,这个人也向前。如果轮子方向相反,他就会转向。输出的强度决定了车轮转动的速度。

生成了一个简单的迷宫。这真的很简单,甚至很愚蠢。屏幕下方是起点,上方是球门,中间有四面墙。每面墙都有一个随机的空间,所以总是有一条路。

一开始我只是随机挑选一些人(我认为他们是bug)。只要有一个人达到了目标,或者达到了时间限制,就会计算适合度。它与当时到目标的距离成反比。

然后我把它们配对,“培育”它们来创造下一代。被选择繁殖的概率与它的适应性成正比。有时,这意味着如果一个人具有非常高的相对适应性,就会与自己反复繁殖。

I thought they would develop a "left wall hugging" behavior, but they always seemed to follow something less optimal. In every experiment, the bugs converged to a spiral pattern. They would spiral outward until they touched a wall to the right. They'd follow that, then when they got to the gap, they'd spiral down (away from the gap) and around. They would make a 270 degree turn to the left, then usually enter the gap. This would get them through a majority of the walls, and often to the goal.

我添加的一个功能是在基因中放入一个颜色矢量来跟踪个体之间的相关性。几代之后,它们的颜色都是一样的,这说明我应该有更好的繁殖策略。

我试着让他们制定更好的策略。我把神经网络复杂化了——增加了记忆和其他东西。这没有用。我总是看到同样的策略。

我尝试了各种方法,比如建立单独的基因库,在100代之后才重新组合。但没有什么能促使他们采取更好的策略。也许这是不可能的。

另一个有趣的事情是绘制适应度随时间变化的图表。有明确的模式,比如最大适合度在上升之前会下降。我从未见过一本进化论的书谈到这种可能性。

在我的本科论文中,我使用遗传编程来开发用于空中搜索和救援的合作搜索策略。我使用一个名为NetLogo(基于StarLogo)的开源代理建模平台作为世界模型。NetLogo是用java写的,因此提供了java api -所以GP框架需要基于java -我使用的一个叫做JGAP,还有另一个开源GP框架在java中,我知道叫做ECJ。

模拟运行起来非常慢(我认为这是由于NetLogo模型),所以我的功能/终端集非常有限,限制了搜索空间。尽管如此,我还是想出了一些很好的解决办法。如果你有这种冲动,你可以在我的论文http://www.cse.unsw.edu.au/~ekjo014/z3157867_Thesis.pdf的第三章读到