开发了一个演示基本智能的简单算法,我渴望得到递归的自我改进,我遇到的问题是由于我对递归的理解不足。
据我所知,如果我有一些东西可以证明我正在使用的算法的“适应性”(我为算法提供了自身的二进制表示),那么它会使用它所具有的基本智能来生成新的二进制算法,比自己好。)
但是我需要知道的是,如何评估算法的适用性?我通常会这样做
if @variable == true
fitness += 1
end
但是如果fit是从算法本身产生的算法的能力,我怎么能测量这个,因为生成的算法不能在不产生新算法的情况下进行测试等等......
干杯 马丁
答案 0 :(得分:2)
对于可以使用其他方法实现的算法,递归几乎总是一个坏主意。 Ruby在极端堆栈深度工作时会遇到许多问题,例如增加垃圾收集成本,显着的堆栈开销以及相对较低的上限,这可能会导致“堆栈级太深”错误。
创建不共享状态的独立对象可能会更好。迭代而不是递归。如果适用,请使用您自己管理的堆栈,例如来自push
和shift
元素的数组。
一些示例代码可能是:
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