c++ - ai junkie 神经网络教程 - 不明白

标签 c++ machine-learning neural-network genetic-algorithm

我一直在努力理解 http://www.ai-junkie.com/ann/evolved/nnt1.html 上的神经网络教程

我想我遵循了教程的大部分内容,直到第 8 页(最后一页)为止,尽管我可能没有,因为如果我这样做了,我可能会理解最后一页,不是吗?对我来说不幸的是,这个页面没有得到很好的解释,因为它显然应该“从代码中的注释中很容易理解”。而且,论坛似乎不起作用。

我想我希望有人已经看过或学过本教程来帮助解释,但如果您还没有看过或想看一看,请继续。基本上,它结合了神经网络和遗传算法,以便在小坦克四处扫雷时控制它们的左右轨道。神经网络将最近的地雷位置和坦克的方向(lookat) vector 作为输入,并输出左右坦克轨迹,用于更新坦克的速度和旋转。在一轮结束时,坦克会被培育出新一代更好的坦克。

但是……我就是不明白。具体来说,我不明白坦克履带值与坦克捡起地雷的能力有什么关系,我也不明白不捡起地雷的垃圾坦克之间的区别任何地雷和能够快速有效地扫除地雷的好地雷。

显然(如果您运行演示程序)坦克在模拟运行时间越长的情况下越好。但是有人可以向我解释(希望是引用 Tony Robinson 的话,用 Beano 读者可以理解的方式)到底发生了什么吗?

谢谢!

最佳答案

根据我对您问题的解释,这是我能给出的最佳答案。如果这不是您要求的,请道歉,但您确实要求了最基本的解释。

I don't see exactly how the tank track values relate to the ability of the tank to pickup the mines

坦克的工作方式是它有两条履带——左履带和右履带。他们每个人都有一个速度。如果两条履带都全速前进,则坦克将直线前进。如果左履带向前移动,右履带以相同的速度向后移动,则坦克将顺时针旋转。所以它基本上是一个复杂的控制机制,旨在使演习比坦克可以接受“向北移动一格”类型的指令更有趣。

神经网络的全部要点是获取输入(当前坦克方向和最近矿井的位置)并生成输出以正确地引导坦克及其不稳定的左/右踏板控制朝向矿井。 NN 了解到,如果地雷在它的右边,它需要将左设置为“向前”,向右设置为“后退”,直到它指向地雷。然后它需要将左右都设置为“前进”,这样它实际上就朝着矿山前进了。

I don't understand the difference between the rubbish tanks that don't pick up any mines and the good ones that sweep up mines quickly and efficiently.

垃圾 jar 没有正确的 NN 来正确地操纵 jar 。如果它看到右边有地雷,它可能会向左转远离地雷,因为它“不知道”如何向右转向。或者它可能会远离它已经指向的地雷,而不是朝它移动。好的人“知道”如何向地雷移动,也就是说,他们的神经网络以这样一种方式加权,即当给出最近的地雷的输入时,这些神经网络将倾向于向地雷移动而不是远离它.

关于c++ - ai junkie 神经网络教程 - 不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049476/

相关文章:

c++ - 将 NuGet Boost DLL 自动复制到输出目录

C++:无法使运算符<<成为模板化嵌套类的友元

c++ - 对数字数组进行子采样

c++ - 使用无符号字符数组处理单个字节

python-2.7 - theano 中的类型匹配错误 [无法将泛型类型(变量 <Generic>)转换为 TensorType 类型]

c++ - 反向传播二维神经元网络 C++

matlab - 逻辑回归 - 计算成本函数返回错误结果

machine-learning - caffe 中的 Datum 对象 - 无监督网络

python - 增加音频分类中的val_acc

machine-learning - Keras 加权合并