- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
神经网络入门五
神经网络入门连载之五
4.5 神经网络的编码(Encoding the Network) 在本书的开始几章中,你已经看到过怎样用各种各样的方法为遗传算法编码。但当时我并没有向你介绍过一个用实数编码的具体例子,因为我知道我要留在这里向你介绍。我曾经讲到,为了设计一个前馈型神经网络,编码是很容易的。我们从左到右读每一层神经细胞的权重,读完第一个隐藏层,再向上读它的下一层,把所读到的数据依次保存到一个向量中,这样就实现了网络的编码。因此,如果我们有图14所示的网络,则它的权重编码向量将为:? ???0.3, -O.8, -O.2, 0.6, O.1, -0.l, 0.4, 0.5 在这一网络中,为了简单,我没有把偏移值的权重包括进去。但在实际实现编码时,你必须包含偏移值这个权重,否则你肯定无法获得你所需要的结果。
图14 为权重编码。
在此之前讲的事情你都懂了吗?好极了,那下面就让我们转来考虑,怎样用遗传算法来操纵已编码的基因吧。4.6??遗传算法(The Genetic Algorithm)? ?? ???到此,所有的权重已经象二进制编码的基因组那样,形成了一个串,我们就可以象本书早先讨论过的那样来应用遗传算法了。遗传算法(GA)是在扫雷机已被允许按照用户指定的帧数(为了某种缘故, 我下面更喜欢将帧数称作滴答数,英文是ticks)运转后执行的。你可以在ini文件中找到这个滴答数(iNumTicks)的设置。下面是基因组结构体的代码。这些对于你应该是十分面熟的东西了。??Struct SGenome{??vector double vecWeights;??double dFitness;??SGenome():dFitness(0) {}??SGenome(vector double w, double f):vecWeights(w),dFitness(f){}??//重载的排序方法 ? ?? ?friend bool??operator(const SGenome lhs, const SGenome rhs)? ?? ?? ?{ ? ??? ? ?? ?return (lhs.dFitness rhs.dFitness);? ?? ?? ?} }; 从上面的代码你可看出,这一SGenome结构和我们在本书所有其他地方见到的SGenome结构几乎完全一致,唯一的差别就是这里的染色体是一个双精度向量std::vector。因此,可以和通常一样来应用杂交操作和选择操作。但突变操作则稍微有些不同,这里的权重值是用一个最大值为dMaxPerturbation的随机数来搔扰的。这一参数dMaxPerturbation在ini文件中已作了声明。另外,作为浮点数遗传算法,突变率也被设定得更高些。在本工程中,它被设成为0.1。下面就是扫雷机工程遗传算法类中所见到的突变函数的形式:void CGenAlg::Mutate(vectordouble chromo){??// 遍历权重向量,按突变率将每一个权重进行突变??for (int i=0; ichromo.size(); ++i)??{? ???// 我们要骚扰这个权重吗?? ???if (RandFloat() m_dMutationRate)? ???{? ?? ? // 为权重增加或减小一个小的数量? ?? ? chromo += (RandomClamped() * CParams::dMaxPerturbatlon);? ???}??}} 如同以前的工程那样,我已为v1.0版本的Smart Minesweepers工程保留了一个非常简单的遗传算法。这样就能给你留下许多余地,可让你利用以前学到的技术来改进它。就象大多数别的工程一样,v1.O版只用轮盘赌方式选精英,并采用单点式杂交。注意:当程序运行时,权重可以被演化成为任意的大小,它们不受任何形式的限制。 4.7??扫雷机类(The CMinesweeper Class) 这一个类用来定义一个扫雷机。就象上一章描述的登月艇类一样,扫雷机类中有一个包含了扫雷机位置、速度、以及如何转换方向等数据的纪录。类中还包含扫雷机的视线向量(look-at vector);它的2个分量被用来作为神经网络的2个输入。这是一个规范化的向量,它是在每一帧中根据扫雷机本身的转动角度计算出来的,它指示了扫雷机当前是朝着哪一个方向,如图11所示。下面就是扫雷机类CMinesweeper的声明:class CMinesweeper{private:? ???// 扫雷机的神经网络? ?? ?C
文档评论(0)