不是作业。
我作为一名专业程序员的第一份工作(1995年),是编写一个基于遗传算法的自动交易系统,用于S&P500期货的交易。该应用程序是用Visual Basic 3编写的[!],而我不知道如何在那个时候完成任何任务,因为VB3甚至没有类。
该应用程序以由随机生成的固定长度字符串(“基因”部分)组成的群体开始,每个字符串对应于S&P500期货逐分钟价格数据中的特定形状,以及特定的买入或卖出订单、止损和止盈金额。每个字符串(或“基因”)通过对历史数据进行3年运行来评估其利润表现;每当指定的“形状”与历史数据相匹配时,我就假设相应的买入或卖出订单并评估交易结果。我还添加了一个附加条件,即每个基因都有一定数量的初始资金,并且可能潜在地破产并完全从基因库中删除。
在评估每个群体之后,幸存者会被随机交叉培育(仅通过混合两个父代的比特),选择作为父代的基因的可能性与其产生的利润成比例。我还添加了点突变的可能性,以增加一些乐趣。经过几百代的演化后,我得到了一个基因群体,可以将5000美元转变为平均约10000美元,而没有死亡或破产的风险(当然是在历史数据上)。
不幸的是,我从未有机会在实时市场上使用这个系统,因为我的老板在不到3个月的时间里以传统方式交易亏损了近10万美元,并失去了继续进行该项目的意愿。回顾起来,我认为该系统会获得巨大的利润-不是因为我一定做对了什么,而是因为我产生的基因群体大约以5:1的比率偏向于买入订单(而不是卖出订单)。随着我们对市场的20/20的预见,1995年之后市场上涨了一些。
我创造了一些生活在小世界中的小生物,它们拥有一个神经网络大脑,可以从世界中接收一些输入,并输出一个向量用于移动等其他行为。它们的大脑就是“基因”。
程序从具有随机大脑的随机生物群开始运行。输入和输出神经元是静态的,但中间的内容不是。
环境包含食物和危险。食物增加能量,当你有足够的能量时,你可以繁殖。危险会减少能量,如果能量为0,它们就会死亡。
最终生物进化到能够在世界中移动、寻找食物并避免危险。
然后我决定进行一项小实验。我给了生物的大脑一个名为“嘴巴”的输出神经元以及一个名为“耳朵”的输入神经元。重新开始,惊讶地发现它们进化出最大化空间的方式,每个生物都呆在自己的部分(食物是随机放置的)。它们学会相互合作,不互相干扰。总是有例外。
然后我尝试了一些有趣的事情。死亡的生物将成为食物。猜猜会发生什么!进化出两种类型的生物,一种像群居那样攻击,另一种则高度回避。
所以这里的教训是什么?通信意味着合作。一旦你引入一个伤害另一个人就可以得到好处的元素,那么合作就被破坏了。
我想知道这对自由市场和资本主义系统有什么影响。我的意思是,如果企业能够伤害他们的竞争对手而且“逃脱”的话,那么显然他们会尽一切努力伤害竞争对手。
编辑:
我用C++编写了它,没有使用框架。我编写了自己的神经网络和GA代码。Eric,谢谢您说它是可行的。人们通常不相信GA的力量(虽然局限性很明显),直到他们开始使用它。GA很简单,但并不简单。
对于怀疑者来说,只要神经网络有超过一个层次,它们就被证明能够模拟任何函数。GA是一种很简单的方法,可以在解决方案空间中寻找局部和潜在的全局最小值。将GA与神经网络结合起来,就可以找到为通用问题找到近似解的函数的相当好的方法。因为我们使用的是神经网络,所以我们正在优化某些输入的函数,而不是像其他人一样在输入的函数中使用GA。darcs clone --lazy http://www.mempko.com/darcs/neural/
- cd neural
- cmake .
- make
- cd demos/eaters
- ./eaters
2004年1月,飞利浦新显示技术联系了我,他们正在为首个商用电子墨水产品索尼Librie的电子部件开发技术。索尼Librie在Amazon Kindle和其他产品进入美国和欧洲市场多年之前,已经在日本上市。
飞利浦工程师遇到了一个严重的问题。就在该产品即将上市的几个月前,当翻页时屏幕仍会出现残影。问题出在创造静电场的200个驱动器上。每个驱动器都有一定的电压值,必须在0到1000mV之间进行正确设置。但如果更改其中任何一个驱动器的电压,那么所有驱动器的状态都会变化。
因此,单独优化每个驱动器的电压是不可能的。可能的数值组合数量为数十亿,而特殊摄像头要评估一个组合需要约1分钟时间。工程师们尝试了许多标准的优化技术,但都没有取得实质性进展。
由于我之前发布了一个基因编程库到开源社区,所以主管工程师联系了我。他问我基因编程/遗传算法是否能够帮忙,以及我是否能够参与其中。我接受了邀请,我们在合成数据上共同工作了一个月,我编写和调整了遗传算法库,而他则将其整合到他们的系统中。然后,在一个周末,他们让遗传算法库与实际硬件运行。
随后的星期一,我收到了他和他们的硬件设计师发来的赞许邮件,谈到没有人能够相信遗传算法找到的惊人结果。这就是它的全部。那一年晚些时候,该产品上市了。
我没有因此得到任何报酬,但我获得了“吹嘘”的权利。他们从一开始就说他们已经超出预算了,所以我开始工作之前就知道了这笔交易。这是一个关于遗传算法应用的绝佳案例故事。 :)
temp = a[c1]; a[c1] = a[c2]; a[c2] = temp
)。如果两个索引相同,也没关系,因为a仍将恰好包含每个客人(或城市)一次。 - Adrian McCarthy除了一些常见问题,比如旅行商问题和Roger Alsing的蒙娜丽莎程序的变体,我还编写了一个进化数独求解器(这需要我自己进行一些原创性思考,而不仅仅是重新实现别人的想法)。虽然有更可靠的算法来解决数独,但进化方法也能够很好地工作。
在过去的几天里,我一直在使用进化程序寻找扑克牌中的“冷牌”,之前看到了Reddit上的这篇文章。目前还不太令人满意,但我认为我可以改进它。
我有自己的框架用于进化算法。
足球竞猜。我建立了一个遗传算法系统,用于预测澳式足球联赛(AFL)每周比赛的结果。
几年前,我厌倦了标准的足球池,每个人都只是在网上选一些媒体专家的选择。所以,我想打败一群广播新闻专业的人一定不难,对吧?我的第一个想法是从Massey Ratings获取结果,然后在赢得名声和荣耀后公开我的策略。但是,由于我从未发现Massey跟踪AFL的原因,因此我心中的怀疑者认为这是因为每场AFL比赛的结果基本上已经变成随机事件,但是我对最近规则变化的抱怨属于另一个论坛。
该系统基本上考虑了进攻实力、防守实力、主场优势、每周改进(或缺乏改进)以及这些方面的变化速度。这为每支队伍在整个赛季内创建了一组多项式方程。可以计算出给定日期每场比赛的胜者和得分。目标是找到最接近所有过去比赛结果的系数集,并使用该集进行预测即将到来的比赛。
在实践中,该系统会找到准确预测过去90%以上比赛结果的解决方案。然后成功预测即将到来的一周(即不在训练集中的那一周)的大约60-80%的比赛。
结果:略高于中等水平。没有主要的现金奖励,也没有我可以用来打败拉斯维加斯的系统。不过这很有趣。
我从头开始建立了所有东西,没有使用框架。
我曾为我公司1992年开发的货运行业3D激光表面轮廓系统开发了一款自制遗传算法。
该系统依赖于三维三角测量技术,并使用自定义激光线扫描仪和一个512x512相机(带有自定义捕获硬件)。相机与激光之间的距离永远不可能精确,相机的焦点也不在您期望的256,256位置!
使用标准几何学和模拟退火式方程求解来计算校准参数是一场噩梦。
遗传算法是在一个晚上设计出来的,我创建了一个校准立方体进行测试。我知道立方体的尺寸非常准确,因此我的遗传算法可以为每个扫描单元进化一组定制的三角测量参数,以克服生产变异。
这个技巧起到了惊人的效果。我简直惊呆了!大约经过10代,我的“虚拟”立方体(从原始扫描生成并从校准参数重新创建)实际上看起来像一个立方体!经过大约50代后,我获得了所需的校准。
现在我得到了一个-1,如果你计划再给我更多的-1,请解释一下这样做的原因!