Javascript 整洁的算法,提供的库中缺少函数定义
我在youtube上查阅了一篇教程,我一直在尝试为一只flappy bird克隆实现增强拓扑的神经进化(NEAT)算法 根据教程,我遇到了以下问题: 执行Javascript 整洁的算法,提供的库中缺少函数定义,javascript,machine-learning,artificial-intelligence,genetic-algorithm,Javascript,Machine Learning,Artificial Intelligence,Genetic Algorithm,我在youtube上查阅了一篇教程,我一直在尝试为一只flappy bird克隆实现增强拓扑的神经进化(NEAT)算法 根据教程,我遇到了以下问题: 执行index.html时,我收到以下错误 TypeError: func is not a function matrix.js:104:27 这令人困惑,因为matrix.js和nn.js都是指导教程的人员提供给我的库函数 查看matrix.js的代码,我发现抛出错误的行是 this.data[i][j] = func(val,i,j);
index.html
时,我收到以下错误
TypeError: func is not a function matrix.js:104:27
这令人困惑,因为matrix.js
和nn.js
都是指导教程的人员提供给我的库函数
查看matrix.js的代码,我发现抛出错误的行是
this.data[i][j] = func(val,i,j);
但是我在matrix.js
或nn.js
中的任何地方都找不到函数func()
的函数定义
但是在nn.js
的代码中,我发现func
被称为变量而不是函数
class ActivationFunction {
constructor(func, dfunc) {
this.func = func;
this.dfunc = dfunc;
}
}
let sigmoid = new ActivationFunction(
x => 1 / (1 + Math.exp(-x)),
y => y * (1 - y)
);
let tanh = new ActivationFunction(
x => Math.tanh(x),
y => 1 - (y * y)
);
及
所以我假设func是为了给this.data[I][j]
提供val的sigmoid值,所以我编写了自己的sigmoid函数,将激活函数值提供给this.data[I][j]
。它在执行时抛出了错误
ReferenceError:NeuralNetwork未定义[Learn More]bird.js:25:7
因此,我决定放弃编写函数的尝试,并决定将sigmoid激活函数的值直接复制到变量this.data[I][j]
中,如下所示:
this.data[i][j] = 1/(1+Math.pow(Math.E, -val));
这种方法没有出现任何错误,但确实给我带来了一个新问题。
早些时候,每一代人中的每一个成员都会独立行动,产生如下产出:
但现在我得到的是
这并不是说在第二张图片中只生成了一个玩家对象,所有250个对象都在生成,而是它们都位于另一个对象之上,使得看起来只有一个玩家对象。这是由于
1/(1+Math.pow(Math.E, -val));
将完全相同的值发送到this.data[I][j]
,我观察到,当不同的值传递到this.data[I][j]
时,每个播放器对象都独立运行。
有人知道为什么func会这样吗。一个文件中的变量,而func是另一个文件中的函数
我为我的不清晰表示歉意,因为这是库文件中的一个错误,我不是矩阵运算的专家,我已经尽力将我面临的问题传达给大家。到目前为止,我所认识的人都没有遇到过这些问题
所有需要的文件都可以找到this.data[i][j]=this.func
?@Adelin没有工作:/你明白了吗?关键是使用this
keyord将func声明为构造函数的一部分,但后来,在所有地方,都将其用作未绑定变量。使用this.func
在任何地方调用最初声明为this.func
的func
@Adelin我明白你的意思,我尝试过使用this.func,但我仍然有同样的问题
1/(1+Math.pow(Math.E, -val));