私は学校のために研究室を作るために一生懸命に努力しています。遺伝的アルゴリズムを使ってクロスワードパズルを解こうとしています。問題はそれがあまり良くないことです(それはまだランダムすぎます)私は今私のプログラムがどのように実装されているかについて簡単に説明しようとします:
パズルを持っている場合(#はブロック、0は空きスペース)
#000
00#0
#000
そして、このパズルの解決策の候補となる単語のコレクション。私のDNAは、単に1D配列としてのマトリックスです。
私の最初の個人のセットは、私の単語に含まれる文字のプールからランダムに生成されたDNAを持っています。
roulette-selectionを使用して選択を行います。組み合わせと突然変異の可能性についていくつかのパラメーターがありますが、突然変異が発生した場合、私は常にDNAの25%を変更します。私は文字のプールからランダムな文字でそれを変更します(突然変異はすでに形成された単語を破壊する可能性があるため、これは悪影響を与える可能性があります)
ここで、適応度関数:行列を水平方向と垂直方向の両方でトラバースします。単語が見つかった場合、FITNESS + = word.lengh +1
ある単語の一部である文字列を見つけた場合、FITNESS + = word.length /(puzzle_size * 4)。とにかく、0から1までの値を指定する必要があります。したがって、「tool」から「to」を検索し、XをFITNESSにアドバタイズし、「tool」から「too」を検出した直後に、FITNESSに別のYを追加します。
私の世代は実際には時間の経過とともに改善していません。それらはランダムに表示されます。したがって、1000〜2000のプールで400世代後でも(これらの数値は実際には重要ではありません)、ソリューションに6ワードが必要な場合に、1〜2ワード(2文字または3文字)のソリューションが得られます。