• 締切済み

遺伝的プログラム 制約

rabbit_catの回答

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.3

>変数が20、関数が20の場合でも~ 質問の問題は#2さんも指摘されてますが、最適値がほぼ自明という、ものすごく簡単な問題なので、正直、どんなにアホな遺伝子の取り方ヲしても「うまく行ってしまう」でしょう。 もし、変数が増えたり、関数が複雑になったりすれば、全くそうは行きません。おそらく一点交叉ではうまく行かないでしょう。 個人的には(オリジナルの)遺伝的アルゴリズムは、あんまり性能の良い最適化アルゴリズムとは思わないので(特に連続変数の最適化では)、もし、遺伝的アルゴリズムを使うこと自体が目的ではなくて、最適化することが目的であるなら別のアルゴリズムを試してみることをおすすめします。 個人的には、連続変数の最適化(とくに制約が緩いor簡単に無制約に帰着できる場合)では、 Differentilal Evolution というアルゴリズム(広い意味では遺伝的アルゴリズムの一種です)が良いと思います。単純なアルゴリズムですが、各種のベンチマークなんかでは相当に優秀な結果がでています。

関連するQ&A

  • 生物学の遺伝計算の問題を教えてください。

    生物学の遺伝計算の問題を教えてください。 いかに挙げる問題の解答と出来れば詳しい解説をお願いします。 問 (A)から(D)に適切な数字を入れ、下記の問に答えよ。 劣性遺伝する形質の遺伝子Xとその対立遺伝子xがある。 親世代の遺伝子型がXxとxxであった場合、F1でこの形質があらわれる確率は、(A)%、F2であらわれる確率は、(B)%であると予想される。 (もし、この形質が優性遺伝であったら、F1でこの形質があらわれる確率は、(C)%、F2であらわれる確率は、(D)%である。)実際に、F2の遺伝子型を解析したどころ、Xxとxxが予想より極めて高率に存在することが判明した。これには、どのような理由が考えられるか述べよ。 申し訳ありませんが、よろしくお願いします。

  • 遺伝的アルゴリズムのプログラム

    はじめての投稿になります.これからよろしくお願いします. 先日、大学でGAを使って あるxの関数(例えば,f(x)=x^2-2=0のxにあてはまる解を導き出す)を解いてくるようにと課題がありました。 しかし、GAに関しては交叉や突然変異など基本的な用語を 教わったのみでプログラムが全然分かりません。 自分でも色々調べてみたのですが、全く参考になりそうなものが 見つかりませんでした。 そこで、もしご存知の方がいらっしゃるなら教えていただけないでしょうか? プログラムを組む場合にはC言語を使うことになるのですが、どなたかC言語でよろしくお願いいたします!

  • 遺伝的アルゴリズムの評価式に関する質問です。

    膨大な数の組み合わせから正解の組み合わせを求めるという大規模組み合わせ問題があったとします。 このような問題を遺伝的アルゴリズムを用いて解こうとしているのですが、今用いている評価式より良いアイデアが自分では考えつかなかったため質問します。 以下、問題や用いている遺伝的アルゴリズムに関する詳しい説明です。 例えば、仮に、23, 21, 65, 78, 43, 78, 83, 56, 78 ,89 の10個の数の組み合わせがあるとき、 合計して109になる組み合わせ(23,21,65)を見つけたいという問題です。(正解の組み合わせは複数個あっても、一個見つかれば良い。また正解の組み合わせは必ずあるものとする。) この問題を遺伝的アルゴリズム(GA)を使って解くとします。 以下、簡単なGAの説明です。 表現型に2進数ビット列を用いる。 個体数は200とし、初期個体はランダムで生成する。 評価式はf(x) = b/(b+|b-t|)(bは正解の組み合わせの合計値で、tは2進数ビット列で1を立てた場所の数の合計値である。)。終了条件はこの評価値がf(x)=1になることである。 交叉は一様交叉で突然変異も行う。 表現型について詳しく説明すると、 コード化に 0と 1の並びである2進数ビット列を用いて、 その場所に対応する数を加算する場合は1を, 逆に加算しない場合は0を遺伝子の表現型に立てビット列を生成しました。 例えば今回の正解の組み合わせ(109)を2進数ビットで表すと下のようになる。 23, 21, 65, 78, 43, 78, 83, 56, 78 ,89 1 1 1 0 0 0 0 0 0 0 ←2進数ビットを用いた表現型。 (1が立っている場所の数が加算されて合計で109となり、これが正解の組み合わせであることがわかる。) そして、この遺伝的アルゴリズムの評価式を f(x) = b/(b+|b-t|) とします。(bは正解の組み合わせの合計値で、tはビット列で1を立てた場所に対応する数の合計値である。) 評価式f(x)=1になる、つまり正解の組み合わせが見つかれば、遺伝的アルゴリズムは終了する。 この評価式で遺伝的アルゴリズムを回しているのですが、この簡単な評価式では近似解に陥ったとき、解を求めるのがどうしても遅くなってしまいます。 全体的に長く、わかりにくい説明で申し訳ないのですが、この評価式の改善案、またはこの遺伝的アルゴリズムの改善案などがあれば教えていただきたいです。 以上、よろしくお願いします。

  • 遺伝の問題です。どうしても分からないので教えてください。

    遺伝の問題です。どうしても分からないので教えてください。 キイロショウジョウバエの紫眼(a),黒体色(b),痕跡翅(c)を示す遺伝子、野生型の赤眼(A),正常体色(B),正常翅(C)を示す遺伝子はともに同一染色体上に連鎖している。Aはaに、Bはbに、Cはcに対し優性であり、雄では組み換え(交さ)は起こらない。三重劣性のホモの個体と野生型の個体を交配してF1を得た。そのF1の雌を検定交雑すると、表の結果が得られた。 (表) (ア) 赤眼・正常体色・正常翅 409 (イ) 赤眼・黒体色・正常翅 27 (ウ) 赤眼・正常体色・痕跡翅 63 (エ) 赤眼・黒体色・痕跡翅 2 (オ) 紫眼・正常体色・正常翅 2 (カ) 紫眼・黒体色・正常翅 57 (キ) 紫眼・正常体色・痕跡翅 28 (ク) 紫眼・黒体色・痕跡翅 412 計 1000 (1)F1の遺伝子型を示せ 答:AaBbCc (2)F1の雌を検定交雑するのに用いられた雄の遺伝子を示せ。 答:aabbcc (3)組み換えが起こらなかったとすれば、F2ではどの表現型がどのような比率で現れるか。表現型は(ア)~(ク)の記号で答えよ。 (3)が分からないので解説とともに答えを教えてください。 よろしくお願いします。

  • F(x)は実数を係数とするxの多項式。

    F(x)は実数を係数とするxの多項式。 すべての整数kについて、f(k)が整数であるための必要十分条件は、 f(0)が整数で、すべての整数kについてf(k)-f(k-1)が整数となる。 このとき、f(x)=ax^2+bx+cについて、すべての整数kについて、f(k)が整数 となるために、係数a,b,cがみたすべき必要十分条件をもとめよ。 次のように考えましたが、最後の詰めができません。 aとbの条件はどうなるのか、よろしく、おねがいします。 f(0)=cより、cは整数。 f(k)-f(k-1)=(2k-1)a+bより、任意のkについて(2k-1)a+bは整数。 これで、k=1のときより、a+bは整数...(1)。 k=2のときより、3a+bは整数...(2)。  (2)-(1)より、2aは整数。(1)×3-(2)より、2bは整数。 ここで、行き詰まりました。このあとどう処理すれば、a,bの条件をもとめられるか よろしくおねがいします。

  • 遺伝子アルゴリズムの2点交叉について教えてください

    下記のプログラムを改良して2点交叉にしたいのですが、遺伝子アルゴリズムもC++も初心者なので、よくわかりません。どなたかお知恵を貸してください。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include "come.h" int kousa() { unsigned int max=100; unsigned int max2=17; int a,b,c,d; int i,v,w,y,n,o,k,p,f; char kari[1][17]; w=0;//カウンタ n=0; srand((unsigned)time(NULL)); for(v=0;v<100;v++) { for(i=0;i<17;i++) { get[v][i]=next[v][i]; //next[175][17]からget[100][17]へコピーする(親) } } for(o=0;o<100;o++) { for(k=0;k<17;k++) { take[o][k]=next[v][k]; //next[175][17]からtake[100][17]へコピーする(子) } } for(d=0;d<50;d++) { a=(rand()%max); //1つ目の交叉する列を見つける b=(rand()%max); //2つ目の交叉する列を見つける c=(rand()%max2); //交叉ポイント見つける for(;c<17;c++) //1点交叉 { kari[n][c]=get[a][c]; get[a][c]=get[b][c]; get[b][c]=get[n][c]; } for(y=0;y<17;y++) { take[w][y]=get[a][y]; //get[100][17]からtake[50][17]へコピー take[w+1][y]=get[b][y]; } w=w+2; } for(p=0;p<100;p++) { for(f=0;f<17;f++) { next[nextpop][f]=take[p][f]; } nextpop++; } return 0; }

  • 遺伝子

    遺伝関係の分野がが苦手でよくわかりません。 下記の問題教えて頂けたら嬉しいです。 1モルモットの巻毛と直毛、黒毛と白毛はそれぞれ対立形質で、巻毛および黒毛が優性である。巻毛・白毛の純系の雄と直毛・黒毛の純系の雌を両親とし、F1を得た。その後、F1どうしを交雑してF2を得た。下の問いに答えよ。遺伝子記号は巻毛(A)、直毛(a)、黒毛(B)、白毛(b)とする。 またA(a)とB(b)は、別々の染色体上に存在することとする。 (1)両親およびF1の遺伝子型、F2の表現型の分離比を求めよ。 (2)下図のように交雑を行い次世代を得た。1~6の遺伝子型を求めよ。 これらの問題なのですがほんとによくわからなくて… 細かく解説も付けてくれたらありがたいです 2上の問題の(1)なんですがF2の表現型の方で答えは  [AB]:[Ab]:[aB]:[ab]=9:3:3:1となっています。  この問題では巻毛・白毛の純系の雄と直毛・黒毛の純系の雌を両親とし、F1を得ていますが  もし巻毛・黒色の純系の雄と直毛・白毛の純系の雌を両親としてF1を得た場合も  同じ答えになるのでしょうか?   長い質問に付き合っていただきありがとうございました。

  • 生物I 遺伝 伴性遺伝

    生物I 遺伝 伴性遺伝 キイロショウジョウバエの赤眼の遺伝子Wは、白眼遺伝子wに対して優性であり、 これらの遺伝子はともにX染色体にある。 いま、赤眼のメスと白眼のオスを両親として交雑したところ、 F1はすべて赤眼であった。 次の問に答えよ。 という問題文で 問1両親の雌雄の性染色体と遺伝子の組み合わせを下のA~Eから答えよ A XWXW B XWXw C XwXw D XWY E XwY  問2F1雌雄の性染色体と遺伝子の組み合わせをA~Eの中から答えよ 問3にF2では赤眼と白眼がどのような割合で生じるか、雌雄別々に答えよ。 とあるのですが問3が分かりません。 自家受精やF1どうしをかけて などどうやってF2をだすか書いていないので わからないのですが分かる方いますか? ちなみに答えは 問1雌ーA雄ーE 問2雌ーB雄ーD 問3雌ーすべて赤雄ー赤:白=1:1です

  • C言語 二分法 プログラム

    C言語での二分法の解法になやんでいます。 f(x)=X2乗-2でf(x)=0の解を2分法により求める場合のプログラムを教えて下さい。 収束条件|ak-bk|<10^-6と|f(ck+1)|<10^-6のいずれかを満足。また、解を求める過程として、k,ak,bk,|ak-bk|, ck+1, f(ck+1) (k=0,1,2,3...)も示してくれないでしょうか。よろしくお願いします。 注: a,b,cに付属するk,k+1はa,b,cの下側に付く小文字です。(a1,a2... ak, ak+1. b1 b2... bk, bk+1)

  • 遺伝子の問題について

    この問題を教えてください。 2対の対立遺伝子があり、AとB(aとb)が連鎖している。AとBがそれぞれ優性遺伝子であり、両親の遺伝子型がAABB、aabbのとき、雑種第一代(F1)同士を交雑したときの雑種第二代(F2) の表現型の分離比[AB]:[Ab]:[aB]:[ab]はどのようになるか。ただし、表現型として発現しない場合は、0とする。