数组中的值由于未知原因而更改
Values in an array change due to unknown causes
我正在和一些朋友一起为一个学校项目研究神经网络的遗传算法,但我们遇到了一个问题。我们试图做的是:(注意,其中一些可能会发生变化,仅出于测试目的而设置(
我们每一代有10个神经网络。其中第一个是baseNetwork,其余的是baseNetwork的微小变化。在生成结束时,选择性能最好的网络作为下一代的新基础网络。我们将神经网络存储为数组,例如nn[1]是第一个神经网络,它本身就是一个数组。问题是,以某种方式,基本网络在每个网络之后都会发生变化,而不是在每一代网络结束时。以下是遗传算法,其中有一些注释,使其更容易遵循:
function genAlg() {
if (networkNumber < nnPerGen) {
nn[networkNumber][0][1] = lastfitness; // stores fitness
nn[networkNumber][0][2] = deathwall; // stores fitness
networkNumber++; // select new network
nn[networkNumber] = baseNetwork; // is supposed to replace the currently selected network with the baseNetwork of the generation
for (i=1; i<=evolveAmt; i++) {
evolveGate = (Math.floor(gatesAmt * Math.random()) + 1);
evolve();
} // make new variation of currently selected network
} else {
generation++; // start new generation
for (i=1;i<=nnPerGen;i++) {
if (nn[i][0][1] > baseNetwork[0][1]) {
baseNetwork = nn[i];
} else if (nn[i][0][1] = baseNetwork[0][1]) {
if (nn[i][0][2] < baseNetwork[0][2]) {
baseNetwork = nn[i];
}
}
} //Testing fitness, replace baseNetwork if another network is better
networkNumber = 1; // start working with the first network again
}
}
经过非常彻底的测试,我们得出结论,问题出在这条线上:
nn[networkNumber]=baseNetwork;
我们不知道为什么,但不知何故,这条线改变了baseNetwork本身的价值。请记住,baseNetwork本身就是一个数组。
尝试
nn[networkNumber] = Array.from(baseNetwork);
可能您给了它相同的对象引用,所以通过evolution操作更改其中一个对象,您可以同时更改这两个对象。使用Array.from(baseArray)
可以创建一个与baseArray相同的新数组,但它是一个不同的对象
相关文章:
- 对广告服务器的未知信标调用
- Axios spread()具有未知数量的回调参数
- 反汇编的javascript jit代码调用未知函数
- 未知”<#"构造
- Safari 5.1.7下载文件名未知的csv文件
- 带有 JavaScript 随机数函数的未知问题
- 哪个原型用于创建具有未知标记的节点
- xmlHttp.responseText未知错误定义
- JavaScript删除未知侦听器
- 未知格式的Procjess JSON
- 为什么我得到错误:$injector:unp未知提供程序
- 如何对未知表单元素进行表单验证
- 尝试从javascript调用flash方法时出现未知错误
- Angular 1.5组件中的Angular Bootstrap Modal$uibModalInstance未知提供程
- 谷歌图表 - 地理图表“不兼容的数据表:错误:未知地址类型
- 在出厂时注入服务错误: [$injector:unpr] 未知提供程序: $scopeProvider <- $scop
- 未知的 JavaScript 函数声明模式
- React Native 中的未知模块“child_process”
- JavaScript 这返回未知属性
- 错误:$injector:unp未知提供者:未知提供者:bProvider<-b