Ruby 递归自我改进

Ruby 递归自我改进,ruby,algorithm,Ruby,Algorithm,在开发了一个简单的算法来演示基本的智能之后,我渴望得到递归的自我改进,我遇到的问题是由于我对递归缺乏理解 我知道,如果我有某种东西能够评估我用于改进的算法的“适合度”(我为算法提供了自身的二进制表示),那么它将使用基本智能生成一个新的二进制算法,比自身更好) 然而,我需要知道的是,如何评估算法的适用性?我通常会这样做 if @variable == true fitness += 1 end 但是,如果适应度是从算法本身衍生出来的算法的能力,那么我如何衡量这一点呢?因为衍生出来的算法如果没

在开发了一个简单的算法来演示基本的智能之后,我渴望得到递归的自我改进,我遇到的问题是由于我对递归缺乏理解

我知道,如果我有某种东西能够评估我用于改进的算法的“适合度”(我为算法提供了自身的二进制表示),那么它将使用基本智能生成一个新的二进制算法,比自身更好)

然而,我需要知道的是,如何评估算法的适用性?我通常会这样做

if @variable == true
  fitness += 1
end
但是,如果适应度是从算法本身衍生出来的算法的能力,那么我如何衡量这一点呢?因为衍生出来的算法如果没有新算法本身,就无法进行测试,等等

干杯
对于可以使用另一种方法实现的算法,Martin

递归几乎总是一个坏主意。Ruby在极端堆栈深度下工作时存在许多问题,例如垃圾收集成本增加、显著的堆栈开销以及可能导致“堆栈级别太深”错误的相对较低的上限

您最好创建不共享状态的独立对象。迭代而不是递归。在适用的情况下,使用您自己的自我管理堆栈,例如您从中推送
shift
元素的数组

一些示例代码可能是:

candidate = stack.shift

if (candidate.fitness > minimum_fitness)
  stack.push(candidate.spawn)
end
spawn
这样的方法将执行您需要执行的任何操作,并返回一个新的独立实例。如果需要的话,可以将其扩展为与另一个候选者结合

candidate = stack.shift

if (candidate.fitness > minimum_fitness)
  stack.push(candidate.spawn)
end