【问题标题】:strange data in array.toSource() learning genetic algorithmarray.toSource() 学习遗传算法中的奇怪数据
【发布时间】:2011-07-06 20:02:55
【问题描述】:

我刚刚开始学习遗传算法,我基本上是在将本教程http://lethain.com/entry/2009/jan/02/genetic-algorithms-cool-name-damn-simple/ 写成 javascript。有一些更改可以更好地代表我的数据集。

无论如何,当我通过 newPop.toSource() 输出时,我得到了

[[#1=[[30,22],#2=[30,85],#3=[30,76]...]]],[#1#,#2#,#3#.. .#15]]]

我从未见过我的 .toSource 输出是这样的,我期待的只是一个包含两个数组的数组

我的代码是

var newPop=populate(数据,人口,0,70); 函数个体(人口,最小,最大){ var newIndivids=[]; 对于(人口){ newIndivids.push(人口[s]); newIndivids[s][0]+=rand; } 返回新个体; } 函数填充(计数,人口,最小,最大){ var popul=[]; for(indiv in count){ popul.push(个人(人口,最小,最大)); } 返回流行; }

我的代码中是否有什么错误导致了这个奇怪的数组结构??

【问题讨论】:

  • 嗯,skynet.js 有自我意识了吗?
  • 您确定代码正确吗?它至少有一个语法错误。
  • 是的,正如 Pointy.. 指出的那样,您在 pop.push 之后缺少一个结束括号,也建议不要使用 pop 这个词,因为 pop 是一种弹出数组中最后一项的方法。
  • 另外,您忘记了声明“s”和“indiv”的var关键字。
  • 好的 - 好吧 var 是一个非常好的主意,除非你知道你想要一个全局变量 - 通常,使用全局变量作为数组索引有点疯狂:-) 我们都确定我们了解“toSource()”输出的“奇怪”究竟是什么吗?

标签: javascript genetic-algorithm


【解决方案1】:

不确定那些 #1, #2, ... 是什么,但 toSource() 是壁虎特有的:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/toSource
我的猜测是,当时它是对内存中对象的某种“引用”,即不是可移植的输出。

我建议您改用JSON.stringify,它将输出您的数据结构的可移植字符串表示。

JSON 全局对象将在 Firefox/Safari/Chrome 中开箱即用,但如果您在 IE 中也需要它,可以在此处获取:http://www.json.org/js.html

然后要反转这个并取回一个实际的活对象,请使用JSON.parse

var data = JSON.parse(str);

【讨论】:

  • 有趣的是,我查看了 mozzilla 上的确切页面,但没有得到您的答案。奇怪的是,当我执行 JSON.strigify 时,我得到的是一个数组,而不是一个对象。但这就是我想要的,所以我想这很好。
  • 哎呀,也许不是全部答案。 JSON.stringify 将数组作为字符串返回(或将其转换为字符串)。我需要能够将其作为对象或数组运行,如 get newPop[3]。
  • 我假设您只需要以某种方式移动数据。我更新了我的答案,希望对您有所帮助。否则你为什么要尝试 toSource?
  • 我以为这就是你要说的。似乎效率很低。我以为我在构建数组的方式上做错了。但也许这是正确的答案。我似乎找不到其他任何东西。
猜你喜欢
  • 2017-10-16
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2011-02-07
  • 2015-10-19
  • 2010-10-20
相关资源
最近更新 更多