Mac*_*Mac 59 c# genetic-programming genetic-algorithm evolutionary-algorithm
我一直在为C#寻找一些好的遗传编程实例.谁知道好的在线/图书资源?想知道是否有进化/遗传编程的C#库?
Jad*_*ias 28
在开发了我自己的遗传编程教学应用程序之后,我找到了一个名为AForge.NET Genetics的完整的遗传编程框架.它是Aforge.NET库的一部分.它是根据LGPL许可的.
Sco*_*ski 14
除非你绝对需要,否则我建议不要实际生成组件,特别是如果你刚刚开始实现遗传算法.
当目标语言功能和动态类型化时,遗传算法最容易实现.这通常是为什么大多数遗传算法研究都是用LISP编写的.因此,如果要在C#中实现它,最好定义自己的迷你"树语言",让算法生成树,并在运行算法的每次迭代时解释树. .
我在大学期间做过这样的项目(在C#中实现遗传算法),这就是我采用的方法.
这样做将为您提供仅具有1个表示的优点(AST表示),其最适合于执行和遗传算法"再现"步骤.
另外,如果你尝试生成组件你可能会最终加入了大量的不必要的复杂性的应用程序.目前,CLR不允许一个组装从一个应用程序域被卸载,除非整个应用程序域被破坏.这意味着你将需要旋转了一个单独的应用程序域为每个生成的程序在算法的每次迭代,以避免引入一个巨大的内存泄漏到您的应用程序.在一般情况下,整个事情也只是增加一个额外的一堆刺激.
另一方面,解释AST与任何其他对象一样是垃圾收集,因此您不需要使用多个应用程序域.如果出于性能原因,您希望对最终结果进行代码生成,则可以稍后添加对该结果的支持.但是,我建议您使用DynamicMethod类执行此操作.它允许您在运行时动态地将AST转换为已编译的委托.这将使您能够部署单个DLL,同时保持代码生成的内容尽可能简单.此外,DynamicMethod实例是垃圾收集的,因此您最终可能会将它们用作遗传算法的一部分,以加快那里的速度.
我在http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/上看到了Mike Swanson对channel9的高级讨论.
如果您对遗传算法或启发式优化感兴趣,您可能想看看HeuristicLab。它已经开发了好几年了,距离我们发布新版本已经有1.5年了。它是用 C# 4 编程的,并且有一个漂亮的 GUI。已有许多算法可用,如遗传算法、遗传编程、进化策略、局部搜索、禁忌搜索、粒子群优化、模拟退火等等。还实现了一些问题,例如车辆路径问题、旅行推销员、实函数优化、背包、二次分配问题、分类、回归等等。还有教程,我们集成了协议缓冲区,因此您可以与外部程序进行通信以进行解决方案评估。它是根据 GPL 授权的。2009年该软件获得了奥地利微软公司的微软创新奖。
我们还写了一本关于该主题的书:遗传算法和遗传编程。