C# 源代码的遗传进化

C# 源代码的遗传进化,c#,code-generation,genetic-algorithm,cil,dynamic-assemblies,C#,Code Generation,Genetic Algorithm,Cil,Dynamic Assemblies,我对用C语言编写“自己编写”的代码感到好奇。我知道这在广义上是不可能的,但我正在考虑为动态程序集设置某种格式,该格式定义除某个目标函数体之外的所有内容。 然后,一个算法或神经网络试图填充函数体。在此之后,执行程序集,然后新启动的程序集尝试调用目标函数,然后基于相同的代码创建另一个新程序集,希望更好地实现该目标函数 考虑到这种行为,C#和动态程序集是合适的选择(我担心创建和执行程序集所需的时间)。是否有专门用于动态创建要执行的代码的语言,或者C#是一个足够好的选项 此外,欢迎对整个装配的方法或设置

我对用C语言编写“自己编写”的代码感到好奇。我知道这在广义上是不可能的,但我正在考虑为动态程序集设置某种格式,该格式定义除某个目标函数体之外的所有内容。 然后,一个算法或神经网络试图填充函数体。在此之后,执行程序集,然后新启动的程序集尝试调用目标函数,然后基于相同的代码创建另一个新程序集,希望更好地实现该目标函数

考虑到这种行为,C#和动态程序集是合适的选择(我担心创建和执行程序集所需的时间)。是否有专门用于动态创建要执行的代码的语言,或者C#是一个足够好的选项

此外,欢迎对整个装配的方法或设置提出任何意见,并感谢您!(如果你不知道我是新来的)

谢谢

C#适用于遗传编程,尤其是现在动态语言运行时位于.NET框架中,并且可以使用C#的dynamic关键字进行访问

是一个可能让你起步的项目。几年前,MSDN还发表了一篇关于使用C#和Windows窗体进行遗传编程的文章:.

C#适用于遗传编程,特别是现在动态语言运行时位于.NET框架中,可以通过C#的动态关键字访问


是一个可能让你起步的项目。几年前,还有一篇MSDN关于使用C#和Windows窗体进行遗传编程的文章:。

我可能错了,但听起来你很感兴趣。一个好的基础应该是一些阅读(我推荐,它很棒)


特别是对于遗传编程,你可以尝试一下,但是对于更广泛的机器学习,我肯定会看看。Accord背后的人写了一篇可能也有用的文章。

我可能错了,但听起来你很感兴趣。一个好的基础应该是一些阅读(我推荐,它很棒)

特别是对于遗传编程,你可以尝试一下,但是对于更广泛的机器学习,我肯定会看看。Accord背后的人写了一篇文章,这篇文章可能也很有用。

如果你想“进化”源代码,你必须能够操作它。使用抽象语法树最容易做到这一点。使AST易于操作的工具称为,这些工具可以编码源到源转换规则,这些规则可以作为基因突变

我们的DMS软件再工程工具包的一个规则代码如下所示:

 swap_operators(x:product,y:term): sum-> sum
       "\x + \y " ->  "\x - \y" if  somecondition();
如果应用,则将“+”替换为“-”。理想情况下,您应该有一组“交叉”操作符(切换操作符、更改表达式优先级、更改提到的变量、更改控制结构等)和“某些条件”,它们控制交叉操作符是否作为进化步骤的一部分应用

您需要其他方法来编译/运行/评估进化程序的适用性

要使用DMS执行类似的操作,您需要让DMS读取(解析为AST)一个基线程序(“初始生成”),应用一组演化转换,为修改后的AST发出代码,编译并运行它们(DMS可以调用“编译”和执行等子流程),评估结果,选择这一代的前N个,再次应用进化操作符,重复操作直到nirvana或您的电费账单溢出。

如果您想“进化”源代码,您必须能够操作它。使用抽象语法树最容易做到这一点。使AST易于操作的工具称为,这些工具可以编码源到源转换规则,这些规则可以作为基因突变

我们的DMS软件再工程工具包的一个规则代码如下所示:

 swap_operators(x:product,y:term): sum-> sum
       "\x + \y " ->  "\x - \y" if  somecondition();
如果应用,则将“+”替换为“-”。理想情况下,您应该有一组“交叉”操作符(切换操作符、更改表达式优先级、更改提到的变量、更改控制结构等)和“某些条件”,它们控制交叉操作符是否作为进化步骤的一部分应用

您需要其他方法来编译/运行/评估进化程序的适用性


要使用DMS执行类似的操作,您需要让DMS读取(解析为AST)一个基线程序(“初始生成”),应用一组演化转换,为修改后的AST发出代码,编译并运行它们(DMS可以调用“编译”和执行等子流程),评估结果,选择这一代的前N个,再次应用进化算子,重复,直到涅磐或你的电费单溢出。

随机变异代码不会产生线性变化。你的小改变应该会让你成功。所以这和暴力没什么不同。遗传算法将陷入混乱状态。

随机变异代码不会产生线性变化。你的小改变应该会让你成功。所以这和暴力没什么不同。遗传算法将陷入混乱状态。

请不要写天网…@Twiltie我们有动态语言已经很多年了。大多数最早的语言都是动态的,从某种意义上说,它们可以简单地改变程序本身或将数据作为代码处理,而不像像C#这样的程序,它们会竭尽全力阻止这两种语言。这种动态语言的流行使得创建有用的AI并不容易。首先,它甚至不是一个要求,但即使它是,它肯定没有创新或任何最近的发展(除非你考虑整个领域的计算机科学最近,这在历史上是)。@ JerKimball:是吗?可以这样说:“函数在1秒后终止,并为这1000个经过审核的输入输出对提供了正确答案?”