我对遗传算法感到好奇。
撞墙时我正在做发电开关部分。我从以前的actor数组中删除了下一代的父级,将它们推到了parents数组中,并且正要从父级数组中删除随机的父对,并将它们存储在progen1和progen2变量中,但是由于某种原因, progen1是未定义的,尽管当progen1存储在父级数组中时,我可以访问它的元素。
此代码:
var n1=Math.floor((Math.random(Math.floor(parents.length))));
console.log(parents[n1].cromossomo[0]);
var progen1=parents.splice(n1);
console.log(progen1.cromossomo[0]);
var n2=Math.floor((Math.random(Math.floor(parents.length))));
var progen2=parents.splice(n2);
产生:
{dx: -4.805923044269889, dy: -2.447397585132567}dx: -4.805923044269889dy: -2.447397585132567__proto__: Object
scripts.js:94 Uncaught TypeError: Cannot read property '0' of undefined
at switchGeneration (scripts.js:94)
at run (scripts.js:140)
我不知道为什么会发疯!
答案 0 :(得分:1)
splice()
返回一个数组,其中包含从数组中删除的所有元素。因此,progen1
是parents
起始的n1
所有元素的数组,而不是单个对象。数组没有cromossomo
属性,因此progen1.cromossomo[0]
尝试获取0
的{{1}}索引。
如果要从undefined
中删除1个元素,则需要指定调用parents
时要删除的元素数量。然后,您可以为该值编制索引以获取该元素。
splice()
答案 1 :(得分:-1)
错误消息显示为:Cannot read property '0' of undefined
看着您的代码段,我发现cromossomo[0]
。
如果cromossomo
或parents[n1]
中都不存在progen1
,则为undefined
,从而导致错误。
因此,也许您首先查看一下这些内容,并验证它们中的每一个都有一个cromosso
。