231

遗传算法(GA) 和遗传编程(GP) 是有趣的研究领域。

我想知道您使用 GA/GP 解决的具体问题,以及如果您没有自己开发,您使用了哪些库/框架。

问题:

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

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

4

34 回答 34

151

不是家庭作业。

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

该应用程序从一组随机生成的固定长度字符串(“基因”部分)开始,每个字符串对应于标准普尔 500 期货每分钟价格数据中的特定形状以及特定订单(买入或卖出)以及止损和止盈金额。每个字符串(或“基因”)都通过运行 3 年的历史数据来评估其利润表现;每当指定的“形状”与历史数据匹配时,我都会假设相应的买入或卖出订单并评估交易结果。我添加了一个警告,即每个基因都以固定金额开始,因此可能会破产并完全从基因库中删除。

在对种群进行每次评估后,幸存者被随机杂交(仅混合来自两个父母的位),一个基因被选为父母的可能性与其产生的利润成正比。我还添加了点突变的可能性来增加一些趣味性。在这样的几百代之后,我最终得到了一组基因,这些基因可以将 5000 美元变成平均约 10000 美元,而没有死亡/破碎的机会(当然,根据历史数据)。

不幸的是,我从来没有机会现场使用这个系统,因为我的老板在不到 3 个月的时间里以传统方式交易损失了近 100,000 美元,他失去了继续这个项目的意愿。回想起来,我认为该系统会获得巨额利润——不是因为我一定做对了任何事情,而是因为我产生的基因群体恰好偏向于买单(而不是卖单)大约 5: 1个比率。正如我们以 20/20 的后见之明所知道的那样,市场在 1995 年之后略有上涨。

于 2009-10-08T15:11:52.377 回答
90

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

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

环境包含食物和危险。食物增加能量,当你有足够的能量时,你可以交配。危险会减少能量,如果能量为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

食客截图

于 2009-10-15T21:20:46.163 回答
54

2004 年 1 月,飞利浦 New Display Technologies 联系了我,他们正在为第一款商业电子墨水 Sony Librie 创建电子设备,该电子墨水仅在日本发布,比亚马逊 Kindle 和其他产品在美国上市早几年一个欧洲。

飞利浦工程师遇到了一个大问题。在该产品本应投放市场的几个月前,它们在换页时仍然在屏幕上出现重影。问题在于产生静电场的 200 个驱动器。这些驱动器中的每一个都有一定的电压,必须设置在零到 1000 mV 或类似的东西之间。但是,如果您更改其中之一,它将改变一切。

因此,单独优化每个驱动器的电压是不可能的。可能的值组合的数量以十亿计,一个特殊的相机评估单个组合大约需要1分钟。工程师们尝试了许多标准的优化技术,但都没有成功。

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

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

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

于 2010-09-11T22:16:21.163 回答
53

我在婚宴上使用 GA 来优化座位分配。80 位客人超过 10 桌。评估功能的基础是让人们知道他们的约会,把有共同点的人放在一起,把观点截然相反的人放在不同的桌子上。

我跑了好几次。每次,我得到九张好牌桌,还有一张全是奇数球。最后,我的妻子完成了座位分配。

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

更新:因为有几个人问如何......

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

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

因此,染色体可以随机生成、突变并与其他染色体交叉,并且总是会产生有效的解决方案。

于 2009-10-19T22:52:04.730 回答
35

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

我们有关于交易的几十个(布尔)特征的数据,每个特征都被赋予一个值并加起来。如果总数高于阈值,则交易是欺诈。GA 将创建大量随机值集,根据已知数据的语料库对它们进行评估,选择得分最高的值(在欺诈检测和限制误报数量方面),然后从每一代产生新一代的候选人。经过一定数量的世代后,得分最高的一组值被认为是获胜者。

创建已知数据的语料库进行测试是该系统的致命弱点。如果您等待退款,那么您在尝试响应欺诈者时会落后几个月,因此有人必须手动审查大量交易以建立该数据集,而不必等待太久。

这最终确定了绝大多数的欺诈行为,但在最容易欺诈的项目上,它不能完全低于 1%(鉴于 90% 的传入交易可能是欺诈,这做得很好)。

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

总而言之,它避免了手动尝试调整数十个欺诈指标的相对值时出现的一些失误,并且始终提出比我手动创建的更好的解决方案。AFAIK,它仍在使用中(我写它大约 3 年后)。

于 2009-10-19T16:10:59.257 回答
22

除了一些常见的问题,比如旅行推销员和Roger Alsing 的蒙娜丽莎程序的变体,我还编写了一个进化数独求解器(这需要我有更多的原创想法,而不仅仅是重新实现别人的想法)。有更可靠的算法可以解决数独问题,但进化方法效果很好。

在过去的几天里,在 Reddit 上看到这篇文章后,我一直在玩一个进化程序来为扑克寻找“冷牌”。目前还不是很令人满意,但我认为我可以改进它。

我有自己的用于进化算法的框架。

于 2009-10-08T16:10:17.797 回答
22

足球小费。我建立了一个 GA 系统来预测 AFL(澳式橄榄球)每周比赛的结果。

几年前,我厌倦了标准的工作足球池,每个人都只是上网并从媒体上的一些专家那里挑选。所以,我认为击败一群广播新闻专业的学生不会太难,对吧?我的第一个想法是获取梅西评级的结果,然后在赛季结束时揭示我赢得名声和荣耀后的策略。然而,由于我从未发现梅西不追踪 AFL 的原因。我的愤世嫉俗者认为这是因为每场 AFL 比赛的结果基本上都是随机的,但我对最近规则变化的抱怨属于不同的论坛。

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

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

结果:略高于中间值。没有大笔现金奖励,也没有我可以用来击败维加斯的系统。不过这很有趣。

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

于 2009-10-16T00:30:23.417 回答
18

早在 1992 年,我就为我的公司为货运行业开发的 3D 激光表面轮廓系统开发了自制 GA。该系统依赖于 3 维三角测量,并使用了定制的激光线扫描仪、512x512 相机(带有定制捕获硬件)。相机和激光之间的距离永远不会是精确的,相机的焦点也不会出现在您预期的 256,256 位置!

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

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

这个技巧很有效。至少可以说我大吃一惊!在大约 10 代之内,我的“虚拟”立方体(从原始扫描生成并从校准参数重新创建)实际上看起来像一个立方体!在大约 50 代之后,我得到了我需要的校准。

于 2010-09-11T11:48:48.027 回答
11

当您计划粉刷房屋时,通常很难获得准确的颜色组合。通常,您会想到一些颜色,但它不是其中一种颜色,供应商会向您展示。

昨天我的GA研究员Prof.提到了一个德国的真实故事(对不起,我没有更多的参考资料,是的,如果有人要求我可以找到它)。这个人(我们称他为颜色人)过去常常从门口帮助人们找到确切的颜色代码(以RGB表示),这将是客户心中所想的壁橱。他会这样做:

那个颜色的家伙曾经随身携带一个使用 GA 的软件程序。他过去常常从 4 种不同的颜色开始——每种都编码为编码染色体(其解码值将是 RGB 值)。消费者选择 4 种颜色中的 1 种(最接近他/她心目中的颜色)。然后,该程序会将最大适应度分配给该个体,并使用突变/交叉转移到下一代。重复上述步骤,直到消费者找到确切的颜色,然后颜色人用来告诉他 RGB 组合!

通过将最大适合度分配给与消费者心目中的颜色相近的颜色,颜色专家的计划正在增加收敛到消费者心目中的颜色的机会。我发现它很有趣!

既然我有一个-1,如果你计划更多的-1,请。说明这样做的原因!

于 2009-10-11T14:58:27.557 回答
8

几周前,我提出了一个关于 SO 的解决方案,使用遗传算法来解决图形布局问题。这是一个约束优化问题的例子。

同样在机器学习领域,我从头开始用 c/c++ 实现了一个基于 GA 的分类规则框架。
我还在一个示例项目中使用了 GA 来训练人工神经网络(ANN),而不是使用著名的反向传播算法

此外,作为我研究生研究的一部分,我使用 GA 训练隐马尔可夫模型,作为基于 EM 的Baum-Welch算法的附加方法(再次使用 c/c++)。

于 2009-10-15T23:42:41.103 回答
8

作为我本科 CompSci 学位的一部分,我们被分配了为 Jikes 研究虚拟机寻找最佳 jvm 标志的问题。这是使用 Dicappo 基准套件评估的,该套件将时间返回到控制台。我编写了一个分布式基因算法,它切换了这些标志以改善基准套件的运行时间,尽管它需要数天时间才能运行以补偿影响结果的硬件抖动。唯一的问题是我没有正确了解编译器理论(这是分配的目的)。

我本可以使用现有的默认标志为初始种群播种,但有趣的是,该算法发现了与 O3 优化级别非常相似的配置(但实际上在许多测试中更快)。

编辑:此外,我在 Python 中为作业编写了自己的遗传算法框架,并仅使用 popen 命令运行各种基准测试,尽管如果它不是评估作业,我会查看 pyEvolve。

于 2009-10-19T17:32:32.440 回答
7

首先,Jonathan Koza 的“Genetic Programming”(在亚马逊上)几乎是一本关于遗传和进化算法/编程技术的书,有很多例子。我强烈建议检查一下。

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

于 2009-10-15T10:54:13.870 回答
7

我是研究使用进化计算 (EC) 自动修复现有程序中的错误的团队的一员。我们已经成功修复了现实世界软件项目中的一些实际错误(请参阅此项目的主页)。

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

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

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

进化计算的一个很好的方面是该技术的简单性使得编写您自己的自定义实现而不会有太多困难成为可能。有关遗传编程的良好免费介绍性文本,请参阅遗传编程领域指南

于 2010-09-12T21:43:23.640 回答
6

我和一位同事正在研究一种使用我们公司要求的各种标准将货物装载到卡车上的解决方案。我一直在研究遗传算法解决方案,而他正在使用带有积极修剪的分支定界。我们仍在实施此解决方案,但到目前为止,我们已经取得了不错的成果。

于 2009-10-19T16:08:14.937 回答
5

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

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

于 2010-09-12T03:44:33.373 回答
4

我做了一个完整的GA框架,命名为“GALAB”,解决了很多问题:

  • 定位 GSM ANT (BTS) 以减少重叠和空白位置。
  • 资源约束项目调度。
  • 进化图片创作。(进化论
  • 旅行推销员问题。
  • N-Queen & N-​​Color 问题。
  • 骑士之旅和背包问题。
  • 魔方和数独谜题。
  • 字符串压缩,基于 Superstring 问题。
  • 二维包装问题。
  • 微型人工生命APP。
  • 魔方谜题。
于 2010-08-12T03:55:55.560 回答
4

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

于 2010-09-11T17:49:03.430 回答
4

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

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

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

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

于 2010-09-13T22:44:19.997 回答
3

不知道功课算不算...

在我学习期间,我们推出了自己的程序来解决旅行推销员问题。

我们的想法是对几个标准(映射问题的难度、性能等)进行比较,我们还使用了其他技术,例如模拟退火

它工作得很好,但我们花了一段时间才理解如何正确地进行“复制”阶段:将手头的问题建模成适合遗传编程的东西真的让我觉得最难的部分......

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

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

于 2009-10-08T14:46:09.183 回答
3

我使用了一种简单的遗传算法来优化表示为二进制字符串的波的信噪比。通过在几百万代中以某种方式翻转比特,我能够产生一种变换,从而使该波具有更高的信噪比。该算法也可以是“模拟退火”,但在这种情况下没有使用。从本质上讲,遗传算法很简单,这与我见过的一个用例一样简单,所以我没有使用生成创建和选择的框架——只有随机种子和信噪比功能在手。

于 2009-10-19T18:50:01.913 回答
3

作为我论文的一部分,我为多目标优化算法 mPOEMS(具有进化改进步骤的多目标原型优化)编写了一个通用 Java 框架,这是一个使用进化概念的 GA。它是通用的,所有与问题无关的部分都与问题相关的部分分离,并且提供了一个接口来使用框架,只添加与问题相关的部分。因此,想要使用该算法的人不必从零开始,它极大地方便了工作。

你可以在这里找到代码。

您可以使用此算法找到的解决方案已在科学工作中与最先进的算法 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

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

于 2010-12-31T12:48:06.120 回答
2

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

它工作得相当好(比我以前的方法要好得多,它是评估每一个可能的组合......在非平凡的问题规模上,它需要数年才能完成!),唯一的问题是没有办法告诉是否已达到最佳解决方案。您只能决定当前的“尽力而为”是否足够好,或者让它运行更长时间,看看它是否可以做得更好。

于 2009-10-15T21:30:06.257 回答
2

在 codechef.com 上进行了一场比赛(顺便说一句,这是一个很棒的网站,每月一次的编程比赛),其中一个应该解决一个无法解决的数独(一个应该尽可能接近,尽可能少的错误列/行/等)。

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

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

于 2009-10-15T23:52:15.500 回答
2

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

于 2009-10-20T05:02:02.613 回答
2

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

于 2010-11-19T07:30:08.993 回答
2

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

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

一般来说,我的策略是使用基于 POJO 的基因表示,然后我应用特定的接口实现来进行选择、突变、交叉策略和标准点。然后,根据我需要作为启发式测量应用的策略和标准,我的适应度函数基本上变得非常复杂。

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

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

于 2011-06-01T02:31:26.467 回答
1

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

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

于 2009-10-15T21:40:01.210 回答
1

在阅读了《盲人钟表匠》之后,我对道金斯所说的帕斯卡程序很感兴趣,他说他开发的目的是创建可以随时间进化的生物模型。我有足够的兴趣使用Swarm编写自己的代码。我没有制作他所做的所有花哨的小动物图形,但我的“染色体”控制了影响生物体生存能力的特征。他们生活在一个简单的世界里,可以互相对抗,也可以对抗他们的环境。

有机体的生存或死亡部分是由于偶然性,但也取决于它们对当地环境的适应程度、它们消耗营养的程度以及它们繁殖的成功程度。这很有趣,但也更多地向我的妻子证明我是个极客。

于 2009-10-15T21:44:05.927 回答
1

那是不久前的事了,但我推出了一个 GA 来改进有效的图像处理内核,以从哈勃太空望远镜 (HST) 图像中去除宇宙射线痕迹。标准方法是用哈勃望远镜进行多次曝光,只保留所有图像中相同的东西。由于 HST 时间如此宝贵,我是一个天文学爱好者,最近参加了进化计算大会,我考虑使用 GA 来清理单次曝光。

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

它实际上有点工作,但还不足以保证放弃原始方法。如果我的论文没有时间限制,我可能已经扩展了算法可用的遗传部件箱。我很确定我可以显着改善它。

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

于 2010-09-11T13:34:34.760 回答
1

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

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

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

输出到两个“轮子”。如果两个轮子都向前,那家伙就向前。如果车轮方向相反,那家伙就会转身。输出的强度决定了车轮转动的速度。

生成了一个简单的迷宫。这真的很简单——甚至很愚蠢。屏幕底部是起点,顶部是球门,中间有四堵墙。每面墙都有一个随机抽取的空间,所以总是有一条路径。

我从一开始就开始了随机的家伙(我认为他们是错误)。一旦一个人达到目标,或者达到时间限制,就会计算适应度。它与当时到目标的距离成反比。

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

我以为他们会发展出“左墙拥抱”的行为,但他们似乎总是遵循一些不太理想的东西。在每一次实验中,虫子都会聚集成螺旋状。它们会向外盘旋,直到碰到右侧的一堵墙。他们会遵循这一点,然后当他们到达间隙时,他们会螺旋下降(远离间隙)并四处走动。他们会向左转 270 度,然后通常进入间隙。这将使他们穿过大部分墙壁,并且经常到达目标。

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

我试图让他们制定更好的策略。我使神经网络复杂化——添加记忆和一切。它没有帮助。我总是看到相同的策略。

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

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

于 2010-09-11T15:56:12.950 回答
1

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

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

于 2010-09-11T20:28:53.737 回答
0

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

Neuroevolution and Generative and Developmental Systems,研究生班:开发了一个用于计算机玩家的最小-最大树的奥赛罗棋盘评估器。玩家被设置为深入评估游戏,并被训练与一个贪婪的电脑玩家对战,他们认为角落至关重要。训练玩家看到了 3 或 4 深(我需要查看我的配置文件才能回答,它们在不同的计算机上)。该实验的目的是将新颖性搜索与游戏板评估领域中基于适应度的传统搜索进行比较。不幸的是,结果相对不确定。虽然新颖性搜索和基于适应度的搜索方法都找到了解决方案(表明新颖性搜索可用于奥赛罗领域),可以有一个没有隐藏节点的域的解决方案。显然,如果有可用的线性解决方案,我并没有创建一个足够称职的培训师(并且有可能马上就有一个解决方案)。我相信这次我实施基于健身的搜索比实施新颖性搜索更快地产生了解决方案。(并非总是如此)。无论哪种方式,我都使用 ANJI,“Another NEAT Java Implementation”作为神经网络代码,并进行了各种修改。我自己写的奥赛罗游戏。我相信这次我实施基于健身的搜索比实施新颖性搜索更快地产生了解决方案。(并非总是如此)。无论哪种方式,我都使用 ANJI,“Another NEAT Java Implementation”作为神经网络代码,并进行了各种修改。我自己写的奥赛罗游戏。我相信这次我实施基于健身的搜索比实施新颖性搜索更快地产生了解决方案。(并非总是如此)。无论哪种方式,我都使用 ANJI,“Another NEAT Java Implementation”作为神经网络代码,并进行了各种修改。我自己写的奥赛罗游戏。

于 2010-09-11T13:52:33.397 回答
0

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

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

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

子图像可以有几个细节,并非全部实现:+size、skew、rotation、+location、+image_url。

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

于 2010-11-24T15:25:11.577 回答
0

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

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

于 2011-05-19T05:26:18.430 回答