gpt4 book ai didi

javascript - 遗传算法函数 JS 二维数组

转载 作者:行者123 更新时间:2023-12-01 16:16:51 25 4
gpt4 key购买 nike

我正在尝试做一个基本的遗传算法,其中一个步骤是通过 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);
}
}

最佳答案

问题是您在迭代数组时修改数组,这会改变数组的长度。虽然看起来您只是在修改 population,但 parentspopulations 都引用同一个数组。您可以预先存储长度。

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];

关于javascript - 遗传算法函数 JS 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63197425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com