均一なクロスオーバーは、1ポイントのクロスオーバーよりも悪い結果をもたらしますか?

StackOverflow https://stackoverflow.com/questions/5364403

質問

私は宿題の一部のために均一なクロスオーバーアルゴリズムを書きましたが、適切に機能していません。実際、私の1つのポイントが越えたよりも悪い結果が戻ってきています。誰かに間違っている場所を指摘してもらいたいので、修正できます:)。私は今何年もの間試してきましたが、これが私の最後の手段です!!

    private void DoUniformCrossOver(int p1id,int p2id)
{
    ArrayList<Integer> p1 = population.get(p1id).GetRep();
    ArrayList<Integer> p2 = population.get(p2id).GetRep();
    ArrayList<Integer> c1 = new ArrayList<Integer>();
    ArrayList<Integer> c2 = new ArrayList<Integer>();

for (int i=0;i<nbits;++i)
{
    double selected = CS2004.UI(1,2);
    if (selected ==1)
    {
        c1.add(p1.get(i));
        c2.add(p2.get(i));
    }
    else
    {
        c1.add(p2.get(i));
        c2.add(p1.get(i));
    }
}

    population.add(new ScalesChrome(c1));
    population.add(new ScalesChrome(c2));
}

この方法は、2人の親、P1IDとP2IDのパラメーターとして取り入れます。次に、表現のアレイリスト-P1およびP2を作成します。

forループでは、「nbits」はアレイの重量(または配列の長さ)です。私のワンポイントクロスオーバー方法は、forループでそれを使用し、正常に機能します。

次に、どちらかの1/2を生成して、子供が取得する各親からどの遺伝子を決定しますか。

このアルゴリズムのフィットネスは非常に貧弱です!!どんな助けも大歓迎です。

どうもありがとう。

役に立ちましたか?

解決

まあ、まず第一に どんな情報 あなたはエンコードしていますか あなたは何を進化させようとしていますか?

あなたが解決しようとしている問題に応じて、いくつかの種類のクロスオーバー戦略は、あなたが良い解決策を見つけることを妨げます。

簡単な例: :探しているソリューションに固有の対称性がある場合(たとえば、白/黒の細胞オートマトルマジカル分類器など)、シングルポイントクロスオーバーは、遺伝的アルゴリズムがつまずいた可能性のある対称性を破っているため、非常に良い結果をもたらさないでしょう(例:したがって、多数派分類器の場合、それは黒または白の分類が非常に得意ではないが、両方ではないので、与えられた - かなり低いフィットネスよりも良くなることはありません。

他のヒント

(あなたが私のコメントに応答しなかったので、私はそれを答えとして繰り返します)

あなたはダブルを定数と比較しています。 int selected おそらくより良くなるか、ダブルを使用する必要がある場合は、次のようなものを使用してみてください。

if (selected < 1.5)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top