一尘不染

通过遗传算法生成代码

algorithm

进化编程似乎是解决许多优化问题的好方法。这个想法很容易,实现也不会造成问题。

我想知道是否有任何方法可以用ruby / python脚本(或任何其他语言)逐步创建程序?

这个想法很简单:

  1. 创建大量程序
  2. 执行遗传操作(轮盘选择或其他选择),从最佳程序继承来创建新程序,等等。
  3. 循环点2,直到找到满足我们条件的程序

但是仍然存在一些问题:

  1. 染色体将如何表示?例如,染色体的一个单元格应该是一行代码吗?
  2. 染色体如何产生?如果它们将是代码行,那么我们如何生成它们以确保它们在语法上是正确的,等等?

可以生成的程序示例:

创建以N个数字作为输入并返回其平均值作为输出的脚本。

如果有尝试创建此类算法的尝试,我将很高兴看到任何链接/源。


阅读 224

收藏
2020-07-28

共1个答案

一尘不染

如果确定要执行此操作,则需要遗传编程,而不是遗传算法。GP使您可以开发树状程序。您要做的就是给它一些基本操作(while($ register),read($
register),increment($ register),decrement($ register),divide($ result $
numerator $ denominator),print ,progn2(这是GP的“顺序执行两个命令”的意思)。

您可以产生以下内容:

progn2(
  progn2(
    read($1)
    while($1
      progn2(
        while($1
          progn2( #add the input to the total
            increment($2)
            decrement($1)
          )
        )
        progn2( #increment number of values entered, read again
          increment($3)
          read($1)
        )
      )
    )
  )
  progn2( #calculate result
    divide($1 $2 $3)
    print($1)
  )
)

您将使用健身功能与实际解决方案有多接近。捕获量就在其中,无论如何您都必须按照传统方式进行计算*。然后有一些东西可以(您选择的语言)将其翻译成代码。请注意,由于其中存在潜在的无限循环,您将不得不在一段时间后中断执行(无法解决暂停问题),并且可能无法正常工作。哎呀
还要注意,我提供的代码将尝试除以零。

*有很多解决方法,但是通常情况并非遥不可及。

2020-07-28