4.より効果的なGAを目指して
スキーマ(schema)
ビット列として表された遺伝子には、その個体が評価される際に、評価を高くする遺伝子と評価を低くする遺伝子があります。しかし、一般にビット列をただ見ただけでどこがいい評価を与えていて、どこが悪い評価を与えているということはわかりません。(そもそもこんなことがわかるならGAを適用する必要もありませんね。)
そこで、どの遺伝子がプラスの効果を与えていてどの遺伝子がマイナスの効果を与えているのかということが知りたいわけです。しかし、総合的な評価というものは複数の遺伝子の組み合わさり方によって変化している可能性もあります。
例えば、人間で「美形」といった場合に「美男」や「美女」と言われるような人の顔のパーツ(目や鼻など)をたくさん集めてきて適当に混ぜて組み合わせたとしても必ずしも「美形」の顔が出来上がるとは限りません。むしろ、出来上がらない可能性のほうが高いかもしれません。
つまり、個体はたくさんの遺伝子の集合体であり、個体の評価というのはその個体の持つすべての遺伝子の組み合わさったときの評価といえます。したがって、ただ単純にこの遺伝子があればいいとか言い切ることはできません。
そこで、良い遺伝子の組み合わせを探す必要があります。この遺伝子の組み合わせをスキーマと呼びます。スキーマは
例えば、4bitの遺伝子の個体において、初めのbitは1最後のbitは0である個体が他の個体よりもよい評価を受けるとすれば、そのスキーマは
図4.1 スキーマの例
さて、ここで一つ疑問が出てきます。良いスキーマが見つかるたびにそれを組み合わせていき長いスキーマを持つ個体を作っていけばいいのではないか?というものです。確かに、良いスキーマを長くしていけば評価を簡単にあげることができそうな感じがします。このように、スキーマを単純に組み合わせればよいのではないかという考え方を積み木仮説といいます。
この積み木仮説を前提としたロイヤルロード関数というものがあります。これはスキーマを完全積み木であるとして良いスキーマを次々取り込んでいくものですが、あまり良い結果を残せませんでした。実際にはスキーマが長くなってくると評価の高いスキーマの一部に他の部分で評価を下げてしまう遺伝子を内在してしまうことが多く、しかしスキーマ全体としては評価が高くなるので、その結果このスキーマは多くの個体へと広がっていってしまいます。これをヒッチハイキングといいます。
ヒッチハイキングは必ず起こるというわけではありませんが、GAが世代を重ねていくうちに起こってしまう可能性があります。また、ヒッチハイキングが起こったときには最高の解へ行き着くことはできなくなってしまいます。これはある種の局所安定といえます。
グレイ・コーディングGAで問題を効率よく処理をするにはコーディングも重要な要素になります。もっとも簡単なコーディングはバイナリ・コーディングになります。バイナリ・コーディングは問題の表現型における10進表記を単純に2進表記に直してコーディングしたものです。バイナリ・コーディングの場合、10進表記で隣り合っている値のハミング距離が1にならない部分があります。
※ハミング距離とは遺伝子の異なる部分の数です。
図4.2 ハミング距離
10進数 | 2進数 |
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
隣り合う値のハミング距離が1でないとなぜ困るのか?これにはだまし問題というものが関ってきます。だまし問題というのは、評価の高い解がハミング距離の離れたところにあるような問題です。例えば、3bitのコードの場合
遺伝的操作では普通新しい個体は、現在の個体群のどれかと比較的ハミング距離の近いものが生成されます。したがって、ほどほどに評価の高い解の周辺に個体が集まってきたとき、最適解がそこからハミング距離の遠いところにあると、遺伝的操作ではそちらへは個体群が移りにくくなってしまいます。
このため、バイナリ・コーディングでは問題がだまし問題となってしまい、最適解が求まらなくなってしまうことがあります。
そこで、グレイ・コーディング(Grayコード)というものが考えられました。グレイ・コーディングでは2進化した遺伝子に対して変換をかけて10進数においてとなりあう数値のハミング距離が必ず1になるようにコード化します。
図4.4 グレイ・コーディングの変換式
10進数 | 2進数 | Grayコード |
0 | 000 | 000 |
1 | 001 | 001 |
2 | 010 | 011 |
3 | 011 | 010 |
4 | 100 | 110 |
5 | 101 | 111 |
6 | 110 | 101 |
7 | 111 | 100 |
グレイ・コーディングは隣り合う値をコーディングしたときのハミング距離が1になることから、バイナリ・コーディングに比べて積み木仮説が成り立ちやすいと考えらます。