遺伝的アルゴリズム関数JS 2D配列

デビッド・ロメロ:

基本的な遺伝的アルゴリズムを実行しようとしています。ステップの1つは、n点で遺伝的交差を介して次の母集団を生成することです。任意に4を選択しました。問題は、コードを停止しない限り、コードが無期限に実行されることです。これは3匹の子孫を生み出すだけだと思いました。なぜそれが再帰的であるのか誰かに教えてもらえますか?

let population = [
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [0, 1, 1, 1, 0, 0, 1, 1, 0, 1],
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [0, 1, 1, 1, 0, 0, 1, 1, 0, 1],
]


kidsFactory()

function kidsFactory() {
    let newKid = []
    let parents = population
    for(i=0; i<(parents.length - 1);i++){
        parent1 = parents[i]
        parent2 = parents[i+1]
        console.log('parent1 '+parent1);
        console.log('parent2 '+parent2);
        newKid.push(parent1[0], parent1[1], parent2[2], parent2[3], parent1[4], parent1[5], parent2[6], parent2[7], parent1[8], parent1[9])
        console.log(newKid);
        population.push(newKid)
        newKid=[]
        console.log(population);
    }
}
hev1;

問題は、配列を反復しながら配列を変更しているため、配列の長さが変わることです。それは見えるがあなただけ変更しているpopulationparentspopulationsの両方が同じ配列を参照してください。代わりに、長さを事前に保存できます。

for(let i = 0, len = parents.length; i < len - 1; i++){

let population = [
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [0, 1, 1, 1, 0, 0, 1, 1, 0, 1],
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [0, 1, 1, 1, 0, 0, 1, 1, 0, 1],
]


kidsFactory()

function kidsFactory() {
    let newKid = []
    let parents = population
    for(let i = 0, len = parents.length; i < len - 1; i++){
        parent1 = parents[i]
        parent2 = parents[i+1]
        console.log('parent1 '+parent1);
        console.log('parent2 '+parent2);
        newKid.push(parent1[0], parent1[1], parent2[2], parent2[3], parent1[4], parent1[5], parent2[6], parent2[7], parent1[8], parent1[9])
        console.log(newKid);
        population.push(newKid)
        newKid=[]
        console.log(population);
    }
}
.as-console-wrapper{max-height: 100%;top: 0;}

スプレッド構文を使用して、配列の浅いコピーを作成することもできます。

let parents = [...population];

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

2D配列を検索するアルゴリズム

分類Dev

Pythonの2D配列の再帰的アルゴリズム

分類Dev

2次元配列でクロスオーバーを実行する方法-遺伝的アルゴリズム

分類Dev

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

分類Dev

テーブルセル/ 2D配列ソートアルゴリズム

分類Dev

2D配列のピークを見つけるアルゴリズム

分類Dev

2D配列での経路探索のアルゴリズム

分類Dev

2D配列のラビンカープアルゴリズム

分類Dev

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

分類Dev

数のセットを隣接せずに2D配列に分散するアルゴリズム

分類Dev

2D配列の再帰関数

分類Dev

Java:遺伝的アルゴリズムのクロスオーバーのために2つのダブルビットストリングを混合する

分類Dev

アルゴリズムはカタツムリの2D配列で番号の位置を見つけます

分類Dev

2D配列のサイズ

分類Dev

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

分類Dev

DEAP遺伝的アルゴリズム

分類Dev

Rの遺伝的アルゴリズム

分類Dev

2D配列リストの印刷

分類Dev

Javaforループと2D配列

分類Dev

遺伝的アルゴリズムの新世代が指数関数的に増加

分類Dev

matlab遺伝的アルゴリズム停止基準関数評価の最大数

分類Dev

2D配列パスファインディングアルゴリズムの最適化

分類Dev

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

分類Dev

2D配列リスト配列の混乱

分類Dev

Matlab:2Dセル配列からchar配列へ

分類Dev

カテゴリカル2D配列に連続

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

    2D配列を検索するアルゴリズム

  5. 5

    Pythonの2D配列の再帰的アルゴリズム

  6. 6

    2次元配列でクロスオーバーを実行する方法-遺伝的アルゴリズム

  7. 7

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

  8. 8

    テーブルセル/ 2D配列ソートアルゴリズム

  9. 9

    2D配列のピークを見つけるアルゴリズム

  10. 10

    2D配列での経路探索のアルゴリズム

  11. 11

    2D配列のラビンカープアルゴリズム

  12. 12

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

  13. 13

    数のセットを隣接せずに2D配列に分散するアルゴリズム

  14. 14

    2D配列の再帰関数

  15. 15

    Java:遺伝的アルゴリズムのクロスオーバーのために2つのダブルビットストリングを混合する

  16. 16

    アルゴリズムはカタツムリの2D配列で番号の位置を見つけます

  17. 17

    2D配列のサイズ

  18. 18

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

  19. 19

    DEAP遺伝的アルゴリズム

  20. 20

    Rの遺伝的アルゴリズム

  21. 21

    2D配列リストの印刷

  22. 22

    Javaforループと2D配列

  23. 23

    遺伝的アルゴリズムの新世代が指数関数的に増加

  24. 24

    matlab遺伝的アルゴリズム停止基準関数評価の最大数

  25. 25

    2D配列パスファインディングアルゴリズムの最適化

  26. 26

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

  27. 27

    2D配列リスト配列の混乱

  28. 28

    Matlab:2Dセル配列からchar配列へ

  29. 29

    カテゴリカル2D配列に連続

ホットタグ

アーカイブ