1つだけ過去を変えられるとしたら?

別の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/ProgramingJ …

A 回答 (1件)

> 適応度計算を行わずに既にある遺伝子と適応度をどのようにして結びつけるのか



wikiの説明では
「必要とされる条件は評価関数の全順序性と、探索空間が位相(トポロジー)を持っていることである。」
http://ja.wikipedia.org/wiki/遺伝的アルゴリズム

よって、適応度算出方法の詳細は不明でも、与えられた遺伝子について、適応度順に並べる事が出来れば、その上位から選択が可能となるので、適応度計算部分(評価関数のこと)は「単に順列値を与えるだけのもの」でも十分ということである。
つまり、変化後の遺伝子が元の遺伝子群のどれに近いかで、適合度をその似ている遺伝子と同じにするか、または違いの程度で、何らかの比率を掛けるような適合度算出方法でも、それなりの結果をだせるのが遺伝的アルゴリズムということである。
Class の変更とは、つまり、適合度算出メソッドをそのように上書きするということだとおもう。
    • good
    • 0
この回答へのお礼

mpro-gramさん回答ありがとうございます。
>>適応度計算部分(評価関数のこと)は「単に順列値を与えるだけのもの」でも十分ということである。
やはりできるんですよね!
遺伝子、適応度を事前に渡せるように、適応度算出部分、そして遺伝子生成部分のメソッドの書き換えを頑張ってみます。

お礼日時:2014/02/01 05:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報