递归自我改进
问题描述:
开发了一个演示基本智能的简单算法,我渴望得到递归自我改进,我遇到的问题是由于我对递归缺乏理解。递归自我改进
据我所知,如果我有一些说明我用来改进的算法的“健身”(我提供的算法是二进制表示的自身),那么它使用基本智能来生成一个新的二进制算法,比自己更好)。
但是我需要知道的是,我该如何评估算法的适应性?我通常会做到这一点
if @variable == true
fitness += 1
end
但如果健身是我如何衡量这一点,因为衍生的算法不能没有它spawing一个新的算法本身等进行测试,从算法本身催生了算法的能力。 ..
干杯 马丁
答
def self_improve(level)
return level if level == 100 #this is the brake
level += 1
self_improve(level)
end
p self_improve(1) #=>100
答
递归几乎总是可以使用另一种方法来实现的算法是一个坏主意。在极端堆栈深度工作时,Ruby会遇到很多问题,如增加垃圾收集成本,大量堆栈开销以及可能导致“堆栈级别太深”错误的相对较低的上限。
您可能会更好地创建不共享状态的独立对象。迭代,而不是递归。在适用的情况下,使用您自己的自我管理堆栈,例如来自您的push
和shift
元素的数组。
一些示例代码可能是:
candidate = stack.shift
if (candidate.fitness > minimum_fitness)
stack.push(candidate.spawn)
end
像spawn
的方法会做你需要做的,并返回一个新,独立实例什么神奇的事情GA。如果需要的话,可以将其与其他候选人结合使用。