【发布时间】:2020-11-21 15:07:55
【问题描述】:
我正在尝试做一个基本的遗传算法,其中一个步骤是通过 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);
}
}
【问题讨论】:
-
let parents = population不会创建新数组。两个变量都指向同一个数组,你在每次迭代中增加它的长度population.push(newKid) -
哦,那是我的错误,为什么它不创建一个新数组?以及如何以不同的名称复制数组?
-
@DavidRomero 您可以使用扩展语法创建浅拷贝,如我的回答所示。
-
非常感谢你们的答案和链接,特别是@hev1 对我的代码的修改。不知道它指向同一个数组。
标签: javascript multidimensional-array genetic-algorithm