<<設定及び使用法>> |
◆Problem Configuration |
Boolean Function 問題の設定をします。
|
◆Populations |
GP におけるパラメータの設定をします。
|
◆Results |
シミュレーション結果をリアルタイムで表示します。
|
<<シミュレーション例と結果>> |
この LGPC for Boolean Function Composition を使ったシミュレーションの一例として、マルチプレクサのチェックパリティの論理式を求めるといったような、付属の 11multi.txt の 11 入力、1 出力のデータを入力、問題設定を行い、各設定のパラメータを変化させてシミュレートしてみました。動作環境は OS : Windows 2000, CPU : PentiumIII 700MHz, メモリ : 384MB です。 11multi.txt では入力 (X) と出力 (Y) の関係が以下のようになっています。 |
|
|
まず、上述の設定及び使用法のところの図にあるような以下のデフォルトの設定で、シミュレーションを 200
回行いました。また、Validation Data は Training Data と同じデータを使用しました。Function : AND
+ OR 結果は以下のようになり、50 世代までで解が求まったのは 62 / 200 = 31% でした。ただし、結果の表中、数字のところは
0 世代目から数えて何世代目で解に到達したかを、×のところは解に到達しなかったことを意味しています。また、解の中で最も短い式も以下のようになりました。
Defalt 31%
Y= ( (X5 AND ( ( (X11 OR ( (X8 OR X11) OR X9) ) AND (X4 OR X1) ) AND X10) ) OR ( ( ( (X2 AND X9) AND (X9 AND (X2 OR (X10 OR (X9 AND X4) ) ) ) ) OR ( ( ( ( (X7 AND X2) OR X7) AND ( ( (X4 AND (X4 OR X1) ) AND (X10 AND X8) ) AND ( (X2 AND (X10 AND X8) ) OR X6) ) ) OR X11) OR (X3 AND X9) ) ) OR X5) ) ◆Functions 使用できる関数を AND + OR から変化させてシミュレートしてみました。各結果は以下の通りです。 AND 0%
解求まらず。 OR 0%
解求まらず。 NOT 0%
解求まらず。 NAND 20%
Y= ( ( ( (X9 NAND (X6 NAND (X8 NAND (X9 NAND (X6 NAND X9) ) ) ) ) NAND X4) NAND ( ( (X10 NAND (X9 NAND ( (X3 NAND X8) NAND (X4 NAND (X6 NAND X11) ) ) ) ) NAND X8) NAND (X11 NAND ( (X4 NAND X4) NAND X9) ) ) ) NAND X3) NOR 15%
Y= ( (X1 NOR ( (X4 NOR ( ( (X8 NOR (X2 NOR (X9 NOR X3) ) ) NOR X7) NOR (X9 NOR X3) ) ) NOR X7) ) NOR ( ( ( (X5 NOR (X4 NOR ( (X11 NOR X2) NOR X4) ) ) NOR (X4 NOR X6) ) NOR X10) NOR X10) ) XOR 0%
解求まらず。 IF 80%
Y=IF (IF (IF (IF (X9 IF (X8 X5 X7) X4) IF (X1 IF (X8 X9 X5) IF (X5 X10 IF (X9 X9 IF (X10 X3 X1) ) ) ) X9) X1 X5) X8 IF (IF (X9 X1 X4) X4 X1) ) AND + OR + NOT 40%
Y= ( (NOT (X6) AND (NOT ( ( (NOT (X6) OR X8) OR X9) ) OR (NOT ( (X8 AND X11) ) AND NOT ( ( (NOT (NOT (NOT ( (NOT (NOT (X3) ) AND X8) ) ) ) OR X4) AND X9) ) ) ) ) OR X5) NAND + NOR 15%
Y= ( (X9 NAND ( ( ( (X9 NOR (X11 NOR (X11 NOR ( (X6 NOR (X6 NAND X8) ) NOR ( (X3 NOR X4) NAND ( ( (X9 NAND X5) NAND ( (X6 NOR X5) NAND X8) ) NOR X4) ) ) ) ) ) NAND X4) NAND X3) NAND (X6 NAND X6) ) ) NAND X5) ALL (AND + OR + NOT + NAND + NOR + XOR + IF)
30%
Y= ( ( ( ( ( ( (X10 OR X10) AND (X11 OR X8) ) AND (X1 OR (X4 AND ( (X6 AND ( (X4 AND ( (X11 AND X4) OR X10) ) OR X5) ) AND X2) ) ) ) OR (X3 OR X3) ) AND X9) AND X6) OR (X4 AND X8) ) それぞれ使用する関数によって解の求め易さの違いが見て取れる。さらに、複数の関数を使用するときもそれぞれの解への到達のし易さが反映されている。また、与えられた仮定(入力)によっては解へ到達することができないものがあることがわかる。 ◆Population 進化させる個体数を 1000 から 5000, 200 と変化させて、それぞれシミュレートしてみました。各結果は以下の通りです。 Population 5000 50%
Population 200 10%
進化させる個体数を増やすと解に到達する確率が高くなり、減らすと確率が下がっていることが確認できる。 ◆Generation 進化させる世代数を 50 から 1000 に変化させてシミュレートしてみました。結果は以下の通りです。 Generation 1000 65%
進化させる世代数を増やすと、当然、解に到達する確率が高くなる。しかし、世代数が大きくなるに連れて解に到達する確率は低くなっていることがわかる。 ◆Selection Method 生き残り戦略の方法を Proportional から Tournament, Random と変化させて、それぞれシミュレートしてみました。各結果は以下の通りです。また、Tournament の場合 Tournament Size も 6, 30 と 2 通りでそれぞれシミュレートしてみました。各結果は以下の通りです。 Tournament (Tournament Size 6) 30%
Tournament (Tournament Size 30) 40%
Random 20%
また、生き残り戦略の方法は Proportional のままで、Elite Strategy の値を 10% から 0%, 50% と変化させた場合も、それぞれシミュレートしてみました。各結果は以下の通りです。 Elite Strategy 0% 0%
Elite Strategy 50% 20%
各戦略の手法による解への到達確率に大差は見られないが、Tournament の場合、トーナメントの大きさが大きくなると解への到達率が高くなっている。また、Elite Strategy は 0% にしてしまうと解へ到達する確率が極めて低くなってしまい、50% と大きくした場合にも、良い結果が得られるわけではない。この値は適度に調節することで、良い結果を導くことになるのではないかと思われる。 ◆Restrictions on Genes 個体の持つ遺伝子の最大長を 100 から 500, 50 と変化させた場合と、遺伝子のグラフ構造の深さを 5 から 25, 1 と変化させた場合についてそれぞれシミュレートしてみました。各結果は以下の通りです。また、遺伝子の最大長 Maximum Length の値を 20 とすると完全にフリーズしてしまいました。バグではないかと思われます。 Maximum Length 500 35%
Maximum Length 50 30%
Maximum Initial Depth 25 55%
Maximum Initial Depth 1 30%
遺伝子の長さはこのシミュレーションでは各最大値まで遺伝子の長さが達していなかったため、最大値を大小変化させても影響を与えることなく、変化はなかった。また、グラフ構造を深くすると、探索幅が広くなり解にたどり着く確率が大きくなった。 ◆Rate of GP Operations 遺伝子の配列の組換え操作時の遺伝子操作の割合を (Crossover, Mutation, One-point Crossover, Reproduction) = (0.70, 0.20, 0.00, 0.10) から (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (0.25, 0.25, 0.25, 0.25) と変化させてシミュレートしてみました。ただし、(0.25, 0.25, 0.25, 0.25) でのシミュレーションは、良くわからないのですがこのときも完全にフリーズしてしまいました。 (Crossover, Mutation, One-point Crossover, Reproduction)
= (1, 0, 0, 0) 40%
(Crossover, Mutation, One-point Crossover, Reproduction)
= (0, 1, 0, 0) 15%
(Crossover, Mutation, One-point Crossover, Reproduction)
= (0, 0, 1, 0) 0%
(Crossover, Mutation, One-point Crossover, Reproduction)
= (0, 0, 0, 1) 0%
これらのオペレーションの割合はある1つの種類のオペレーションだけでは進化には有効ではなく、効率よく進化させようとすると、この割合も適当な値にする必要があるようです。 ◆Initial Ratio of the Nodes グラフ構造における関数記号と定数の割合を (Function, Variable) = (0.50, 0.50) から (1, 0), (0, 1) へと変化させてシミュレートしてみました。ただし、(1, 0) のときはフリーズしてしまいました。 (Function, Variable) = (0, 1) 25%
この比率も設定した問題によっては、適当に設定させるのが良いと思われます。 |