在C#遗传编程(闭合)(Genetic Programming in C# [closed])

2019-07-17 12:15发布

我一直在寻找一个C#一些好的遗传编程实例。 很好的在线/图书资源有谁知道? 不知道是否有一个C#库在那里进化/遗传编程?

Answer 1:

开发后我自己的遗传编程教学应用 ,我发现所谓的一个完整的遗传编程框架AForge.NET遗传学 。 这是一部分Aforge.NET库 。 它是LGPL许可。



Answer 2:

MSDN去年有一篇文章关于遗传编程: 遗传算法:适者生存Windows窗体



Answer 3:

我会建议对实际生成组件,除非你绝对需要,特别是如果你刚开始接触贯彻遗传算法。

遗传算法是最容易实现的,当目标语言的功能和动态类型。 这通常是为什么大多数遗传算法的研究Lisp语言编写的。 其结果是,如果你要实现它在C#中,你可能会更好过定义自己的迷你“树语”,具有算法生成的树,只是解释树木,当谈到时间来运行算法的每次迭代。

我做这样一个项目,当我在大学(遗传算法在C#中的实现),那是我采取的方法。

做这样会给你的只是有1只表示与(AST的表示)是最适宜于两个执行和遗传算法“再现”步骤的工作优势。

另外,如果你尝试生成组件你可能会最终加入了大量的不必要的复杂性的应用程序。 目前,CLR不允许一个组装从一个应用程序域被卸载,除非整个应用程序域被破坏。 这意味着你将需要旋转了一个单独的应用程序域为每个生成的程序在算法的每次迭代,以避免引入一个巨大的内存泄漏到您的应用程序。 在一般情况下,整个事情也只是增加一个额外的一堆刺激。

解释AST的,而另一方面,是垃圾收藏就像任何其他的对象,这样你就不会需要使用多个应用程序域猴左右。 如果出于性能方面的考虑要代码生成的最终结果,你可以在以后添加了这种支持。 不过,我给你建议你这样做,使用DynamicMethod的类。 它可以让你的AST在运行时动态转换成编译委托。 这将使你在保持代码生成的东西尽可能简单部署单个DLL。 此外,DynamicMethod的实例是垃圾收藏,所以你可能最终聘请他们作为遗传算法的一部分,有加快速度也是如此。



Answer 4:

你也许可以使用LINQ表达式树来实现基因编程 - 它更可能产生比随机IL一代可用的东西。



Answer 5:

我看到它在Channel9的迈克·斯旺森好高级别讨论在http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/



Answer 6:

你的意思是实际的遗传程序,而不是一般的遗传算法?

如果是这样,C#/。NET是不是它的最好语言。 LISP,例如,一直是GP的支柱。

但是,如果你一定要,你可能会想动态生成CIL / MSIL。 你可以做到这一点使用System.Reflection.Emit ,不过我建议你Mono.Cecil能做到 。 它缺乏良好的文档(仿佛反射发出了他们)..但它提供更好的装配发射和反射。

另一个问题是,它是小于微不足道的加载代码,以后处理它,在.NET框架。 至少,你无法卸载组件。 您可以卸载应用程序域,但加载代码到一个单独的应用程序域,并调用它外部的整个业务可以得到相当混乱。 .NET 3.5的System.Addin东西应该更容易些。



Answer 7:

如果您有兴趣在一般遗传算法或启发式优化你可能想看看HeuristicLab 。 这是数年研发,1.5年以来,我们发布了新的版本。 它在C#4编程并有一个很好的GUI。 目前已经有类似遗传算法,遗传规划,进化策略,本地搜索,禁忌搜索,粒子群算法,模拟退火多很多算法。 也有像车辆路径问题实施了几个问题,旅行商,真正的功能优化,背包,二次分配问题,分类,回归,等等。 有教程也和我们有协议缓冲区集成,因此,您可以对方案评估外部程序进行通信。 这是GPL许可。 2009年,软件已经获得了微软奥地利的微软创新奖。

我们还写了一本书的主题: 遗传算法和遗传编程 。



Answer 8:

我有一个免费的产品,可以帮助。 遗传算法框架.NET 4.0是一个.NET 4.0装配有一些辅助的文章。



Answer 9:

我读的一个领域指南遗传编程现在(免费PDF下载)。 它也可以作为一本平装书。 它铁饼使用Java编写的库调用的TinyGP 。 你可能会得到一些里程了这一点。 我还没有开始做任何实际的编程,但我希望能够适用一些在C#的概念。



Answer 10:

我已经分叉ECJ到C#.NET 4.0,如果你有兴趣在一个全功能的进化计算框架。 该软件包包括了从原来的欧洲法院Java项目,包括所有的工作样本。

我也写了500次测试,以验证转换的许多方面。 但还需要更多的测试。 特别是,在分布式计算方面没有得到充分的测试。 那是因为我打算使用WCF和WF从欧洲法院的简单使用插座转换为更稳健的策略。 我还可以再加工的框架,利用TPL(任务并行库)。

无论如何,你可以在这里下载初始转换:

http://branecloud.codeplex.com

我也是从Java转换其他几个框架,以.NET中,涉及到“综合智能”研究(当我能找到的时间)的过程。

Ben



Answer 11:

你可以试试GeneticSharp 。

它具有所有的经典GA操作,如选择,交叉,变异,安插和终止。

这是非常可扩展的,你可以定义自己的染色体,适应度函数,人口生成策略及以上太,都被​​操作。

它可以在许多种应用中使用,如C#库和Unity 3D游戏,还有在运行它的样本GTK#应用程序和统一的3D跳棋游戏 。

它也可以在Win和OSX。

下面是一个基本示例如何使用图书馆:

var selection = new EliteSelection();
var crossover = new OrderedCrossover();
var mutation = new ReverseSequenceMutation();
var fitness = new YourFitnessFunction();
var chromosome = new YourChromosome();
var population = new Population (50, 70, chromosome);

var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation);

ga.Start();


Answer 12:

曼宁的书:“ 元编程在.NET ”致力于通过表达式树GP上一大段。



Answer 13:

我保持欧洲法院在C#中的端口。 这很棒。



文章来源: Genetic Programming in C# [closed]