递归的自我改善

时间:2012-06-07 19:01:14

标签: ruby algorithm

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

据我所知,如果我有一些东西可以证明我正在使用的算法的“适应性”(我为算法提供了自身的二进制表示),那么它会使用它所具有的基本智能来生成新的二进制算法,比自己好。)

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

if @variable == true
  fitness += 1
end

但是如果fit是从算法本身产生的算法的能力,我怎么能测量这个,因为生成的算法不能在不产生新算法的情况下进行测试等等......

干杯 马丁

2 个答案:

答案 0 :(得分:2)

对于可以使用其他方法实现的算法,递归几乎总是一个坏主意。 Ruby在极端堆栈深度工作时会遇到许多问题,例如增加垃圾收集成本,显着的堆栈开销以及相对较低的上限,这可能会导致“堆栈级太深”错误。

创建不共享状态的独立对象可能会更好。迭代而不是递归。如果适用,请使用您自己管理的堆栈,例如来自pushshift元素的数组。

一些示例代码可能是:

candidate = stack.shift

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

spawn这样的方法可以执行您需要做的任何神奇的GA事情,并返回一个 new 独立实例。如果需要,可以增加这一点以与另一位候选人合并。

答案 1 :(得分:1)

def self_improve(level)
  return level if level == 100 #this is the brake
  level += 1
  self_improve(level)
end

p self_improve(1) #=>100