遗传算法/遗传编程解决方案的哪些好例子?[关闭]


227

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

我想知道您使用GA / GP解决的特定问题,以及如果您不自己动手使用的库/框架。

问题:

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

我正在寻找第一手经验,因此,除非您有经验,否则请不要回答。


28
@Jason:感谢您建议使用Google产品。尽管它似乎很有用,但由于它专门针对具有GA / GP经验的SO用户,因此我看不到它如何回答这个问题。
knorv


13
“我们希望答案能够得到……特定专业知识的支持。……”检查!“他的问题可能会引起辩论,辩论,民意调查或扩大讨论范围。” 假。答案很多,但这不是民意调查,也没有很多评论或辩论。为什么关闭了?
Adrian McCarthy

Eureqa程序非常适合遗传程序设计:nutonian.com/products/eureqa
Simon

Answers:


146

不是功课。

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

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

在对种群进行每次评估后,将幸存者随机进行杂交(仅混合来自两个亲本的位),选择基因作为亲本的可能性与其产生的利润成正比。我还添加了点突变的可能性,以使事情更加有趣。经过几百代的研究,我最终得到了一组基因,这些基因可以将5000美元变成大约10000美元的平均水平,而没有死亡/折损的机会(当然,根据历史数据)。

不幸的是,我从来没有机会现场使用该系统,因为我的老板在不到3个月的时间里以传统方式交易损失了近100,000美元,并且他失去了继续进行该项目的意愿。回想起来,我认为该系统本来可以赚取巨额利润-不是因为我必须做正确的事,而是因为我生产的基因数量偏向于购买订单(而不是卖出订单)大约5: 1个比例。以我们20/20的事后观察,我们知道市场在1995年以后有所上涨。


9
“我认为该系统将获得丰厚的利润” –是的,我敢打赌它在回测环境中可以很好地工作;-)
Joel 2010年

30
@Joel:当然可以,但这不是我认为它会有利可图的原因。它本来可以赚钱,因为人们偏向于购买而不是出售。一个仅在1995年至1999年之间随机购买S&P500期货的系统(没有发生任何GA废话)会赚很多钱,但是我们仅回想起来。
MusiGenesis

10
乔尔可能是指“过度拟合”。
埃里克·诺曼德

10
您需要保留一些历史数据以进行测试。最好进行交叉验证。
埃里克·诺曼德

您所说的“形状”是什么意思each of which corresponded to a specific shape in the minute-by-minute price data
CodyBugstein 2015年

89

我做了一个生活在这个小世界中的小动物。他们有一个神经网络的大脑,可以从世界上获得一些输入,输出是其他动作之间运动的媒介。他们的大脑是“基因”。

该计划从随机的小动物和随机的大脑开始。输入和输出神经元是静态的,但中间不是。

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

最终,这些生物进化为在世界各地移动并寻找食物并避免了危险。

然后,我决定做一个小实验。我给了生物大脑一个称为“嘴”的输出神经元和一个称为“耳朵”的输入神经元。重新开始,惊奇地发现它们进化到最大空间,每个生物都停留在其各自的部位(食物被随机放置)。他们学会了互相合作,而不是互相干涉。总是有例外。

然后我尝试了一些有趣的事情。我死了的生物将成为食物。尝试猜测发生了什么!有两种类型的生物进化出来,一种像成群结队地攻击,另一种则高度回避。

那么这里的课程是什么?交流意味着合作。一旦引入一种因素,而伤害另一种因素意味着您有所收获,那么合作就会被破坏。

我不知道这如何反映在自由市场和资本主义制度上。我的意思是,如果企业能够损害竞争并摆脱竞争,那么很明显,他们将尽一切力量损害竞争。

编辑:

我用C ++编写,没有任何框架。编写了我自己的神经网络和GA代码。埃里克(Eric),谢谢您说这是合理的。人们通常不相信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

食者截图


10
而您的图灵奖在哪里?您必须在科学上取得一些疯狂的进步,才能进行除RoadRunner以外的任何实验。

1
同意埃里克。您可以在不到一个小时的时间内编写一个简单的NN(事实上,我已经在一次考试中完成了),而基本的GA不一定要花一两天的时间。这比遗传算法更像是一种A-Life算法,但是我们在这里仍在谈论非常简单和可行的内容。
Kylotan

2
这一点都不是假的...大一毕业后的夏天,我在C#中使用XNA进行了一个非常类似于Funsies的项目,减去了神经网络,使用了GA和大量具有各种特征的生物。例如,一个基因控制着他们的视力-较高意味着较远的视野,较低则意味着较宽的视线半径。障碍物和食物将被随机放置,生物将通过食用食物来补充能量。通过向其添加随机生成的高斯数,性状将发生变异,从而导致基因分布与实际进化过程中呈正态分布。
菲利普·金

2
我在一个研究小组工作,这种事情(ALife)是人们每天都在做的事情。您的故事完全可信,老实说,看到有人会认为这是假的,我有些震惊。再说一次,通常这样做的目的是指出复杂的行为可能源于非常简单的系统-我想这点还不够完善。
卢卡斯2014年

1
我在他的网站上找到了一些证据:www.mempko.com/darcs/neural他说:“我提供了一个小世界中小人物为生存而发展的典范。” 这是示例代码:mempko.com/darcs/neural/demos/eaters
guerda 2014年

51

2004年1月,飞利浦新显示技术公司与我联系,后者正在为首款商业电子墨水电子产品Sony Librie创造电子产品,该产品仅在日本发布,比亚马逊Kindle和其他产品在美国上市早了几年。欧洲。

飞利浦的工程师遇到了一个主要问题。在该产品推向市场之前的几个月,他们在换页时仍然在屏幕上出现鬼影。问题是200个驱动器正在产生静电场。这些驱动器中的每一个都有一定的电压,必须将其设置在零到1000 mV之间或类似的电压。但是,如果您更改其中之一,则将更改所有内容。

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

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

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

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


23
“预算超支”是可笑的。他们当然有钱付给您,但他们选择不付钱。确实令人感到困惑,并表明了大型企业如何利用优秀的程序员。
Martin Capodici 2014年

50

我在婚礼招待会上使用了GA优化座位分配。10张桌子有80位客人。评估功能的基础是让人们与他们的约会保持一致,将有共同点的人们聚在一起,并把观点截然相反的人们放在分开的桌子上。

我跑了好几次。每次,我有9张好桌子,一张有所有奇数球。最后,我的妻子做了座位分配。

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

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

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

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

因此,染色体可以随机产生,变异并与他人杂交,并且将始终产生有效的解。


那是什么新颖的映射?
ManuelAráoz10年

4
@Manuel:我没有直接在“染色体”中编码巡视,而是编码了一个将参考巡视变成解决方案的转换。转换只是索引中城市之间的交换。因此,可以将它们以任何旧的方式进行重组,并且仍然始终会产生一次游览每个城市一次的游览。
阿德里安·麦卡锡

谢谢!我只是对交换方面感到困惑。每个染色体编码一个要交换的索引列表-难道这意味着一个索引在染色体中可以出现多次?
user3019612 2015年

1
染色体的索引为c1,c2,c3,...,cn。“解决方案”是数组a。使用您的参考列表初始化。然后,对于染色体中的每对索引,交换溶液中的两个元素(temp = a[c1]; a[c1] = a[c2]; a[c2] = temp)。两个索引是否相同并不重要,因为a仍然将每个访客(或城市)仅包含一次。
Adrian McCarthy 2015年

33

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

我们有关于交易的几十个(布尔)特征的数据,每个特征都有一个值并累加起来。如果总数高于阈值,则说明该交易是欺诈。遗传算法会创建大量随机值集,根据已知数据集对其进行评估,选择得分最高的值(在欺诈检测和限制误报数量上),然后从每一代产生新一代的候选人。经过几代人的努力之后,最好的一组得分值被认为是赢家。

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

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

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

总而言之,它避免了一些手动调整一些欺诈指标的相对价值所带来的失误,并且始终能提供比我手工创建的更好的解决方案。AFAIK,它仍然在使用中(我写它大约三年后)。


我认为您可以使用神经网络来进行参数调整(尽管要比手动完成要花更长的时间)。
alexpinho98

21

足球小费。我建立了一个GA系统来预测AFL(澳大利亚足球规则)每周比赛的结果。

几年前,我对标准的足球场感到厌烦,每个人都只是上网,并从媒体中挑选一些专家来挑选。因此,我认为击败一群广播新闻专业并不难,对吧?我首先想到的是从梅西评级公司Massey Ratings)获得结果,然后在赢得名声和荣誉后在本赛季结束时透露我的策略。但是,出于某种原因,我从未发现梅西没有追踪AFL。我的愤世嫉俗者认为,这是因为每场AFL比赛的结果基本上都变成了随机机会,但是我对最近规则变化的抱怨属于另一个论坛。

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

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

结果:刚好在包装盒的中间。没有重大的现金奖励,也没有可以用来击败维加斯的系统。虽然很有趣。

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


21

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

在最近的几天里,我在Reddit上看到了这篇文章后,一直在研究一个进化程序来为扑克找到“冷盘” 。目前还不太令人满意,但我认为我可以改善它。

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


17

我在1992年为公司为货运业开发的3D激光表面轮廓系统开发了家用酿造GA。该系统依赖于3D三角剖分,并使用了定制的激光线扫描仪,512x512摄像头(带有定制的捕获硬件)。相机和激光之间的距离永远不会精确,并且在您希望的256,256位置找不到相机的焦点!

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

遗传算法在一个晚上起了作用,我创建了一个校准立方体来对其进行测试。我非常了解立方体的尺寸,因此我的想法是我的遗传算法可以为每个扫描单元开发一套自定义的三角测量参数,从而克服生产变化。

这个招很有效。至少我感到惊讶!在大约十代内,我的“虚拟”多维数据集(从原始扫描生成并从校准参数重新创建)实际上看起来就像一个多维数据集!大约50代之后,我进行了所需的校准。


11

当您计划粉刷房屋时,通常很难获得确切的颜色组合。通常,您会想到一些颜色,但这不是颜色之一,供应商会向您显示。

昨天,我的一位GA研究人员教授提到了德国的一个真实故事(对不起,我没有其他参考,是的,如果有人要求,我可以找到答案)。这个人(我们称他为有色人种)曾经从门到门去帮助人们找到确切的颜色代码(以RGB表示)。与客户所想的壁橱)。这是他的做法:

那个有色人种经常带一个使用GA的软件程序。他曾经从4种不同的颜色开始-每种颜色都编码为一种编码的染色体(其解码后的值为RGB值)。消费者从4种颜色中选择1种(最接近他/她所想到的颜色)。然后,程序将分配最大值个体适应度,并使用mutation / crossover下一代移植。重复上述步骤,直到消费者找到确切的颜色,然后再找到颜色专家告诉他RGB组合!

通过什么消费者心目中分配最大的健身效果颜色关闭,在颜色的家伙的节目越来越多的机会收敛到颜色,消费者心中都有完全相同。我发现它很有趣!

现在我有了-1,如果您打算增加-1,请。阐明这样做的原因!


6
我不会拒绝您的投票,但我猜想那是因为您自己没有这样做。OP特别要求您完成自己的工作。
jprete

这几乎是Richard Dawkins生物形态的简化版本。
尼克·约翰逊,

1
关于颜色的有趣之处在于您不能单独考虑它。色彩顾问不仅仅提供一种颜色-他们有调色板和配色方案。仅选择一种颜色是没有意义的。我没有投票,但是您的答案是扩展了GA的定义。您如何突变/交叉一种颜色?老实说,这是迭代缩小有限数据集的演示。
Kirk Broadhurst,2010年

2
这也许可以解释下降投票的原因:这似乎更像是爬山,而不是GA。
埃里克·诺曼德

8

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

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

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


你好阿姆罗。您是否对通过反向传播和GA获得的结果进行了全面比较?如果可以,您可以与我们分享比较结果吗?您如何实现两个NN的交叉步骤?
lmsasu 2012年

@lmsasu:没什么花哨的:总体中的每个字符串或染色体代表网络的权重和偏差值,并且使用了简单的1或2点交叉算子。我记得,使用GA训练网络需要很长时间。我的实现方式比任何其他方式都更能证明概念(请参见此处,其中有一个控制虚拟扫雷器的玩具示例)...无论如何,应该有很多论文讨论如何使用GA不仅学习权重,而且还能发展网络结构。
Amro 2012年

8

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

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

编辑:同样,我用Python编写了自己的遗传算法框架来进行分配,只是使用popen命令来运行各种基准测试,尽管如果这不是经过评估的分配,我会研究pyEvolve。


7

首先是乔纳森·科扎(Jonathan Koza)的“基因编程”(Genetic Programming)(在亚马逊上)撰写的)是一本有关遗传和进化算法/编程技术的书,其中有许多示例。我强烈建议您检查一下。

至于我自己使用的遗传算法,我使用了一种(自家种植的)遗传算法来发展用于对象收集/破坏场景的群体算法(实际目的可能是清除雷区)。这里是一个链接的文件。我做过的最有趣的部分是多阶段适应度函数,这是必需的,因为简单适应度函数无法为遗传算法提供足够的信息以充分区分人群。


Koza关于GP的系列非常密集,也许不适合GP新手。我建议里卡多·波利(Riccardo Poli)的《遗传程序设计现场指南》(可免费下载),或 梅兰妮·米切尔(Melanie Mitchell
撰写的《

7

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

此EC修复技术有两个应用程序。

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

  • 第二个(代码和再现信息可通过项目页面获得),这是我对项目的个人贡献,它演化了x86汇编代码或Java字节代码,这些代码是用多种编程语言编写的程序编译而成的。该应用程序在Clojure中实现,并且还使用其自己的自定义构建的EC引擎。

进化计算的一个不错的方面是该技术的简单性使得可以编写自己的自定义实现而没有太多困难。有关基因编程的免费良好介绍文字,请参见基因编程现场指南


6

我和一位同事正在研究一种使用公司要求的各种标准将货物装载到卡车上的解决方案。我一直在研究遗传算法解决方案,而他正在使用带有主动修剪功能的Branch And Bound。我们仍在实施此解决方案的过程中,但到目前为止,我们已经取得了良好的结果。


5

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

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


4

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

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

是的,它的来源已在我的GA图书下发布。
MShams,2012年

4

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


3

我不知道家庭作业是否有价值...

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

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

它工作得很好,但是花了我们一段时间来理解如何正确地进行“复制”阶段:将手头的问题建模为适合遗传编程的东西确实让我感到最难。

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

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


3

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

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

我将一些GA调整到频谱的不同部分以及不同的BPM限制,因此它们不会趋向于趋向同一模式。来自每个总体的前4位的输出被发送到渲染引擎。

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


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

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


2

在工作中,我遇到以下问题:给定M个任务和N个DSP,将任务分配给DSP的最佳方法是什么?“最佳”被定义为“最小化最大负载的DSP的负载”。任务的类型不同,并且根据任务分配的位置,各种任务类型的性能也会有所不同,因此我将作业到DSP的任务分配编码为“ DNA字符串”,然后使用遗传算法进行“繁殖”最好的赋值字符串。

它的效果相当好(比我以前的方法要好得多,后者是评估每种可能的组合……在非平凡的问题规模上,要花费数年才能完成!),唯一的问题是无法分辨是否达到最佳解决方案。您只能决定当前的“尽力而为”是否足够好,或者让它运行更长的时间以查看是否可以做得更好。


2

在codechef.com上发生了一场竞赛(顺便说一句,这是一个很棒的站点,每月举行编程竞赛),该竞赛应该解决一个无法解决的数独问题(应尽可能减少错误的列/行/等,从而尽可能地接近数独)。

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

在这种情况下,我想不出确定性的方法,因为数独是300x300的,而且搜索用时太长。


2

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


2

在学校的一个研讨会中,我们开发了一种基于音乐模式生成音乐的应用程序。该程序是用Java构建的,输出是带有歌曲的midi文件。我们使用GA的独特方式来生成音乐。我认为该程序对探索新构图可能很有用。


太好了,我已经尝试过类似的操作:链接
Todor Balabanov

2

在本科生中,我们使用了NERO(神经网络和遗传算法的结合)来教导游戏中的机器人做出明智的决策。太酷了。


2

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

从那以后,我开发了更多的游戏行为。我最近为自己建立的一个示例应用程序是一种遗传算法,用于解决英国的寻路中的旅行商问题,该算法考虑了起点和目标状态以及一个/多个连接点,延误,取消,建筑工程,高峰时间,公开罢工,要考虑最快和最便宜的路线。然后为在特定日期采取的路线提供平衡的建议。

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

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

通常,我发现像大多数元启发式/全局优化策略一样的演化策略,起初学习起来很慢,但是随着解决方案越来越接近目标状态并且您的适应度函数和启发式方法能够很好地协调一致时,它们就会开始发展您的搜索空间内的融合。


1

我曾经尝试过完全基于基因编程来制作Go游戏的计算机播放器。每个程序都将被视为一系列移动的评估功能。即使在相当小的3x4板上,生成的程序也不是很好。

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


1

看完《盲人制表者》后,我对帕斯卡程序感兴趣,道金斯说他已经开发出了可以随着时间而进化的生物模型。我很感兴趣,可以使用Swarm编写自己的游戏。我没有制作他所做的所有奇特生物图,但是我的“染色体”控制了影响生物体生存能力的性状。他们生活在一个简单的世界中,可以与彼此和周围环境相处。

生物的生存或死亡部分是由于偶然的缘故,还取决于它们如何有效适应当地环境,营养吸收的程度以及繁殖的成功程度。这很有趣,但也向我的妻子证明了我是一个极客。


1

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

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

它实际上是可行的,但还不足以保证超越原始方法。如果我的论文不受时间限制,那么我可能已经扩展了该算法可用的遗传部分bin。我很确定我可以对其进行重大改进。

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


1

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

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

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

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

产生了一个简单的迷宫。这真的很简单-甚至很愚蠢。屏幕的底部是起点,顶部是目标,中间有四堵墙。每堵墙都有一个随机取出的空间,因此总会有一条小路。

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

然后,我将它们配对并“繁殖”来创建下一代。被选择繁殖的概率与其适应性成正比。有时,这意味着如果一个人具有很高的相对适应性,就会反复繁殖自己。

我以为他们会表现出“抱抱左墙”的行为,但是他们似乎总是遵循一些不太理想的做法。在每个实验中,虫子都收敛为螺旋状。他们会向外盘旋,直到碰到右边的墙。他们会遵循,然后到达差距时,它们会螺旋下降(远离差距)并四处走动。他们将向左转270度,然后通常进入间隙。这将使他们穿过大多数障碍,并经常达到目标。

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

我试图让他们制定更好的策略。我使神经网络复杂化-增加了内存和所有内容。它没有帮助。我总是看到相同的策略。

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

另一个有趣的事情是绘制一段时间内的适应度。有确定的模式,例如最大适应度在上升之前就下降了。我从未见过关于这种可能性的进化书。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.