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

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

问题:

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

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


当前回答

我为我的公司在1992年为货运业开发的3D激光表面轮廓系统开发了一个家庭酿造GA。 该系统依赖于三维三角测量,并使用了定制的激光线扫描仪,512x512相机(具有定制的捕获hw)。相机和激光之间的距离永远不会是精确的,相机的焦点也不会在你期望的256,256的位置找到!

尝试使用标准几何和模拟退火式方程求解来计算校准参数是一场噩梦。

遗传算法在一个晚上就完成了,我创建了一个校准立方体来测试它。我知道立方体的精度很高,因此我的想法是,我的遗传算法可以为每个扫描单元进化一组自定义三角测量参数,以克服生产变化。

这招很管用。退一步说,我简直目瞪口呆!在大约10代的时间里,我的“虚拟”立方体(由原始扫描生成并根据校准参数重新创建)实际上看起来像一个立方体!经过大约50代之后,我得到了我需要的校准。

其他回答

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

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

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

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

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

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

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

我年轻时就尝试过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的第三章读到

我曾经尝试制作一个围棋电脑播放器,完全基于基因编程。每个程序都将被视为一系列动作的评估函数。即使是在一个相当小的3x4板上,制作的程序也不是很好。

我使用Perl,并自己编写了所有代码。我今天会做不同的事情。