テスラノートテスラノート物理シミュレーションとAIとその応用。RのGAは超シンプルです。class="p">)</span><span></span>1<span></span>GAのモードは3種類あります。“permutation”の3つです。実数値、バイナリ、順列の3つです。交差方法が異なるので、適切なものを選ばないといけません。一つ一つ適用例をみていきます。cos(x)の最小値を求める問題を解いてみます。GAのパッケージとして、評価関数が大きな値が評価されるので、評価関数は正負反転したこの関数そのものであり、解の表現として、染色体は1つです。この場合、評価関数と最適化したいものが同じです。class="p">)</span><span></span>1<span></span>引数の説明¶typeはタイプ。fitnessは評価関数。lower,upperは、探索範囲の下限値と上限値popSizeは個体数。maxiterは進化する繰り返し数。optimは、局所探索をするかどうか。局所探索とは、近傍を探すというアルゴリズムを入れるかどうかである。今回のものは近傍探索しないとたどり着けそうにないので、入れた。局所探索のアルゴリズムは以下。1.解を一つランダムに生成する。2.現在の解の近傍の内一つをある条件で選び近傍解とする。3.定義した条件を満たすなら、近傍解を現在の解と入れ換える。詳しくは資料でもみてください。class="o">@</span>fitnessValue111最小値を発見している模様。最小値ではない極値にハマりやすいので、最適化アルゴリズムのテストによく使われる。0</span>こういう関数は、局所探索をするとすごくうまくいくoptim=FALSEだと意外とうまく行かないバイナリ型¶0か1を取るバイナリ型のGAで問題を解いてみるナップサック問題¶ナップサック問題とは、状況として、値段のついた物が色々あって、リュックに詰められる重さ(体積)が決まってます。その場合リュックの制限容量に対して最適な組み合わせで、値段が最大になるようにものを選んでいくと言う問題。0</span>特徴量抽出みたいなこと。¶<適当な直訳>統計的モデリングにおけるバイナリGAの典型的な用途はサブセット選択である。一組のp個の予測子が与えられると、サブセット選択は、応答変数の変動を説明するのに最も関連性のある予測子を識別することを目的とする。これは未知のパラメータの節約を達成することを可能にし、より良い推定とより明確な回帰係数の解釈の両方をもたらします。サブセット選択の問題は、1が予測子の存在を示し、0が所定の候補サブセットからの不在を示す、2進ストリングを使用してGAによって自然に処理することができます。候補サブセットの適合度は、AIC、BICなど、いくつかのモデル選択基準のうちの1つによって測定できます。fat)summary(mod)UsingRがないとこれは動かないので、Rからinstall.packages(‘UsingR’)でインストールしてください。13697121369713697整数型¶GAのこのパッケージには基本的に整数型はありません。使いたいなら、もうちょい拡張性の高いパッケージを使えばいいだけの話なのですが、これにはないです。パッケージを使うのは、インフラ上めんどいので、練習も兼ねてこのパッケージで実装する方法を考えてみます。ここでは、例としてナップサック問題で、複数個取れる状況を考えてみます。¶バイナリ版¶まず、バイナリ型で解くことを考えてみます。この場合、単純に考えれば、全く同じ値段、重さのものをもう一個加えるとすればいいでしょう。これは効率が悪いです。考えると、一個目を取るor取らないで0か1,もう一個もとる取らないで0か1で、結局0~2までの値を取ることしかできません。バイナリで2つの染色体を使うのであれば、2進法で0~3までの値を表現できます。染色体が3つになれば、前者は0~3までしか取れませんが、2進法で表現すれば、0~7までの値を表現することができます。これで見えてきました。バイナリ型の染色体を複数使って2進法でそれを一つの数字とみなしてやれば、整数型を実装できそうですしかし、2進法で表現するのはあまりよくない点があります。いわゆるハミング距離で考えると微妙です。ハミング距離とは、長さの等しい2つの文字列において、対応するいちにあって値が異なる文字の個数です。0111と、1000は7と8で近い数なのに、表現としては大きく文字列が変わってしまいます。差と2進数でのハミング距離の組み合わせが様々になっていて、GAでの探索時に不都合が出ることが多いです。そこでグレイコードを使用します。上下に隣り合うものはいずれも値が異なるビットは1つのみであることがわかります。2進数(ベクトル表現)をグレイコードに変換する。頭に0をつけて、一個右にズラす。ビットの排他的論理和を取るとグレイコードになる。2進数(ベクトル表現)をグレイコードに変換する。頭に0をつけて、一個右にズラす。ビットの排他的論理和を取るとグレイコードになる。その値と次の位の数の排他的論理和を取ってを繰り返す。その値と次の位の数の排他的論理和を取ってを繰り返す。Rにはパッケージをインストールしないと10進数からの2進数はないので実装します。bsumに2進数が入るのでベクトル表現にする。Rにはパッケージをインストールしないと10進数からの2進数はないので実装します。bsumに2進数が入るのでベクトル表現にする。base=2))}}BinaryToDecimal(c(1,1,1,0))14114ナップサック問題で、どれも1~3個目は3つまで、4,5個目は5個、6,7個目は1つ取れるとします。実数型のGAの方法を考えてみると、交差では2つの値の間(外もだけど)の解を探しているだけなので、実数値で出てきたものを四捨五入とか切り捨てとかでやっても大丈夫なんじゃないか?という発想が湧いてきます。実際、GAの場合はまずまず大丈夫です。普通の最適化計算ではこのようなやり方は禁じ手なのですが、GAの場合はまあまあいけます。交差等の仕方にもよりますが、四捨五入がいいのではと思います。0やるとわかりますが、やはり四捨五入は微妙です。(そりゃそうだ)何度かやってもバイナリでやったやつの方がいい答えにたどり着く確率が高いのがわかると思います。実数型のなかに四捨五入しなきゃいけないものがあっても割と使えるよ、というのは驚くべきことです。最適化アルゴリズムについてやっていく。コメントをキャンセルメールアドレスが公開されることはありません。