私は人工知能クラスのプロジェクトとして遺伝的アルゴリズムを書いています。私はGAのコンセプトに精通していますが、ハスケルの経験は限られています。プログラムに残されていることは1つだけです。それは他の機能をループする機能を作ることです。私は私の機能を説明し、問題をより詳細に説明します:ハスケルでの基本的な再帰の理解
これは第2世代のための機能です。私は両親を取得し、それらを交配し、ゲノムを変異させ、その後、リストに新しいゲノムを渡す:
generation1 = initialPopulation
generation2 = [(mutate (mate (fTTS generation1) (sTTS generation1))) | x <- [1..100]]
これは素晴らしい作品。私は、新しい世代を作成して繰り返すことができます:
generation3 = [(mutate (mate (fTTS generation2) (sTTS generation2))) | x <- [1..100]]
だから、それぞれの新しい世代のために、私は一歩近づい(私の場合は文字列である)標的ゲノムへのです。私は目標の文字列に達するまで新しい世代を生成したい。これは、(3)までのgの私のラップトップ上で動作しますが、その後の計算は年齢を取る
g 0 = initialPopulation
g n = [(mutate (mate (fTTS (g (n - 1))) (sTTS (g (n - 1))))) | x <- [1..100]]
:私はのように、基本的な再帰は、この問題を解決するだろうと思いました。私の問題は、なぜ私は本当に理解できないということです。私はハスケルの再帰が次のように働いていると思った:
-- g 0 = [(mutate (mate (fTTS initialPopulation) (sTTS initialPopulation))) | x <- [1..100]] = ["N4kiT","Tu1RT","Tu1R<"]
-- g 1 = [(mutate (mate (fTTS (g 0)) (sTTS (g 0)))) | x <- [1..100]]
-- g 2 = [(mutate (mate (fTTS (g 1)) (sTTS (g 1)))) | x <- [1..100]]
-- g 3 = [(mutate (mate (fTTS (g 2)) (sTTS (g 2)))) | x <- [1..100]]
私の頭は上記のgeneration3関数と同じでなければならない。ハスケルについてもっと知っている人がなぜ「世代15」関数を何の問題もなく「g(3)」関数を超えて実行できる理由を説明できるのであれば、私は感謝します。コンソール。
ありがとうございます!
ありがとうCarsten!私はそれが私がリストを扱う方法と関係があると思ったが、今私は確かに知っている! 私は "maximGen" Intを持っています。何世代にもわたる屋根を設定する必要があります:) –