Javaと遺伝的アルゴリズムの効率の向上

Zjr8:

こんにちは、私は遺伝的アルゴリズムを実装するプログラムの全体的な効率を高めることについていくつかのアドバイスを得ることができるかと思っていました。はい、これは課題の質問ですが、私はすでに自分で課題を完了しており、それをより適切に実行する方法を探しています。問題の説明

現時点で私のプログラムは、構成要素のタイプhまたはpで構成される特定のチェーンを読み取ります(例hphpphhphpphphhpphph)HおよびPごとにランダムな移動(上、下、左、右)を生成し、その移動をarrayListに追加します「Chromosome」オブジェクトに含まれています。開始時に、プログラムは10,000の染色体に対して19の移動を生成しています

   SecureRandom sec = new SecureRandom();
    byte[] sbuf = sec.generateSeed(8);
    ByteBuffer bb = ByteBuffer.wrap(sbuf);
    Random numberGen = new Random(bb.getLong());
    int numberMoves = chromosoneData.length();
    moveList = new ArrayList(numberMoves);
    for (int a = 0; a < numberMoves; a++) {
        int randomMove = numberGen.nextInt(4);
        char typeChro = chromosoneData.charAt(a);
        if (randomMove == 0) {
            moveList.add(Move.Down);
        } else if (randomMove == 1) {
            moveList.add(Move.Up);
        } else if (randomMove == 2) {
            moveList.add(Move.Left);
        } else if (randomMove == 3) {
            moveList.add(Move.Right);
        }

    }

この後、人口から交雑までの染色体の選択が行われます。私のクロスオーバー機能は、最初の染色体を人口の最も適した20%からランダムに選択し、もう1つを上位20%の外側からランダムに選択します。次に、選択された染色体が交差され、突然変異関数が呼び出されます。私が最もヒットしている領域は、各染色体の適合度を計算することだと思います。現在、私のフィットネス関数はグリッドとして機能する2D配列を作成し、上記の関数で生成されたムーブリストから順番にムーブを配置し、配列をループしてフィットネス計算を行います。(IEが見つかり、場所[2,1]のHはコード[1,1] [3,1] [2,0]または[2,2]もHであり、Hが見つかった場合は、ボンドが見つかりました)

計算が完了すると、最小適合の染色体が母集団から削除され、新しい染色体が追加されて、染色体の配列リストがソートされます。ターゲット溶液が見つかるまですすぎ、繰り返す

皆さんが私のコードをもっと見たいので、助けを求める前に実際に作業をしたことを証明したい場合は、私に知らせてください(他の学生が私のものをパスタをコピーできないので、あまり投稿しないでください)

コメントで示唆されているように、私は自分のアプリケーションでプロファイラーを実行し(これまでに使用したことがなく、CSの1年生のみ)、問題が発生している場所についての最初の推測はやや不正確でした。プロファイラーが私に言っていることから、大きなホットスポットは次のようです:

1)新しい染色体を集団内の他の染色体と比較して、その位置を決定する場合。私はComparableを実装してこれを行っています。

public int compareTo(Chromosome other) {
    if(this.fitness >= other.fitness)
                    return 1;
         if(this.fitness ==other.fitness )
                   return 0;
            else
                    return -1;



}

2)説明されている他の問題領域は私の実際の進化関数にあり、CPU時間の約40%を消費しています。以下の上記のメソッドのコードサンプル

    double topPercentile = highestValue;
    topPercentile = topPercentile * .20;
    topPercentile = Math.ceil(topPercentile);
    randomOne = numberGen.nextInt((int) topPercentile);
    //Lower Bount for random two so it comes from outside of top 20%
    int randomTwo = numberGen.nextInt(highestValue - (int) topPercentile);
    randomTwo = randomTwo + 25;
    //System.out.println("Selecting First: " + randomOne + " Selecting Second: " + randomTwo);
    Chromosome firstChrom = (Chromosome) populationList.get(randomOne);
    Chromosome secondChrom = (Chromosome) populationList.get(randomTwo);
    //System.out.println("Selected 2 Chromosones Crossing Over");
    Chromosome resultantChromosome = firstChrom.crossOver(secondChrom);
    populationList.add(resultantChromosome);
    Collections.sort(populationList);
    populationList.remove(highestValue);
    Chromosome bestResult = (Chromosome) populationList.get(0);

3)もう1つの主要なパフォーマンスヒットは、ポストの最初のコードサンプルによって実行される初期人口シードです。

スティーブン・デンネ:

人口を繰り返しソートする代わりに、すでにソートされたコンテンツを維持するコレクションを使用します。(例:TreeSet)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rの遺伝的アルゴリズム

分類Dev

非遺伝的ケースのMatlab遺伝的アルゴリズム

分類Dev

遺伝的アルゴリズム-親の選択とクロスオーバーの確率

分類Dev

Pythonの遺伝的アルゴリズムの問題

分類Dev

多項式の遺伝的アルゴリズムの最適化

分類Dev

Matlabの遺伝的アルゴリズムの突然変異段階

分類Dev

mlr遺伝的アルゴリズムの初期集団の選択

分類Dev

遺伝的アルゴリズムの配列ヘルプ

分類Dev

遺伝的アルゴリズムと反復局所探索アルゴリズムの違いは何ですか?

分類Dev

遺伝的アルゴリズムと従来のアルゴリズムを区別する

分類Dev

遺伝的アルゴリズムにおける探索と活用の違い

分類Dev

MlroseTSPOpt遺伝的アルゴリズム独自のコスト関数

分類Dev

遺伝的アルゴリズム-多次元配列の交差

分類Dev

遺伝的アルゴリズムの並列実行

分類Dev

構造体/遺伝的アルゴリズムの使用

分類Dev

遺伝的アルゴリズム-収束

分類Dev

DEAP遺伝的アルゴリズム

分類Dev

R のルックアップ アルゴリズムの効率を向上

分類Dev

遺伝的アルゴリズム:サイズNの初期母集団の例

分類Dev

univeristyタイムテーブルの遺伝的アルゴリズム

分類Dev

低音モデルの遺伝的アルゴリズムのR実装

分類Dev

アルゴリズムの効率

分類Dev

Matlabの遺伝的アルゴリズムを使用した画像再構成アルゴリズムの最適化

分類Dev

ナッシュ均衡多目的遺伝的アルゴリズムJava

分類Dev

遺伝的アルゴリズムとPYTHONの多目的最適化:使用するライブラリ/ツール?

分類Dev

遺伝的アルゴリズムとPYTHONの多目的最適化:使用するライブラリ/ツール?

分類Dev

辞書を使用してアルゴリズムの効率を向上させる

分類Dev

遺伝的アルゴリズム:ランガーマンの機能とトーナメントの選択

分類Dev

Haskellの合計と製品タイプを列挙するための遺伝的アルゴリズム?

Related 関連記事

  1. 1

    Rの遺伝的アルゴリズム

  2. 2

    非遺伝的ケースのMatlab遺伝的アルゴリズム

  3. 3

    遺伝的アルゴリズム-親の選択とクロスオーバーの確率

  4. 4

    Pythonの遺伝的アルゴリズムの問題

  5. 5

    多項式の遺伝的アルゴリズムの最適化

  6. 6

    Matlabの遺伝的アルゴリズムの突然変異段階

  7. 7

    mlr遺伝的アルゴリズムの初期集団の選択

  8. 8

    遺伝的アルゴリズムの配列ヘルプ

  9. 9

    遺伝的アルゴリズムと反復局所探索アルゴリズムの違いは何ですか?

  10. 10

    遺伝的アルゴリズムと従来のアルゴリズムを区別する

  11. 11

    遺伝的アルゴリズムにおける探索と活用の違い

  12. 12

    MlroseTSPOpt遺伝的アルゴリズム独自のコスト関数

  13. 13

    遺伝的アルゴリズム-多次元配列の交差

  14. 14

    遺伝的アルゴリズムの並列実行

  15. 15

    構造体/遺伝的アルゴリズムの使用

  16. 16

    遺伝的アルゴリズム-収束

  17. 17

    DEAP遺伝的アルゴリズム

  18. 18

    R のルックアップ アルゴリズムの効率を向上

  19. 19

    遺伝的アルゴリズム:サイズNの初期母集団の例

  20. 20

    univeristyタイムテーブルの遺伝的アルゴリズム

  21. 21

    低音モデルの遺伝的アルゴリズムのR実装

  22. 22

    アルゴリズムの効率

  23. 23

    Matlabの遺伝的アルゴリズムを使用した画像再構成アルゴリズムの最適化

  24. 24

    ナッシュ均衡多目的遺伝的アルゴリズムJava

  25. 25

    遺伝的アルゴリズムとPYTHONの多目的最適化:使用するライブラリ/ツール?

  26. 26

    遺伝的アルゴリズムとPYTHONの多目的最適化:使用するライブラリ/ツール?

  27. 27

    辞書を使用してアルゴリズムの効率を向上させる

  28. 28

    遺伝的アルゴリズム:ランガーマンの機能とトーナメントの選択

  29. 29

    Haskellの合計と製品タイプを列挙するための遺伝的アルゴリズム?

ホットタグ

アーカイブ