Pyohio 2010:Python的遗传编程

eric floehr(来自智慧)请致电他在Pyohio 2010上呈现的演示文稿。我认为Eric已经捕获了一些有人使用的Pyevolve的功能,例如DB适配器,Dot绘图,交互模式,实时统计等。他还提出了一个有趣的用例他使用遗传编程来旨在根据一些历史数据预测天气:



谢谢埃里克!

未来可以在rpython现在写作

跟随最近的一篇文章争论为什么甲p是Python的未来,我必须说,Pypy不是Python的未来,是现在。当我已经测试过它上次(PYPY-C 1.1.0)用Pyevolve进入优化一个简单的球体功能,它比Unladen吞咽Q2至少2倍,但在那个时候,帕契无法延伸。现在,随着这一新释放的小标题和Jit'ing支持,方案已经改变了。

帕西已经发展了很多(实际上,你可以看到这个进化在这里), 一种好工作在GC系统上完成,保存(与CPython相比)分配的每个对象的8个字节,这对于大量使用对象分配的应用程序非常有趣(GP系统是一个强大示例,因为它们在对象上实现时亚洲金博宝面向导向的语言,每个语法树节点是一个对象)。还努力改善对CPython扩展的支持(在C / C ++中写入),其中一个有点棘手:使用RPYC,通过TCP将远程呼叫进行代理到CPython;但另一个似乎更有效,这是创造的cpyext子系统。By using CPyExt, all you need is to have your CPython API functions implemented in CPyExt, a lot of people is working on this right now and you can do it too, it’s a long road to have a good API coverage, but when you think about advantages, this road becomes small.

为了基准测试CPython,Jython,CPython + Psyco,Unladen燕子和小明,我已经使用过Rastrigin功能优化(该实现的示例在这里例7.Pyevolve 0.6RC1):

f(x)= 10n + \ sum_ {i = 1} ^ {n} {x_ {i} ^ {2}}-10 \ cos(2 \ pi x_ {i})

由于其庞大的搜索空间和局部最小值的数量,Rastrigin函数通常用于测量遗传算法的性能。Rastrigin函数具有全球最低限度x = 0.那里f(x)= 0;为了增加搜索空间和所需资源,我已经使用了40个变量(n = 40.)和10k世代。

以下是有关此基准中使用的版本的信息:

暖身在JVM或PYPY中进行。使用“-ojit”选项执行小组转换器,以便获取Python解释器的JIT版本。The JVM was executed using the server mode, I’ve tested the client and server mode for Sun JVM and IcedTea6, the best results were observed from the server mode using Sun JVM, however when I’ve compared the client mode of IcedTea6 with the client mode of Sun JVM, the best results observed were from IcedTea6 (the same as using server mode in IcedTea6). Unladen Swallow was compiled using the project维基指示用于构建优化的二进制文件。

使用的机器是英特尔(R)核心(TM)2 Duo E4500(2×2.20GHz),具有2GB的RAM。

每个设置的基准(使用墙时间测量)的结果(使用墙壁时间)(这些结果是3个顺序运行中最好的):

如您所见,与CPython 2.6.5和2.0X相比,Pypy与JIT的加速度为2.57倍,而不是Unlyen吞咽当前主干。

小明不仅是Python的未来,而且正在成为现在的未来。帕契不会在Python中只带来Python的实施(这本身就是有价值的结果伟大的努力),但也会带回性能(这是许多人在开始时怀疑,想知道如何在Python中实现Python的实现比C中的实现更快?这里是翻译和JIT魔法进入的地方。当时Python解释器可以整体以高级语言编写(实际上几乎与真正奇怪的语言),Python社区可以专注于改善语言本身而不是花时间解决较低的复杂性级别语言,这不是那些努力的大点吗?

By the way, just to note, PyPy isn’t only a translator for the Python interpreter written in RPython, it’s a translator of RPython, what means that PyPy isn’t only the future of Python, but probably, the future of many interpreters.

Pyevolve 0.6RC1发布!

我很自豪地宣布0.6RC1!这是第一个发布候选,但它对于生产使用非常稳定(从这个0.6版本中,由于社区,我们非常接近一个稳定的Codebase)。亚洲金博宝

看看文档网站什么是新的

我要感谢直接或间接捐赠此版本的人:Boris Gorelik,Amit Saha,Jelle Feringa,Henrik Rudstrom,Matteo de Felice,sigevolution董事会,迈克·贝诺特,Ryan Campbell,Jonas A. Gustavsson,Soham Sadhu,Ernesto Costa,Ido Ben-Tsion,Frank Goodman,Vishal Belsare,Benjamin Bush;还有很多人向我们提供了在其应用程序上使用Pyovolve的经验的反馈。

如下下载,转到下载部分在文档网站。

如果您看到此版本候选人的问题,请创建一个票证报告您的问题Pyevolve Trac.,所以我们可以为官方发布提供修复。

快乐编码!

- Christian S. Perone

pyevolve在行动中,解决了100个城市的TSP问题

这是Pyevolve(开发版)的视频优化了100个城市TSP问题。我已经使用了边缘重组和简单的交换突变方法:

视频是在与前一代相比时,仅当分数发生在分数时的图像输出的构图。亚洲金博宝我将与新的0.6释放一起发布来源,计划在本月(十二月),而不是1月份。

祝福,如果我不能再发布到明年,圣诞快乐,新年快乐!

- Christian S. Perone

Sigevolution上的Pyovolve.

sigevolution200901WebCover.

我很自豪地宣布,Pyovolve是在最后一个问题上的推广sigevolution.(第4卷,第1款),来自ACM特殊兴趣小组的通讯在进化计算上。我要感谢时事通讯编辑器荔枝码头和董事会在文章中的更正以及编写良好的重新格式化版本。

Pyevolve目前在版本0.5中,在几个月内,我将释放新的0.6版本,其中包含目前在开发版本中实现的新主要功能(您可以在SourceForge.net中的Subversion存储库中检查它)。

我希望你喜欢这篇文章!

你的,
- Christian S. Perone

Pyevolve在不同的Python味道上基准测试

因此,我在不同的Python解释器中进行了Pyevolve GP / GA核的比较。I’ve used my Pentium Core 2 Duo (E4500 @ 2.20GHz, 1GB RAM), using Ubuntu 9.04 and Windows XP SP3 just for IronPython 2.6.1 (IronPython doesn’t run with Mono, so I used the win xp with .net 2.0).

使用的口译员是:

Unladen燕子2009Q2.

我尝试使用2009Q3(当前主干),但我认为这尚不稳定,因为它比2009Q2更慢,所以我使用了2009Q2;我使用默认配置参数(./configure)使用GCC 4.3.3编译它。

cpython 2.6.2.

我使用了Ubuntu 9.04的默认CPython包。

cpython 2.5.4

我也使用了ubuntu 9.04的默认cpython包,python2.5包。

PYPY 1.1.0(SVN:R68612)

我使用了存储库的最后一个SVN版本,发行版68612.我的Pentium Core 2 Duo只有1GB的RAM,并且Pypy翻译过程比Java(对不起笑话),所以我用3GB的笔记本RAM创建PYPY-C,花了1小时(我用过-opt = 3)和一个美丽的asciiMandelbrot分形!!

Jython 2.5.1.

我使用了Jython项目网站的默认安装程序。我用了太阳JRE 1.6.0_16。

IronPython 2.6.10920.0.

我使用了2.6 rc1,在ironPython项目站点上使用MS .NET 2.0。

要测试GA核心,我使用了这个源代码(一个简单的球体函数):

从Pyevolve导入G1Dlist从Pyevolve导入突变符,来自Pyevolve导入Gsimplega的初始化器,Consts#这是Spite函数def spente(xlist):总计= 0在xlist中:total + = i ** 2返回total def run_main():genome = g1dlist.g1dlist(140)genome.setParams(rangemin = -5.12,RangeMax = 5.13)Genome.Initializator.set(initializators.g1dlistinitializatorReal)Genome.mutator.set(Mutiator.g1dlistmutatorRealgaussian)Genome.EvaLuator.Set(球体)GA= Gsimplega.gsimplega(基因组,种子= 666)Ga.setminimax(consts.minimaxtype [“最小化”)ga.setgenerations(1500)Ga.setmitgeRate(0.01)Ga.evolve(freq_stats = 500)最好= ga.bestindual()如果__name__ ==“__main__”:run_main()

要测试GP内核,我已经使用了这个源代码(一个简单的符号回归):

from pyevolve import GTree from pyevolve import Mutators from pyevolve import GSimpleGA, Consts, Util import math rmse_accum = Util.ErrorAccumulator() def gp_add(a, b): return a+b def gp_sub(a, b): return a-b def gp_mul(a, b): return a*b def gp_sqrt(a): return math.sqrt(abs(a)) def eval_func(chromosome): global rmse_accum rmse_accum.reset() code_comp = chromosome.getCompiledCode() for a in xrange(0, 10): for b in xrange(0, 10): evaluated = eval(code_comp) target = math.sqrt((a*a)+(b*b)) rmse_accum += (target, evaluated) return rmse_accum.getRMSE() def main_run(): genome = GTree.GTreeGP() genome.setParams(max_depth=4, method="ramped") genome.evaluator += eval_func genome.mutator.set(Mutators.GTreeGPMutatorSubtree) ga = GSimpleGA.GSimpleGA(genome, seed=666) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(40) ga.setCrossoverRate(1.0) ga.setMutationRate(0.08) ga.setPopulationSize(800) ga(freq_stats=10) best = ga.bestIndividual() if __name__ == "__main__": main_run()

更新19/08:X轴在““,而Y轴是Python味道;

结果在下图中描述:

pyevolve_pyvms.正如我们所看到的,Unladen燕子2009Q2比CPython 2.6.2表现出色,但在那种情况下留下了Jython和Pypy(实验),甚至在Ironpython 2.6.1之后。