別の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件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> 適応度計算を行わずに既にある遺伝子と適応度をどのようにして結びつけるのか
wikiの説明では
「必要とされる条件は評価関数の全順序性と、探索空間が位相(トポロジー)を持っていることである。」
http://ja.wikipedia.org/wiki/遺伝的アルゴリズム
よって、適応度算出方法の詳細は不明でも、与えられた遺伝子について、適応度順に並べる事が出来れば、その上位から選択が可能となるので、適応度計算部分(評価関数のこと)は「単に順列値を与えるだけのもの」でも十分ということである。
つまり、変化後の遺伝子が元の遺伝子群のどれに近いかで、適合度をその似ている遺伝子と同じにするか、または違いの程度で、何らかの比率を掛けるような適合度算出方法でも、それなりの結果をだせるのが遺伝的アルゴリズムということである。
Class の変更とは、つまり、適合度算出メソッドをそのように上書きするということだとおもう。
mpro-gramさん回答ありがとうございます。
>>適応度計算部分(評価関数のこと)は「単に順列値を与えるだけのもの」でも十分ということである。
やはりできるんですよね!
遺伝子、適応度を事前に渡せるように、適応度算出部分、そして遺伝子生成部分のメソッドの書き換えを頑張ってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
Javascrptの0の掛け算
-
バッチファイルでウインドウを...
-
Visual C++でdebugとreleaseで...
-
VBAの再計算が反映されない件に...
-
VBとVBAの違い
-
EXCELなどで「返す」という表現
-
傾いた四角形内の範囲の条件式
-
趣味で「乗換案内」みたいなソ...
-
VBAで関数をつくる
-
CとFORTRANの計算速度はどちら...
-
連立方程式を解くプログラムを...
-
変化させるセルが変化しない
-
エクセルで特定のセルのみを任...
-
0xf0=256?
-
等高線を計算したい
-
C++ でファイルを消す関数(??)
-
モジュラス103の計算とは何でし...
-
表計算上の式がVBA実行中に、メ...
-
アドオン利率を実質年率に変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
排他的論理和 BCC(水平パリテ...
-
VBAの再計算が反映されない件に...
-
バッチファイルでウインドウを...
-
変化させるセルが変化しない
-
EXCELなどで「返す」という表現
-
傾いた四角形内の範囲の条件式
-
エクセルで特定のセルのみを任...
-
CとFORTRANの計算速度はどちら...
-
Visual C++でdebugとreleaseで...
-
モジュラス103の計算とは何でし...
-
なぜオーバーフローになるので...
-
VB6で正確なミリ秒を計測したい...
-
VBでReplace
-
引き放し法による除算アルゴリ...
-
matlabで計算終了
-
CRC8を教えてください
-
VBAで関数をつくる
-
Excel VBAの残業時間の合計計算...
-
等高線を計算したい
おすすめ情報