用遗传算法完成什么酷炫的IT项目?

49

我正在寻找一个实际应用来使用遗传算法。一些我考虑过的事情有:

  • 网站界面优化
  • 使用物理模拟器进行车辆优化
  • 遗传编程
  • 自动测试用例生成

但是没有一个真正引起我的注意。如果你有一些空闲时间(几个月)来完成一个遗传算法项目,你会选择解决什么问题?


4
朋友!如果你能有效地生成测试用例,你会变得很有钱! - Robert Gould
作为一项工作的一部分,我曾经制作了一个遗传算法来进化测试数据(而不是测试用例),这非常困难但也很有趣! - Manuel Araoz
12个回答

19
一个有很多可能性的话题是使用进化算法来演化游戏策略。人们已经使用进化算法为扑克、跳棋/国际跳棋、围棋和许多其他游戏生成策略。J-GAP的人们已经使用遗传编程为Robocode演化机器人。
我最近发布了一篇介绍性文章,介绍了进化计算的一些用途。Adam Marczyk也写了一篇有很多例子的优秀文章。Genetic Argonaut blog包含了许多有趣的进化项目链接。
一种不太常见的进化算法是学习分类器系统。它演化出一组分类输入规则。它可以应用于与神经网络相同类型的问题。为特定问题(如基于表现尝试预测体育比赛结果)开发LCS可能会很有趣。

4
我培养了一批擅长黑白棋的家人,这非常有趣和有意思,因为我之前从未玩过黑白棋。通过遗传算法,我解决了一个我甚至不理解的问题。这就是遗传算法的真正威力。 - Robert Gould

11

3
顺便提一下:关于Mona Lisa算法是否真正是遗传算法,存在争议。 - Henrik Paul
2
这对我来说看起来像模拟退火。 - Robert Gould
虽然它是一个伟大的想法生成器...例如,为图像压缩创建遗传算法。 - Stephen Denne
1
我创建了一个Java版本的蒙娜丽莎程序,它是一个具有人口数量>1的适当遗传算法。因此,您不必像罗杰那样完全按照他的方式进行操作,他使用的是更多的1+1进化策略。 - Dan Dyer
类似的想法可以应用于MP3来生成MIDI。 - Todor Balabanov

11

4

我读到了与自动生成测试用例相关的类似问题的解决方案。实际上,它与所提出的问题相反。您需要指定测试用例,然后让算法(遗传编程)创建能够通过测试的代码。通过这种方式,您提供了规范并且培育您的程序。如果您在谷歌上搜索一下,就可以找到一些相关研究。
我发现这是一个非常有趣的想法。当然,现在没有人会创建这样的应用程序,但这是一个很好的研究领域。


这几乎就是我正在为我的论文所做的事情。 - Nobody

4

我玩康威生命游戏和遗传算法时很开心,试图进化出高级生物...不确定这是否能让你忙碌几个月...


1
让我在我的论文期间忙碌了一番 ;) - Robert Gould

3

生成音乐作品!阅读关于David Cope和他的程序Emily Howell的内容。


3
也许可以寻找巡回销售员之旅。我最近尝试在巴黎的66个地点找到一次步行游览,我发现编写所有这些内容非常有趣。我认为我的兴奋源于两个方面:一是我可以绘制旅游路线(这也是蒙娜丽莎想法的好处之一,或者如果你喜欢工程学,乐高结构),二是有很多方法可以进行比较。
  • 你可以使用简单的启发式算法,例如“从某个地方开始,总是去最近的未访问过的位置”。
  • 你可以使用更复杂的启发式算法,例如“按成本递增的顺序添加边缘(任何地方),除非它会导致一个顶点出现三条边缘或更小的循环”。
  • 如果你的成本满足三角不等式,你可以使用近似算法,例如基于最小生成树的简单算法。作为奖励,你可以编写最小生成树代码(也许你甚至可以在那里使用GAs,尽管有快速而简单的精确算法可用)。如果你感到自信,你可以编写基于最小生成树和完美匹配的更难的(3/2)近似算法。
  • 如果你有任何旅行推销员之旅并且它交叉了自己,你可以通过“解开它”来改进它。同样,这假设成本函数上存在一些条件。
  • 你甚至可以尝试自己找到一条路线,并看看是否能打败你的计算机。
  • 最后但并非最不重要的,遗传算法!该问题非常适合GAs,因为有一个非常明确的适应度函数和一种非常容易进行重组的方法。

3

1
这很酷,但现在已经过时了 :( - Robert Gould

3
它已被用于复杂的合成器中生成声音补丁(例如Clavia Nord Modular G2)。我建议也可以尝试在其他设备上使用,例如雅马哈DX7,但我猜想有很多软件替代品可供选择。或者用于图像生成。
请阅读Palle Dahlstedt的论文,了解补丁算法背后的理论。不过看起来该网站目前无法访问...

3
遗传算法非常适合优化和调度。例如,安排一组机器,在时间内安排零件和操作员完成一组任务。虽然这可能不是最令人兴奋的项目,但它确实具有现实世界的应用。

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