什么是遗传算法/遗传编程解决方案的好例子?

时间:2009-10-08 14:37:54

标签: algorithm artificial-intelligence genetic-algorithm evolutionary-algorithm

Genetic algorithms(GA)和genetic programming(GP)是有趣的研究领域。

我想知道您使用GA / GP解决的具体问题,以及您未使用自己的库/框架。

问题:

  • 您使用GA / GP解决了哪些问题?
  • 您使用了哪些库/框架?

我正在寻找第一手经验,所以除非你有这个经验,否则请不要回答。

33 个答案:

答案 0 :(得分:141)

作业。

我作为专业程序员的第一份工作(1995年)是为S& P500期货编写基于遗传算法的自动交易系统。该应用程序是用Visual Basic 3 [!]编写的,我不知道我当时做了什么,因为VB3甚至没有类。

应用程序从一群随机生成的固定长度字符串(“基因”部分)开始,每个字符串对应于S& P500期货的每分钟价格数据中的特定形状,如以及特定订单(买入或卖出)以及止损和止盈金额。通过3年的历史数据评估每个字符串(或“基因”)的利润表现;只要指定的“形状”与历史数据匹配,我就会假定相应的买入或卖出订单并评估交易的结果。我添加了一个警告,即每个基因都以固定的金额开始,因此可能会破裂并完全从基因库中移除。

在对群体进行每次评估后,幸存者被随机杂交(通过混合来自两个亲本的比特),基因被选择作为亲本的可能性与其产生的利润成比例。我还添加了点突变的可能性,以增加一些东西。经过几百代之后,我最终得到了一大堆基因,可以将5000美元变成平均约10000美元,没有死亡/破产的可能性(当然,根据历史数据)。

不幸的是,我从来没有机会使用这个系统,因为我的老板在不到3个月的时间内以传统的方式损失了近10万美元,他失去了继续这个项目的意愿。回想起来,我认为该系统会带来巨大的利润 - 不是因为我必须做任何事情,而是因为我生产的基因群体恰好偏向买单(而不是卖单)大约5: 1比率。正如我们所知道的那样,20/20后市场在1995年之后市场有所上升。

答案 1 :(得分:88)

我做了一些生活在这个小世界的小动物。他们有一个神经网络大脑,它接收了来自世界的一些输入,输出是一个用于在其他动作中移动的矢量。他们的大脑是“基因”。

该计划始于一群随机大脑的随机人群。输入和输出神经元是静态的,但介于两者之间的不是。

环境包含食物和危险。食物增加能量,当你有足够的能量,你可以交配。危险会减少能量,如果能量为0,他们就会死亡。

最终,这些生物进化到世界各地,寻找食物并避免危险。

然后我决定做一个小实验。我给了生物大脑一个叫做“嘴”的输出神经元和一个叫做“耳朵”的输入神经元。重新开始,并惊讶地发现他们进化到最大化空间,每个相应的生物将留在其各自的部分(食物随机放置)。他们学会了彼此合作,而不是互相帮助。总有例外。

然后我尝试了一些有趣的事情。我死去的生物会成为食物。试着猜猜发生了什么!两种类型的生物进化,一种类似于群体攻击,一种是高度回避。

那么这里的教训是什么?沟通意味着合作。一旦你引入一个伤害另一个元素的元素你获得了某些东西,那么合作就会被破坏。

我想知道这是如何反映自由市场和资本主义制度的。我的意思是,如果企业可以伤害他们的竞争并且侥幸逃脱,那么很明显他们将竭尽全力干扰竞争。

编辑:

我是用C ++编写的,没有使用框架。写了我自己的神经网络和GA代码。埃里克,谢谢你说这是合情合理的。人们通常不相信GA的权力(虽然限制是显而易见的),直到他们玩它。 GA简单但不简单。

对于怀疑者来说,神经网络已被证明能够模拟任何功能,如果它们有多个层。 GA是一种非常简单的方法来导航解决方案空间,找到本地和潜在的全局最小值。将GA与神经网络相结合,您可以找到找到通用问题近似解的函数。因为我们正在使用神经网络,所以我们正在优化某些输入的函数,而不是某些函数的输入,因为其他输入使用GA

以下是生存示例的演示代码:http://www.mempko.com/darcs/neural/demos/eaters/ 构建说明:

  • 安装darcs,libboost,liballegro,gcc,cmake,make
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

Eaters Screenshot

答案 2 :(得分:49)

我在婚礼招待会上使用GA来优化座位分配。超过10桌的80位客人。评估功能的基础是让人们了解日期,将人们共同拥有的东西放在一起,并让人们在不同的桌子上保持极端相反的观点。

我跑了好几次。每一次,我都有九张好桌子,还有一张奇怪的球。最后,我的妻子做了座位安排。

我的旅行推销员优化器使用了一种新的染色体到行程的映射,这使得染色体的繁殖和变异变得微不足道,而没有产生无效旅行的风险。

更新:因为有几个人问过......

从一系列来宾(或城市)开始,以一些任意但一致的顺序,例如按字母顺序排列。将此称为参考解决方案。将客人的索引视为他/她的座位号。

我们不是试图直接在染色体中编码这种排序,而是编码将参考解决方案转换为新解决方案的指令。具体来说,我们将染色体视为数组中的索引列表进行交换。为了解码染色体,我们从参考解决方案开始并应用染色体指示的所有交换。在数组中交换两个条目总是会产生一个有效的解决方案:每个访客(或城市)仍然只出现一次。

因此,染色体可以随机生成,变异,并与其他染色体交叉,并始终产生有效的解决方案。

答案 3 :(得分:47)

2004年1月,飞利浦新显示技术公司联系了我,他们正在为亚马逊Kindle和其他公司在亚马逊Kindle上发布的第一款商业电子墨水索尼Librie创建电子产品。美国和欧洲的市场。

飞利浦工程师遇到了一个重大问题。在产品推向市场的几个月前,他们在更换页面时仍然在屏幕上出现重影。问题是创造静电场的200名司机。这些驱动器中的每一个都有一定的电压,必须设置在0到1000 mV之间或类似的东西。但是,如果你改变了其中一个,它将改变一切。

因此无法单独优化每个驱动器的电压是不可能的。可能的值组合的数量是数十亿,并且特殊相机花费大约1分钟来评估单个组合。工程师已经尝试了许多标准的优化技术,但没有什么可以接近的。

主管工程师联系了我,因为我之前已经向开源社区发布了一个基因编程库。他问GP / GA是否会有所帮助,以及我是否可以参与其中。我做了,大约一个月我们一起工作,编写和调整GA库,合成数据,并将其集成到他们的系统中。然后,一个周末,他们让它与真实的东西一起运行。

接下来的星期一,我收到了他和他们的硬件设计师发来的这些热情洋溢的电子邮件,讲述了没人能相信GA发现的惊人结果。就是这样。那年晚些时候,该产品进入市场。

我没有得到一分钱,但我得到了'吹牛'的权利。他们从一开始就说他们已经超出预算,所以在我开始研究之前我就知道这笔交易是什么。对于GA的应用来说,这是一个很棒的故事。 :)

答案 4 :(得分:33)

我使用遗传算法(以及一些相关技术)来确定风险管理系统的最佳设置,该系统试图阻止黄金农民使用被盗信用卡支付MMO。该系统将采用“已知”值(欺诈与否)进行数千次交易,并找出最佳组合设置,以正确识别欺诈性交易,而不会产生太多误报。

我们有一些关于交易的几十个(布尔)特征的数据,每个特征都被赋予一个值并总计。如果总数高于阈值,则交易是欺诈。 GA将创建大量随机值集,根据已知数据集对其进行评估,选择得分最高的(在欺诈检测和限制误报数量上),然后交叉繁殖最好的几个每一代都要产生新一代的候选人。在经过一定代数后,最佳得分值被认为是胜利者。

创建要测试的已知数据的语料库是系统的致命弱点。如果你等待退款,那么你在试图回应欺诈者时已经落后了几个月,所以有人必须手动审查大量的交易来建立这些数据,而不必等待太长时间。

这最终确定了绝大部分的欺诈行为,但是对于最易受欺诈的项目而言,这种欺诈行为不能低于1%(考虑到90%的传入交易可能是欺诈行为,这样做很漂亮孔)。

我使用perl做了所有这些。在相当旧的Linux机器上运行一次软件需要1-2个小时才能运行(20分钟通过WAN链接加载数据,剩下的时间用于处理)。任何给定代的大小都受可用RAM的限制。我会一遍又一遍地运行它,只需稍微更改一下参数,就可以找到一个特别好的结果集。

总而言之,它避免了手动试图调整数十个欺诈指标的相对价值所带来的一些失误,并且始终提出了比我手工制作的更好的解决方案。 AFAIK,它仍在使用中(我写完后约3年)。

答案 5 :(得分:21)

除了一些常见的问题,比如旅行推销员和Roger Alsing's Mona Lisa program的变体,我还写了an evolutionary Sudoku solver(这需要我更多的原创思想,而不是只是重新实现别人的想法)。有更可靠的算法来解决Sudokus,但进化方法运作良好。

在过去的几天里,我在Reddit上看到this article之后,一直在玩一个进化程序,为扑克寻找“冷甲板”。目前还不太令人满意,但我认为我可以改进它。

我有my own framework用于进化算法。

答案 6 :(得分:21)

足球小费。我建立了一个GA系统,用于预测AFL(澳大利亚足球规则)中游戏的每周结果。

几年前,我对标准的工作足球池感到厌倦,每个人都只是上网,并从媒体的一些专家那里挑选。所以,我认为打败一大批广播新闻专业并不难,对吧?我的第一个想法是从Massey Ratings得到结果,然后在赛季结束后揭示我赢得名利和荣耀后的策略。然而,由于我从未发现梅西不跟踪AFL的原因。我内心的愤世嫉俗者认为这是因为每个AFL游戏的结果基本上都是随机的,但我对最近规则变化的抱怨属于不同的论坛。

该系统基本上考虑了进攻实力,防守强度,主场优势,每周改进(或缺乏)以及每种改变的速度。这为本赛季的每支球队创建了一组多项式方程。可以计算给定日期的每个匹配的获胜者和分数。目标是找到与所有过去游戏的结果最匹配的系数集,并使用该集来预测即将到来的周游戏。

在实践中,系统会找到准确预测过去90%以上游戏结果的解决方案。然后它会成功选择下周的60-80%的游戏(即不在训练集中的那一周)。

结果:正好在背包中间。没有主要的现金奖励,也没有我可以用来击败拉斯维加斯的系统。这很有趣。

我从头开始构建所有内容,没有使用任何框架。

答案 7 :(得分:17)

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

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

遗传算法在一个晚上被掀起,我创建了一个校准立方体来测试它。我知道立方体尺寸具有高精度,因此我的想法是我的GA可以为每个扫描单元发展一组定制的三角测量参数,以克服生产变化。

诀窍是一种享受。至少可以说,我大惊小怪!在大约10代之内,我的“虚拟”立方体(从原始扫描生成并从校准参数重新生成)实际上看起来像一个立方体!经过大约50代,我得到了我需要的校准。

答案 8 :(得分:11)

当您计划为房屋涂漆时,通常很难获得精确的颜色组合。通常,你会想到一些颜色,但它不是颜色之一,供应商会告诉你。

昨天,我的GA研究员教授在德国提到了一个真实的故事(对不起,我没有进一步的参考,是的,如果有人要求,我可以找到它)。这个家伙(让我们称之为颜色的家伙)曾经从门到门帮助人们找到确切的颜色代码(在RGB中),这将成为客户的壁橱考虑到了。以下是他将如何做到这一点:

color guy 曾经随身携带一个使用GA的软件程序。他过去常常用4种不同的颜色开始 - 每种颜色编码为编码的染色体(其解码值为RGB值)。消费者选择4种颜色中的1种(这是他/她最接近的颜色)。然后,程序会将 fitness 分配给个人,并使用 mutation / crossover 移动到下一个 generation 。上面的步骤将重复进行,直到消费者找到确切的颜色,然后使用 color guy 告诉他RGB组合!

通过将最大适应度分配给消费者所关注的颜色,颜色家伙的程序正在增加收敛到颜色的机会,消费者已经准确地考虑了这一点。我觉得很有趣!

现在我有一个-1,如果你计划更多的-1,请。阐明了这样做的原因!

答案 9 :(得分:7)

首先,Jonathan Koza的“遗传编程”(on amazon)几乎是关于遗传和进化算法/编程技术的书,有很多例子。我强烈建议你查看它。

至于我自己使用的遗传算法,我使用(本土种植的)遗传算法来发展用于对象收集/破坏场景的群算法(实际目的可能是清除雷区)。这是the paper的链接。我所做的最有趣的部分是多阶段适应度函数,这是必要的,因为简单的适应度函数没有为遗传算法提供足够的信息来充分区分群体成员。

答案 10 :(得分:7)

几周前,我建议用solution on SO使用遗传算法来解决图形布局问题。这是约束优化问题的一个例子。

同样在机器学习领域,我从头开始在c / c ++中实现了基于GA的分类规则框架 我还在示例项目中使用GA来训练artificial neural networks(ANN),而不是使用着名的backpropagation algorithm

此外,作为我研究生研究的一部分,我在训练Hidden Markov Models中使用GA作为基于EM的Baum-Welch算法的另一种方法(再次使用c / c ++)。< / p>

答案 11 :(得分:7)

我是调查使用Evolutionary Computation(EC)自动修复现有程序中的错误的团队的一员。我们已成功修复了现实世界软件项目中的一些实际错误(请参阅this project's homepage)。

我们有两种EC修复技术的应用。

  • 第一个(通过项目页面提供的代码和再现信息)演变了从现有C程序解析的抽象语法树,并使用我们自己的自定义EC引擎在Ocaml中实现。

  • 第二个(通过项目页面提供的代码和复制信息),我个人对项目的贡献,演变了从多个程序编写的程序编译的x86程序集或Java字节代码编程语言。此应用程序在Clojure中实现,并且还使用自己的定制EC引擎。

Evolutionary Computation的一个不错的方面是该技术的简单性使得编写自己的自定义实现成为可能,而不会有太多困难。有关遗传编程的免费的免费介绍性文本,请参阅遗传编程实地指南

答案 12 :(得分:5)

几年前,我使用ga来优化asr(自动语音识别)语法,以获得更好的识别率。我从相当简单的选择列表(其中ga正在测试每个插槽的可能术语的组合)开始,然后逐步学习更开放和复杂的语法。通过在一种语音距离函数下测量术语/序列之间的分离来确定适应度。我还尝试在语法上进行弱等效变化,找到一个编译成更紧凑的表示形式(最后我使用直接算法,并且它大大增加了我们可以在应用程序中使用的“语言”的大小)

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

答案 13 :(得分:5)

我和同事正在研究使用我们公司要求的各种标准将货物装载到卡车上的解决方案。我一直致力于遗传算法解决方案,而他正在使用Branch And Bound进行积极的修剪。我们仍在实施此解决方案,但到目前为止,我们已经取得了良好的效果。

答案 14 :(得分:4)

我曾经使用GA来优化内存地址的哈希函数。地址是4K或8K页面大小,因此它们在地址的位模式中显示出一些可预测性(最低有效位全为零;中间位有规律地递增等)原始散列函数是“粗糙的” - 它倾向于集群命中在每三个哈希桶上。改进后的算法具有近乎完美的分布。

答案 15 :(得分:4)

我制作了一个名为“GALAB”的完整GA框架,以解决许多问题:

  • 定位GSM ANT(BTS)以减少重叠&amp;空白位置。
  • 资源约束项目计划。
  • 进化图片创作。 (Evopic
  • 旅行推销员问题。
  • N-Queen&amp; N-Color问题。
  • 骑士之旅&amp;背包问题。
  • 魔方&amp;数独谜题。
  • 字符串压缩,基于Superstring问题。
  • 2D包装问题。
  • 微小的人造生活APP。
  • 魔方。

答案 16 :(得分:3)

我构建了一个简单的GA,用于从正在播放的音乐频谱中提取有用的模式。输出用于驱动winamp插件中的图形效果。

  • 输入:一些FFT帧(想象一个2D浮点阵列)
  • 输出:单个浮点值(输入的加权和),阈值为0.0或1.0
  • 基因:输入权重
  • 适应度函数:占空比,脉冲宽度和BPM在合理范围内的组合。

我有几个GA调整到频谱的不同部分以及不同的BPM限制,因此它们不倾向于收敛到相同的模式。来自每个群体的前4个的输出被发送到渲染引擎。

一个有趣的副作用是,整个人群的平均适应度是音乐变化的一个很好的指标,尽管通常需要4-5秒来计算出来。

答案 17 :(得分:3)

作为我论文的一部分,我为多目标优化算法mPOEMS(具有演化改进步骤的多目标原型优化)编写了一个通用的Java框架,这是一个使用进化概念的GA。它是通用的,所有与问题无关的部分都与问题相关的部分分开,并且界面被设置为仅使用添加与问题相关的部分来使用框架。因此,想要使用该算法的人不必从零开始,并且它促进了很多工作。

您可以找到代码here

使用此算法可以找到的解决方案已经在科学工作中与最先进的算法SPEA-2和NSGA进行了比较,并且已经证明 算法执行可比较甚至更好,具体取决于您衡量性能的指标,尤其取决于您正在查看的优化问题。

你可以找到它here

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

我的论文将此框架应用于项目选择问题: 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

实际上,只要有一点热情,每个人都可以轻松地将通用框架的代码调整为任意的多目标优化问题。

答案 18 :(得分:3)

我不知道家庭作业是否重要......

在学习期间,我们推出了自己的计划来解决旅行商问题。

我的想法是对几个标准进行比较(难以映射问题,表现等),我们还使用了其他技术,如Simulated annealing

它工作得很好,但我们需要花一些时间来理解如何正确地进行“复制”阶段:将手头的问题建模成适合遗传编程的东西真的让我感到震惊,因为最困难的部分......

这是一个有趣的课程,因为我们还涉及神经网络等。

我想知道是否有人在'生产'代码中使用过这种编程。

答案 19 :(得分:2)

在本科生中,我们使用NERO(神经网络和遗传算法的组合)来教授游戏中的机器人以做出明智的决定。这很酷。

答案 20 :(得分:2)

我开发了一种基于多线程摆动的机器人导航模拟,通过一组食物源和矿山的随机网格地形,并开发了一种基于遗传算法的探索机器人行为优化和机器人染色体最适合基因存活的策略。这是使用每个迭代周期的图表和映射完成的。

从那以后,我开发了更多的游戏行为。我最近为自己建立的一个示例应用程序是一个遗传算法,用于解决英国路线搜索中的旅行销售人员问题,考虑到起始和目标状态以及一个/多个连接点,延迟,取消,建筑工程,高峰时间,公开罢工,考虑最快和最便宜的路线。然后为某一天的路线提供平衡的建议。

通常,我的策略是使用基于POJO的基因代表,然后我将特定的接口实现应用于选择,变异,交叉策略和标准点。基于我需要应用作为启发式测量的策略和标准,我的健身功能基本上变得相当复杂。

我还研究了使用系统变异周期将遗传算法应用到代码中的自动化测试中,其中算法理解逻辑并尝试确定错误报告并提供代码修复建议。基本上,这是一种优化我的代码并提供改进建议的方法,以及一种自动发现新程序代码的方法。我还尝试将遗传算法应用于其他应用程序中的音乐制作。

一般来说,我发现像大多数元启发式/全局优化策略这样的进化策略,它们起初学习起来很慢,但随着解决方案变得越来越接近目标状态并且只要你的适应度函数和启发式算法很好对齐以在搜索空间内产生这种收敛。

答案 21 :(得分:2)

在学校的研讨会上,我们开发了一个基于音乐模式生成音乐的应用程序。该程序是用Java构建的,输出是带有歌曲的midi文件。我们使用GA的区别aproach来生成音乐。我认为这个程序可以用来探索新的作品。

答案 22 :(得分:2)

我使用简单的遗传算法来优化表示为二进制字符串的波的信噪比。通过在数百万代中以某种方式翻转位,我能够产生一种变换,从而导致该波的信噪比更高。该算法也可以是“模拟退火”,但在这种情况下不使用。遗传算法的核心很简单,这与我见过的用例一样简单,因此我没有使用框架进行生成和选择 - 只有随机种子和信噪比手头的功能。

答案 23 :(得分:2)

在codechef.com上举行了一场比赛(顺便说一下,这是一个很棒的网站,每月编程比赛),其中一个应该解决一个不可解决的数独游戏(一个应该尽可能接近,只需要很少的错误尽可能使用collumns / rows / etc。

我要做的是首先生成一个完美的数独,然后覆盖已经给出的字段。从这个非常好的基础上我使用遗传编程来改进我的解决方案。

在这种情况下我想不出确定性的方法,因为数据是300x300并且搜索花费的时间太长。 / p>

答案 24 :(得分:2)

在工作中我遇到了以下问题:给定M任务和N个DSP,将任务分配给DSP的最佳方法是什么? “最佳”被定义为“最大限度地减少负载最大的DSP的负载”。有不同类型的任务,各种任务类型根据它们的分配位置有不同的性能分支,因此我将作业到DSP分配的集合编码为“DNA字符串”,然后使用遗传算法“繁殖”我能做的最好的作业字符串。

它工作得相当好(比我之前的方法要好得多,就是要评估每个可能的组合......对于非平凡的问题大小,它需要数年才能完成!),唯一的问题是没有判断是否达到最佳解决方案的方法。你只能决定当前的“尽力而为”是否足够好,或者让它运行更长时间以确定它是否可以做得更好。

答案 25 :(得分:1)

我年轻时曾尝试过GA。我在Python中编写了一个模拟器,其工作原理如下。

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

神经网络的输入是检测到触摸的“触角”。较高的值意味着非常接近而0意味着不接触。

输出是两个“轮子”。如果两个车轮向前推进,那个人就往前走了。如果车轮方向相反,那家伙就转过身来。输出强度决定了车轮转速。

生成了一个简单的迷宫。这真的很简单 - 甚至是愚蠢的。屏幕底部有一个开始,顶部有一个目标,中间有四面墙。每个墙都有一个随机取出的空间,所以总有一条路。

我在一开始就开始随机游戏(我认为它们是错误)。一旦一个人达到目标,或达到时间限制,就计算出适合度。它与当时与目标的距离成反比。

然后我将它们配对并“培育”它们以创造下一代。被选择繁殖的概率与其适合度成正比。有时这意味着如果它具有非常高的相对适应性,那么它就会反复繁殖。

我认为他们会发展出“左墙拥抱”的行为,但他们似乎总是追随一些不太理想的东西。在每个实验中,虫子都会聚合成螺旋形。它们会向外螺旋,直到它们碰到右边的墙壁。他们遵循这一点,然后当他们到达间隙时,他们会向下(远离间隙)和周围螺旋式地向下旋转。他们会向左转270度,然后通常进入差距。这将使他们通过大部分墙壁,并经常到达目标。

我添加的一个功能是在基因中加入颜色载体以跟踪个体之间的相关性。几代之后,它们都是相同的颜色,这告诉我应该有更好的育种策略。

我试图让他们制定更好的策略。我复杂的神经网络 - 添加内存和一切。它没有帮助。我总是看到同样的策略。

我尝试了各种各样的事情,例如只有100代后重组的单独基因库。但没有什么可以促使他们采取更好的策略。也许这是不可能的。

另一件有趣的事情是随着时间的推移绘制健身图。有明确的模式,比如在它上升之前最大适应性下降。我从未见过一本关于这种可能性的进化书。

答案 26 :(得分:1)

2007 - 9年,我开发了一些用于读取数据矩阵模式的软件。通常这些图案难以阅读,被缩进到具有各种反射特性的划痕表面,模糊化学蚀刻标记等等。我使用GA来微调视觉算法的各种参数,以在具有已知属性的300个图像的数据库上给出最佳结果。参数包括下采样分辨率,RANSAC参数,侵蚀和膨胀量,低通滤波半径等。在几天内运行优化后,这产生的结果比在优化阶段看不到的一组测试图像上的幼稚值好大约20%。

这个系统完全是从头开始编写的,我没有使用任何其他库。我不反对使用这些东西,只要它们给出可靠的结果,但你必须小心许可兼容性和代码可移植性问题。

答案 27 :(得分:1)

不久之前,我推出了一个GA,用于演化有效的图像处理内核,以消除哈勃太空望远镜(HST)图像中的宇宙射线痕迹。标准方法是使用哈勃望远镜进行多次曝光,并仅保留所有图像中相同的内容。由于HST时间非常宝贵,我是一名天文爱好者,并且最近参加了进化计算大会,我想到了使用GA来清理单次曝光。

个体采用树形,以3x3像素区域作为输入,执行一些计算,并决定是否以及如何修改中心像素。通过将输出与以传统方式清理的图像(即堆叠曝光)进行比较来判断适合度。

它实际上有点工作,但不足以保证原始方法的前述。如果我没有时间限制我的论文,我可能已经扩展了算法可用的遗传部分bin。我很确定我可以对它做出很大的改进。

使用的库:如果我没记错的话,IRAF和cfitsio用于天文图像数据处理和I / O.

答案 28 :(得分:1)

在阅读The Blind Watchmaker之后,我对pascal计划感兴趣道金斯说他已经开发出来创建可以随时间演变的生物模型。我有兴趣使用Swarm编写自己的内容。我没有制作他所做的所有花哨的生物图形,但我的“染色体”控制了影响生物生存能力的特征。他们生活在一个简单的世界中,可以将它们与对方及其环境相互冲击。

生物或死亡部分是由于偶然,但也取决于它们如何有效地适应当地环境,它们如何有效地消耗营养物质。他们如何成功再现。这很有趣,但也更能证明我的妻子我是一个极客。

答案 29 :(得分:1)

我曾经尝试为Go游戏制作一台电脑播放器,完全基于遗传编程。每个程序都将被视为一系列移动的评估函数。虽然制作的节目不是很好,即使在一个相当小的3x4电路板上也是如此。

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

答案 30 :(得分:0)

进化计算研究生班: 为TopCoder Marathon Match 49开发了一个解决方案:MegaParty。我的小组正在测试不同的域表示以及不同的表示将如何影响ga找到正确答案的能力。我们为这个问题推出了自己的代码。

神经进化和生成与发育系统,研究生班: 开发了一个奥赛罗游戏板评估器,用于计算机播放器的最小 - 最大树。该玩家将在游戏中进行一次深入评估,并接受训练,以对抗一个认为至关重要的角落的贪婪计算机玩家。训练玩家看到3或4深(我需要查看我的配置文件来回答,他们在不同的计算机上)。该实验的目的是将新奇搜索与游戏板评估领域中的传统健身搜索进行比较。不幸的是,结果相对不确定。虽然新颖搜索和基于健身的搜索方法都得到了解决方案(显示新特性搜索可以在奥赛罗域中使用),但是可以在没有隐藏节点的情况下为该域提供解决方案。显然,如果有线性解决方案,我没有创建一个足够称职的教练(并且可以在门外找到解决方案)。我相信,基于Fitness的搜索的实现比我实现的Novelty搜索更快地产生了解决方案。 (情况并非总是这样)。无论哪种方式,我使用ANJI,“神经网络代码的另一个NEAT Java实现”,进行了各种修改。我自己写的奥赛罗比赛。

答案 31 :(得分:0)

几个星期前,我建造了这个有趣的小玩意儿。它使用GA生成有趣的互联网图像。有点傻,但笑得好。

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

对此有所了解。这是几个mysql表。一个用于图像列表及其分数(即适应度),另一个用于子图像及其在页面上的位置。

子图像可以包含多个细节,而不是全部实现:+大小,倾斜,旋转,+位置,+ image_url。

当人们对图像的滑稽程度进行投票时,它或多或少地存活到下一代。如果它存活下来,它产生5-10个后代,有轻微的突变。还没有交叉。

答案 32 :(得分:0)

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

模拟运行速度很慢(我认为这是由NetLogo模型引起的)因此我的功能/终端设置受到了很大的限制,限制了搜索空间。尽管如此,我想出了一些很好的解决方案。如果您有这种冲动,可以在我的论文的第3章http://www.cse.unsw.edu.au/~ekjo014/z3157867_Thesis.pdf

中阅读
相关问题