Javaでの遺伝的アルゴリズムの実装について
別のWebサイトでも質問させていただいているのですが、
double[][] a={
{1,1,1,1,1,1,1,1,1,1},
{1,2,1,4,1,1,1,8,1,1},
{2,2,2,2,2,2,2,2,2,2},
{2,2,2,3,2,2,2,3,2,2},
{2,2,2,2,2,4,2,2,3,2},
};
のように予め決められている2次元配列(a[0],a[1],a[2],a[3],a[4]それぞれが遺伝子)と、
double[] fitness={50,100,60,90,120};
のように遺伝子それぞれに対応している適応度があるとして、(適応度は別プログラムで計算済み)
遺伝的アルゴリズムで予め設定された遺伝子と適応度をエリート及びルーレット選択、交叉、突然変異を行う(一世代のみ)プログラムをJavaを用いて作りたいのですが、
Web上にある例となるClassは初期集団をランダムで生成した上で、ランダムに生成された遺伝子に対し適応度計算を行い、それを選択、交叉、突然変異を行うClassに投げるものがほとんんどです。
なので、適応度計算を行わずに既にある遺伝子と適応度をどのようにして結びつけるのか、もともとランダムに生成された遺伝子に適応度計算を行うこと、複数世代行うことを前提に設計されている選択・交叉・突然変異等のClassをどう変更すればよいのかわからず、手詰まりになってしまいました。
周りの知り合いに聞いても、Javaは少しならわかるが専門外、遺伝的アルゴリズムは勉強したことがない人ばかりなので、聞きたくても聞けない状況となっております・・・。
遺伝的アルゴリズム及びJavaに詳しい方、どなたか実装例を教えていただけないでしょうか?
参考にさせていただいたURL:http://www.ics.kagoshima-u.ac.jp/edu/ProgramingJava/samples/SimpleGA/step1/index.html#GA%20%E3%82%AF%E3%83%A9%E3%82%B9
お礼
悩んでいることに対して、的確にアドバイスしていただき有難う御座います。書店での情報収集やネットサーフィンでは指針が立てられず、何方かのアドバイスをお待ちしておりました。 自分は電子系のエンジニアで、技術の空洞化の時勢に逆らって、何とか欧米の技術力に追従しようと、ある分野の最適化設計に努力してきましたが、先日、欧米製の遺伝子的アルゴリズムを使用した商品を紹介され、技術力向上の限界を感じました。下手をすると、日々の設計の試行錯誤の過程を、遺伝子的アルゴリズムに取って代わられてしまうようにも思いました。 このお返事の中は、プログラム開発の実情がみえたように思います。普段使いなれているC言語を使って、あまり神経質にならずにコーディングしても結果が出るという力強いアドバイスもありましたし、チャレンジしてみたいと思います。これをやらないと、自分の会社の技術の空洞化が決定的なものになってしまいます。 それにしても、良い最適化設計の特徴(良い遺伝子配列の特徴)を見つけるのっ難しそうですね! 本日いただいたお返事は、一字一句大切にしたいと思います。有難う御座いました。