遗传算法入门(连载之十) 神经网络入门(连载预告)
.游戏编程中的人工智能技术
.
(连载之10)
..
这是《遗传算法入门》连载的最后一篇,将对连载来源进行一些说明。
0.本连载来自《游戏编程中的人工智能技术》一书,是该书第三章一章的基本上完整的内容。
1.全书介绍遗传算法(GA)和神经网络(NN)等人工智能技术的原理,以及它们在游戏编程中的应用。
2.<游戏编程中的人工智能技术> 目录(这是我交给出版社的原始手稿目录)如下
译者序 ………………………………………………………………………………… i
前言 ……………………………………………………………………………………vi
致谢 ……………………………………………………………………………………ix
关于作者 ………………………………………………………………………………ix
目录 ……………………………………………………………………………………xi
丛书编辑者的来信 ……………………………………………………………………xx
引言 …………………………………………………………………………………xxii
第一部分 Windows编程
第1章 Windows编程初步 ………………………………………………………2
1.1 历史一瞥 ………………………………………………………………………… 2
1.1.1 Windows 1.0 …………………………………………………………………3
1.1.2 Windows 2.0 …………………………………………………………………3
1.1.3 Windows 3.0和3.1 ………………………………………………………… 3
1.1.4 Windows 9.5 …………………………………………………………………4
1.1.5 Windows 9.8.及其后续版本 ……………………………………………… 5
1.2 Hello World! …………………………………………………………………… 5
1.3 编写第一个Windows程序 …………………………………………………………6
1.3.1 匈牙利表示法 ……………………………………………………………… 9
1.3.2 第一个窗口 …………………………………………………………………11
1.3.2.1 注册你的窗口 …………………………………………………………12
1.3.2.2 创建窗口 ………………………………………………………………15
1.3.3 Windows消息循环(Message Pump)…………………………………………18
1.3.4 Windows过程(Windows Procedure)……………………………………… 21
1.3.4.1 WM_CREATE消息 ……………………………………………………… 23
1.3.4.2 WM_PAINT消息 …………………………………………………………24
1.3.4.3 WM_DESTROY消息 ………………………………………………………26
1.3.4.4 下面怎样办呢?……………………………………………………… 27
1.3.5 键盘输入 ……………………………………………………………………27
1.3.5.1 虚拟键代码(Virtual Key Codes)……………………………………27
1.3.6 嗒的嗒!…………………………………………………………………… 29
第2章 Windows编程进阶………………………………………………………30
2.1 Windows图形设备接口(GDI)…………………………………………………… 30
2.1.1 设备描述表(Device Context, DC)……………………………………… 31
2.1.1.1 怎样得到句柄(Handle)呢?………………………………………… 31
2.1.2 各种绘图工具:画笔、画刷、颜色、线和形状 …………………………33
2.1.2.1 自定义画笔(Pen)………………………………………………………37
2.1.2.2 画刷(Brushes) ……………………………………………………… 40
2.1.2.3 形状(Shapes)… ………………………………………………………42
2.2 文本(Text)………………… ……………………………………………………46
2.2.1 TextOut …………………………………………………………………… 47
2.2.2 DrawText ……………………………………………………………………47
2.2.3 加入颜色(color)和透明度(Transparency)………………………………48
2.2.4 实时消息抽取循环 …………………………………………………………49
2.3 如何创建后备缓冲区? … ………………………………………………………51
2.3.1 这听上去很棒,但怎样来实现呢?……………………………………… 53
2.3.2 我怎样来使用后备缓冲器呢?…………………………………………… 55
2.3.3 保持干净(Tidy)…………………………………………………………… 57
2.4 使用资源(Resources)……………………………………………………………59
2.4.1 图标(Icons)…………………………………………………………………60
2.4.2 光标(Cursors)………………………………………………………………61
2.4.3 菜单(Menu)………………………………………………………………… 62
2.4.4 为菜单添加具体功能 ………………………………………………………63
2.5 对话框(Dialog Boxes)………………………………………………………… 65
2.5.1 一个简单的对话框 …………………………………………………………66
2.5.2 一些更有用的知识 …………………………………………………………68
2.6 正确定时(Timing)……………………………………………………………… 73
2.7 结束了!………………………………………………………………………… 74
第二部分 遗传算法
第3章 遗传算法入门 …………………………………………………………76
3.1 鸟和蜜蜂………………………………………………………………………… 76
3.2 二进制数速成…………………………………………………………………… 81
3.3 计算机内的进化………………………………………………………………… 83
3.3.1 什么是赌轮选择(Roulette Wheel Selection)? ………………………84
3.3.2 什么是杂交率(Crossover Rate)? ………………………………………85
3.3.3 什么是变异率(Mutation Rate)? ……………………………………… 85
3.3.4 咂搞的呀!………………………………………………………………… 85
3.4 帮助Bob找回家 ………………………………………………………………… 86
3.4.1 为染色体编码 ………………………………………………………………88
3.4.2 Epoch方法 ………………………………………………………………… 93
3.4.3 选取参数值 …………………………………………………………………95
3.4.4 算子函数(Operator Functions)………………………………………… 96
3.4.4.1 重温赌轮选择 …………………………………………………………96
3.4.4.2 重温杂交(Crossover)算子 ………………………………………… 97
3.4.4.3 重温变异(Mutation)算子 ……………………………………………98
3.4.5 运行寻路人(Pathfinder)程序 ……………………………………………99
3.5 练习题 ……………………………………………………………………………99
第4章 置换码与巡回销售员问题 ……………………………………………100
4.1 巡回销售员问题(TSP)………………………………………………………… 100
4.1.1 小心陷阱 ………………………………………………………………… 102
4.1.2 CmapTSP,SGenome,CgaTSP………………………………………… 104
4.1.2.1 CmapTSP类 ……………………………………………………………104
4.1.2.2 SGenome结构 …………………………………………………………107
4.1.2.3 CgaTSP类 …………………………………………………………… 109
4.2 置换变异算子(Permutation Mutation Operator)………………………… 111
4.3 置换杂交算子(Permutation Crossover Operator)…………………………115
4.4 挑选一个适应性函数 ………………………………………………………… 116
4.5 选择 (Selection) …………………………………………………………… 118
4.6 把一切组装在一起 …………………………………………………………… 119
4.6.1 #defines文件 …………………………………………………………… 120
4.7 总结 …………………………………………………………………………… 121
4.8 练习 …………………………………………………………………………… 122
第5章 遗传算法优化 ………………………………………………………… 123
5.1 TSP用的各种算子……………………………………………………………… 124
5.1.1 各种置换变异算子…………………………………………………………124
5.1.1.2 移位变异(Displacement Mutation,DM)………………………… 127
5.1.1.3 插入变异 (Insertion Mutation,IM) ……………………………128
5.1.1.4 倒置变异 (Inversion Mutation,IVM) ………………………… 129
5.1.1.5 倒置移位变异(Displaced Inversion Mutation,DIM)………… 129
5.1.2 各种置换杂交算子 ……………………………………………………… 130
5.1.2.1 基于顺序的杂交(Order-Based Crossover,OBX)…………………130
5.1.2.2 基于位置的杂交(Position-Based Crossover,PBX)…………… 133
5.2 各种处理工具 ………………………………………………………………… 136
5.2.1 选择(Selection)技术 ……………………………………………………137
5.2.1.1 精英选择(Elitism)………………………………………………… 138
5.2.1.2 稳态选择(Steady State Selection)………………………………138
5.2.1.3 适应性比例选择(Fitness Proportionate Selection)………… 138
5.2.1.4 赌轮选择(Roulette Wheel Selection)……………………………138
5.2.1.5 随机遍及取样(Stochastic Universal Sampling)……………… 139
5.2.1.6 锦标赛选择(Tournament Selection)………………………………140
5.2.2 变比技术(Scaling Techniques)…………………………………………142
5.2.2.1 排名变比(Rank Scaling)……………………………………………142
5.2.2.2 西格玛变比(Sigma Scaling)……………………………………… 143
5.2.2.3 波兹曼变比(Boltzmann Scaling)………………………………… 146
5.2.3 其它杂交算子 …………………………………………………………… 147
5.2.3.1 单点杂交(Single-Point Crossover)………………………………147
5.2.3.2 两点杂交(Two-Point Crossover)………………………………… 147
5.2.3.3 多点杂交(Multi-Point Crossover)……………………………… 148
5.2.4 子群技术(Niching Techniques)…………………………………………150
5.3 总结 …………………………………………………………………………… 151
5.4 练习 …………………………………………………………………………… 151
第6章 登月也不难………………………………………………………………152
6.1 创建和处理矢量图形 ………………………………………………………… 153
6.1.1 顶点和顶点缓冲 ………………………………………………………… 153
6.1.2 顶点变换 ………………………………………………………………… 155
6.1.2.1 平移(Translation)………………………………………………… 156
6.1.2.2 变比(Scaling)……………………………………………………… 157
6.1.2.3 旋转(Rotation)………………………………………………………157
6.1.2.4 综合运用 …………………………………………………………… 159
6.1.3 矩阵魔法(Matrix Magic)…………………………………………………161
6.1.3.1 矩阵究竟是什么?……………………………………………………161
6.1.3.2 矩阵的乘法 ………………………………………………………… 162
6.1.3.3 单位矩阵 …………………………………………………………… 163
6.1.3.4 用矩阵变换顶点 …………………………………………………… 163
6.1.3.5 奇妙部分来了 ……………………………………………………… 165
6.2 矢量是什么?……………………………………………………………………166
6.2.1 矢量加、减法 …………………………………………………………… 168
6.2.2 计算矢量大小 …………………………………………………………… 169
6.2.3 矢量的数量乘 …………………………………………………………… 170
6.2.5 矢量的分解(投影)…………………………………………………………171
6.2.6 奇妙的点积(Dot Product)……………………………………………… 172
6.2.7 SVector2.D实用工具类 ………………………………………………… 173
6.3 绝顶聪明的牛顿 ……………………………………………………………… 173
6.3.1 时间(Time)…………………………………………………………………174
6.3.2 长度(Length)………………………………………………………………175
6.3.3 质量(Mass)…………………………………………………………………175
6.3.4 力(Force)………………………………………………………………… 176
6.3.5 运动-速度(Velocity)……………………………………………………177
6.3.6 运动-加速度(Acceleration)……………………………………………178
6.3.7 感觉到了力,真快活 …………………………………………………… 180
6.3.8 引力(Gravity)…………………………………………………………… 180
6.4 登月工程-人控制的 ………………………………………………………… 181
6.4.1 Ccontroller类的定义 ……………………………………………………182
6.4.2 CLander类的定义 …………………………………………………………183
6.4.3 UpdateShip函数 ………………………………………………………… 185
6.5 遗传算法控制的登月艇 ……………………………………………………… 191
6.5.1 为基因组编码 …………………………………………………………… 191
6.5.2 杂交和变异操作 ………………………………………………………… 193
6.5.3 适应性函数(Fitness Function)…………………………………………194
6.5.4 更新函数(Update Function)…………………………………………… 196
6.5.5 运行程序 ………………………………………………………………… 199
6.6 小结 …………………………………………………………………………… 199
6.7 习题 …………………………………………………………………………… 199
第三部分 神经网络
第7章 用平常语言讲神经网络…………………………………………………202
7.1 神经网络介绍……………………………………………………………………202
7.2 一个生物学的神经网络-大脑 …………………………………………………203
7.3 数字版的神经网络 …………………………………………………………… 206
7.3.1 现在需要一些数学了 …………………………………………………… 208
7.3.2 我知道什么是神经细胞了,但用它来干什么呢?………………………210
7.4 聪明的扫雷机工程 …………………………………………………………… 212
7.4.1 选择输出 ………………………………………………………………… 213
7.4.2 选择输入 ………………………………………………………………… 215
7.4.3 隐藏的神经细胞要多少?…………………………………………………216
7.4.4 CNeuralNeth文件 …………………………………………………………217
7.4.4.1 SNeuron结构 ……………………………………………………… 217
7.4.4.2 SNeuronLayer结构 ………………………………………………… 219
7.4.4.3 CNeuralNet类 ……………………………………………………… 219
7.4.5 神经网络的编码 ………………………………………………………… 224
7.4.6 遗传算法 ………………………………………………………………… 225
7.4.7 扫雷机类(CMinesweeper Class)…………………………………………226
7.4.7.1 CMinesweeper::Update函数 ……………………………………… 228
7.4.8 CController类 ……………………………………………………………230
7.4.8.1 CController::Update方法 ……………………………………………233
7.4.9 运行此程序 ……………………………………………………………… 235
7.4.1.0 功能的两个改进 …………………………………………………… 236
7.4.1.1 改进一 ……………………………………………………………… 236
7.4.1.2 改进二 ……………………………………………………………… 239
7.5 最后说几句 …………………………………………………………………… 241
7.6 练习题 ………………………………………………………………………… 241
第8章 为你的Bot提供知觉器 …………………………………………………242
8.1 回避障碍物 …………………………………………………………………… 243
8.1.1 认识环境 ………………………………………………………………… 243
8.1.2 适应性函数 ……………………………………………………………… 246
8.2 为您的Bot提供一个记忆器(memory)………………………………………… 248
8.2.1 适应性函数 ……………………………………………………………… 255
8.3 本章小结 …………………………………………………………………… 256
8.4 练习题 ……………………………………………………………………… 257
第9章 有监督的训练方法 …………………………………………………… 258
9.1 异或函数(XOR Function)………………………………………………………258
9.1.1 反向传播(BP)怎么工作?…………………………………………………259
9.1.1.1 调整输出层的权重 ………………………………………………… 261
9.1.1.2 为隐藏层调整权重 ………………………………………………… 262
9.1.1.3 一个例子 …………………………………………………………… 262
9.1.1.4 改变成CNeuralNet代码 …………………………………………… 265
9.2 RecognizeIt - 鼠标手势的识别 ……………………………………………270
9.2.1 用向量来表示一个手势 ………………………………………………… 271
9.2.2 训练网络(Training the Network)………………………………………273
9.2.3 记录并变换鼠标数据 …………………………………………………… 275
9.2.4 增加新的手势 …………………………………………………………… 277
9.2.5 CController类 ……………………………………………………………278
9.3 一些有用的技术和窍门 ……………………………………………………… 281
9.3.1 增加动量(Momentum)………………………………………………………281
9.3.2 过拟合(Over Fitting)……………………………………………………282
9.3.3 柔性最大激励函数 ……………………………………………………… 284
9.4 监督学习的应用 ……………………………………………………………… 285
9.5 一个现代寓言 ………………………………………………………………… 286
9.6 练习题 ………………………………………………………………………… 287
第10 章 实时演化 …………………………………………………………… 288
10.1 聪明的外星人(Brainy Aliens)………………………………………………288
10.1.1 程序实现 …………………………………………………………………290
10.1.1.1 Roswell再现了:外星人大脑的尸体解剖 ……………………… 290
10.1.1.2 外星人的演化 ………………………………………………………295
10.1.1.3 CController::Update方法 ………………………………………… 299
10.1.2 运行Brainy Aliens程序 ………………………………………………… 301
10.2 练习题………………………………………………………………………… 302
第11章 神经网络拓扑结构的演化 ……………………………………………303
11.1 竞争约定(competing convention)问题 ……………………………………304
11.2 直接编码 ………………………………………………………………………305
11.2.1 GENITOR(基因子)…………………………………………………………305
11.2.2 二进制矩阵编码 …………………………………………………………306
11.2.2.1 几个相关问题 ………………………………………………………307
11.2.3 基于节点的编码 …………………………………………………………308
11.2.4 基于路径的编码 …………………………………………………………311
11.3 间接编码 ………………………………………………………………………311
11.3.1 基于文法的编码 …………………………………………………………312
11.3.2 二维生长编码 ……………………………………………………………313
11.4 NEAT(拓扑扩张的神经演化)………………………………………………… 314
11.4.1 NEAT基因组 ………………………………………………………………315
11.4.1.1 SLinkGene结构 …………………………………………………… 315
11.4.1.2 SNeuronGene结构 ………………………………………………… 317
11.4.1.3 CGenome类……………………………………………………………319
11.4.2 算子和创新(Operators and Innovations)………………………………322
11.4.2.1 CGenome::AddLink方法 ……………………………………………324
11.4.2.2 CGenome::AddNeuron方法 …………………………………………329
11.4.2.3 创新怎样帮助我们设计一个有效的杂交操作 ……………………336
11.4.3 物种形成(Speciation)………………………………………………… 341
11.4.3.1 兼容性测试 …………………………………………………………342
11.4.3.2 CSpecies 类…………………………………………………………345
11.4.4 Cga换时代方法(Cga Epoch Method) ………………………………… 348
11.4.5 将基因组转变为表现型 …………………………………………………354
11.4.5.1 SLink结构……………………………………………………………355
11.4.5.2 SNeuron结构…………………………………………………………355
11.4.5.3 把所有东西组合在一起…………………………………………… 357
11.4.5.4 CNeuralNet类……………………………………………………… 358
11.4.6 运行Demo程序 ……………………………………………………………363
11.5 本章小结 ……………………………………………… …………………… 364
11.6 练习题………………………………………………………………………… 365
第四部分 附录
附录A WEB资源 …………………………………………………………………367
A1 相关的URL地址 ……………………………………………………………… 367
A2 新闻组 …………………………………………………………………………368
附录B 参考书目及推荐读物 ………………………………………………… 369
B1 技术书 …………………………………………………………………………369
B2 论文 ……………………………………………………………………………370
B3 能激发思想的书 ………………………………………………………………371
B4 好得见血的科幻小说!……………………………………………………… 372
附录C 光盘上有些什么?……………………………………………………………373
技术支持 …………………………………………………………………………… 374
后记 ………………………………………………………………………………… 375
索引 ………………………………………………………………………………… 376
3.该书是英文《AI Techniques for Game Programming》的翻译,原书在Internet上可以找到很多好评,是目前国外、国内许多游戏学校或培训班的指定教材。其特点就是浅近易懂,且提供大量实际例子,也写得生动活泼,被认为是人工智能难得的好书,是一本指南性读物。
4.本书中文由沙鹰和我翻译,连载的那一章由本人翻译,所以没有任何侵权行为。同时也欢迎大家引用,大家可以放心。
5.本书现在已交清华大学出版社出版。这里的第三章是较早翻译并较早(2005年)贴出来的,系未经出版社审校的原始译文。出版时有过一些错误更正,但也不可避免会引入一些新的差错(最终出版时有不少删改,未经本人校对,十分遗憾!)。如果发现问题,请对照检查。
6.本连载所介绍内容的完整的VC++源程序和执行程序请到下面下载:
www.zzwu.cn/ai/AIch03.rar
谢谢各位读者提出的问题,我已作了更正,插图也已经都有了。
欢迎各位和其他网友继续批评指正!
预 告
游戏编程中的人工智能技术
即将开始
1:生物学的神经网络-大脑介绍
2:数字版的神经网络
3:聪明的扫雷机工程
4:CNeuralNet.h等代码
5:神经网络的编码及遗传算法
6:功能的两个改进
遗传算法入门(连载之十) 神经网络入门(连载预告)相关推荐
- java阿波罗入门介绍_十分钟入门Apollo
一.Apollo简介 1.1 主流配置中心 Disconf 2014年百度开源的配置中心,目前已不再维护 Spring Cloud Config 2014年9月开源,是SpringCloud生态中的一 ...
- 神经网络入门(连载1-6)
原书:<游戏编程中的人工智能技术> 摘自:http://blog.csdn.net/starxu85/article/details/3143533 原文:http://blog.csdn ...
- C#forUnity快速入门(连载2)-C#语言入门
C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三: 学习循环语句(续) ...
- 深度学习入门笔记(十八):卷积神经网络(一)
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(十九):卷积神经网络(二)
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 无人驾驶汽车系统入门(十二)——卷积神经网络入门,基于深度学习的车辆实时检测
无人驾驶汽车系统入门(十二)--卷积神经网络入门,基于深度学习的车辆实时检测 上篇文章我们讲到能否尽可能利用上图像的二维特征来设计神经网络,以此来进一步提高识别的精度.在这篇博客中,我们学习一类专门用 ...
- 深度学习入门(二十四)卷积神经网络——填充和步幅
深度学习入门(二十四)卷积神经网络--填充和步幅 前言 卷积神经网络--填充和步幅 课件 填充 步幅 总结 课本 1 填充 2 步幅 3 小结 前言 核心内容来自博客链接1博客连接2希望大家多多支持作 ...
- 深度学习入门(三十二)卷积神经网络——BN批量归一化
深度学习入门(三十二)卷积神经网络--BN批量归一化 前言 批量归一化batch normalization 课件 批量归一化 批量归一化层 批量归一化在做什么? 总结 教材 1 训练深层网络 2 批 ...
- 深度学习入门(六十四)循环神经网络——编码器-解码器架构
深度学习入门(六十四)循环神经网络--编码器-解码器架构 前言 循环神经网络--编码器-解码器架构 课件 重新考察CNN 重新考察RNN 编码器-解码器架构 总结 教材 1 编码器 2 解码器 3 合 ...
最新文章
- unity3d 切换网络_Unity3d新网络请求方式UnityWebRequest详解
- 第十五届全国大学生智能车竞赛安徽赛区比赛报名信息
- python 同时打乱多个列表
- mysql 6.5安装_(整理)MySQL_REHL6.5 安装MySQL5.5
- 深度学习的数学 (4)张量、矩阵、导数
- excelvba怎么设置不打开文件自动保存_自从有了这个工具,我的Office操作已经快到慢不下来了!(升级篇)...
- Pandas数据排序,人人都能学会的几种方法
- Timus 1114. Boxes
- (转)在MAC上查找和设置$JAVA_HOME
- CSS3账号密码输入框动画模板
- 2021-06-27变量的作用域
- Linux服务器文件权限被改
- 基于C#的安全聊天工具设计
- 【硬件】达林顿驱动电路ULN2000
- Python图像处理库PIL的基本概念介绍
- linux路由表怎么看懂,教你读懂Linux路由表
- 怎么样才能在服务器显示皮肤,lol生涯怎么显示皮肤,手把手教你设置lol生涯皮肤显示...
- 为什么要使用mongodb
- \int_0^{+\infty} \frac{\sin x}{x}\mathop{}\!\mathrm{d}{x}
- JavaScript 推断浏览器类型及32位64位
热门文章
- 谷歌、百度循环多次翻译、语音下载python脚本
- 2018年年度总结-工作成长
- 域名转向目录php代码,php域名301转向程序代码
- pythonencoding etf-8_Python 量化分析ETF指数基金投资
- 1.1什么是DHTML
- linux使用入门debian,Debian 7.7入门安装与配置
- 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱
- NLTK异常问题 [nltk_data] Error loading reuters: <urlopen error [Errno 11004] [nltk_data] getaddrinfo
- 【Android探索】基于OpenCV的微液滴粒径分析APP
- Photoshop CS6 MAC 中文版破解版 支持Retina屏