1

基本的な知性を実証する単純なアルゴリズムを開発したので、再帰的な自己改善を進めたいと思っていますが、私が抱えている問題は、再帰を理解していないことが原因です。

改善のために使用しているアルゴリズムの「適合性」を評価するものがある場合 (アルゴリズム自体のバイナリ表現をアルゴリズムに提供します)、それは新しいバイナリ アルゴリズムを生成するために必要な基本的なインテリジェンスを使用することを理解しています。自体)。

ただし、これを知る必要があるのは、アルゴリズムの適合性を評価するにはどうすればよいですか? 私は通常これを行うだろう

if @variable == true
  fitness += 1
end

しかし、フィットネスがアルゴリズム自体から生成されたアルゴリズムの能力である場合、生成されたアルゴリズムは新しいアルゴリズム自体などを生成しない限りテストできないため、これをどのように測定できますか...

乾杯マーティン

4

2 に答える 2

2

再帰は、ほとんどの場合、別のアプローチを使用して実装できるアルゴリズムにとっては悪い考えです。Rubyには、ガベージコレクションのコストの増加、スタックオーバーヘッドの大幅な増加、「スタックレベルが深すぎる」​​エラーが発生する可能性のある比較的低い上限など、極端なスタック深度で作業する場合に多くの問題があります。

状態を共有しない独立したオブジェクトを作成する方がよいでしょう。繰り返す代わりに、繰り返します。push必要に応じて、配列やshift要素など、独自の自己管理スタックを使用します。

いくつかのサンプルコードは次のようになります。

candidate = stack.shift

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

のようなメソッドspawnは、必要な魔法のGAを実行し、新しい独立したインスタンスを返します。これは、必要に応じて別の候補と組み合わせるために拡張することができます。

于 2012-06-07T20:19:44.590 に答える
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
于 2012-06-07T20:18:23.033 に答える