遗传算法(GA)和遗传规划(GP)是一个有趣的研究领域。
我想知道你使用GA/GP解决的具体问题,以及如果你没有自己的库/框架,你使用了什么库/框架。
问题:
你用GA/GP解决过什么问题? 你使用了哪些库/框架?
我在寻找第一手的经验,所以请不要回答,除非你有。
遗传算法(GA)和遗传规划(GP)是一个有趣的研究领域。
我想知道你使用GA/GP解决的具体问题,以及如果你没有自己的库/框架,你使用了什么库/框架。
问题:
你用GA/GP解决过什么问题? 你使用了哪些库/框架?
我在寻找第一手的经验,所以请不要回答,除非你有。
当前回答
我开发了一个基于多线程摆动的模拟机器人导航通过一组随机网格地形的食物源和矿山,并开发了一个基于遗传算法的策略,探索机器人行为的优化和机器人染色体的适者生存基因。这是使用每个迭代周期的图表和映射来完成的。
从那以后,我发展了更多的游戏行为。我最近为自己构建的一个示例应用程序是一个遗传算法,用于解决在英国寻找路线时的旅行销售人员问题,考虑到起始和目标状态,以及一个/多个连接点,延误,取消,建筑工程,高峰时间,公共罢工,考虑最快和最便宜的路线。然后为某一天的路线提供一个平衡的建议。
一般来说,我的策略是使用基于POJO的基因表示,然后为选择、突变、交叉策略和标准点应用特定的接口实现。我的适应度函数就会变得非常复杂,这是基于我需要作为启发式测量应用的策略和标准。
我还研究了将遗传算法应用于代码中的自动化测试,使用系统突变周期,其中算法理解逻辑,并尝试确定带有代码修复建议的错误报告。基本上,这是一种优化我的代码并提供改进建议的方法,以及一种自动发现新编程代码的方法。我还尝试将遗传算法应用于音乐制作和其他应用。
一般来说,我发现进化策略就像大多数元启发式/全局优化策略一样,一开始学习很慢,但随着解决方案越来越接近目标状态,只要你的适应度函数和启发式很好地对齐,在你的搜索空间内产生收敛,它们就会开始学习。
其他回答
在工作中,我遇到了这样一个问题:给定M个任务和N个dsp,如何将任务分配给dsp是最好的?“最佳”定义为“最大负载DSP的负载最小化”。有不同类型的任务,不同的任务类型有不同的性能分支,这取决于它们被分配到哪里,所以我将一组工作到dsp的分配编码为“DNA字符串”,然后使用遗传算法来“培育”我所能“培育”的最佳分配字符串。
它运行得相当好(比我之前的方法好得多,之前的方法是评估每个可能的组合……对于非平凡问题的大小,它将需要数年才能完成!),唯一的问题是无法判断是否已经达到了最优解。你只能决定当前的“最大努力”是否足够好,或者让它运行更长时间,看看它是否可以做得更好。
As part of my undergraduate CompSci degree, we were assigned the problem of finding optimal jvm flags for the Jikes research virtual machine. This was evaluated using the Dicappo benchmark suite which returns a time to the console. I wrote a distributed gentic alogirthm that switched these flags to improve the runtime of the benchmark suite, although it took days to run to compensate for hardware jitter affecting the results. The only problem was I didn't properly learn about the compiler theory (which was the intent of the assignment).
我本可以用现有的默认标志来播种初始种群,但有趣的是,算法发现了一个与O3优化级别非常相似的配置(但实际上在许多测试中更快)。
编辑:我还用Python写了我自己的遗传算法框架,只是使用popen命令来运行各种基准测试,尽管如果不是评估作业,我会看看pyEvolve。
进化计算研究生班: 开发了TopCoder马拉松比赛49:megpartty的解决方案。我的小组正在测试不同的域表示法,以及不同的表示法如何影响ga找到正确答案的能力。我们为这个问题编写了自己的代码。
Neuroevolution and Generative and Developmental Systems, Graduate Class: Developed an Othello game board evaluator that was used in the min-max tree of a computer player. The player was set to evaluate one-deep into the game, and trained to play against a greedy computer player that considered corners of vital importance. The training player saw either 3 or 4 deep (I'll need to look at my config files to answer, and they're on a different computer). The goal of the experiment was to compare Novelty Search to traditional, fitness-based search in the Game Board Evaluation domain. Results were relatively inconclusive, unfortunately. While both the novelty search and fitness-based search methods came to a solution (showing that Novelty Search can be used in the Othello domain), it was possible to have a solution to this domain with no hidden nodes. Apparently I didn't create a sufficiently competent trainer if a linear solution was available (and it was possible to have a solution right out of the gates). I believe my implementation of Fitness-based search produced solutions more quickly than my implementation of Novelty search, this time. (this isn't always the case). Either way, I used ANJI, "Another NEAT Java Implementation" for the neural network code, with various modifications. The Othello game I wrote myself.
我曾经尝试制作一个围棋电脑播放器,完全基于基因编程。每个程序都将被视为一系列动作的评估函数。即使是在一个相当小的3x4板上,制作的程序也不是很好。
我使用Perl,并自己编写了所有代码。我今天会做不同的事情。
我是一个研究使用进化计算(EC)来自动修复现有程序中的错误的团队的成员。我们已经在现实世界的软件项目中成功地修复了一些真实的错误(参见本项目的主页)。
这种EC修复技术有两种应用。
The first (code and reproduction information available through the project page) evolves the abstract syntax trees parsed from existing C programs and is implemented in Ocaml using our own custom EC engine. The second (code and reproduction information available through the project page), my personal contribution to the project, evolves the x86 assembly or Java byte code compiled from programs written in a number of programming languages. This application is implemented in Clojure and also uses its own custom built EC engine.
进化计算的一个优点是技术的简单性,使得编写自己的自定义实现不太困难。有关遗传规划的一个很好的免费的介绍性文本,请参阅遗传规划的现场指南。