.游戏编程中的人工智能技术

.
(连载之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

谢谢各位读者提出的问题,我已作了更正,插图也已经都有了。

欢迎各位和其他网友继续批评指正!

预 告


游戏编程中的人工智能技术


<神经网络入门>连载

即将开始

(共6篇)

1:生物学的神经网络-大脑介绍

2:数字版的神经网络

3:聪明的扫雷机工程

4:CNeuralNet.h等代码

5:神经网络的编码及遗传算法

6:功能的两个改进

遗传算法入门(连载之十) 神经网络入门(连载预告)相关推荐

  1. java阿波罗入门介绍_十分钟入门Apollo

    一.Apollo简介 1.1 主流配置中心 Disconf 2014年百度开源的配置中心,目前已不再维护 Spring Cloud Config 2014年9月开源,是SpringCloud生态中的一 ...

  2. 神经网络入门(连载1-6)

    原书:<游戏编程中的人工智能技术> 摘自:http://blog.csdn.net/starxu85/article/details/3143533 原文:http://blog.csdn ...

  3. C#forUnity快速入门(连载2)-C#语言入门

     C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三:  学习循环语句(续) ...

  4. 深度学习入门笔记(十八):卷积神经网络(一)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  5. 深度学习入门笔记(十九):卷积神经网络(二)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  6. 无人驾驶汽车系统入门(十二)——卷积神经网络入门,基于深度学习的车辆实时检测

    无人驾驶汽车系统入门(十二)--卷积神经网络入门,基于深度学习的车辆实时检测 上篇文章我们讲到能否尽可能利用上图像的二维特征来设计神经网络,以此来进一步提高识别的精度.在这篇博客中,我们学习一类专门用 ...

  7. 深度学习入门(二十四)卷积神经网络——填充和步幅

    深度学习入门(二十四)卷积神经网络--填充和步幅 前言 卷积神经网络--填充和步幅 课件 填充 步幅 总结 课本 1 填充 2 步幅 3 小结 前言 核心内容来自博客链接1博客连接2希望大家多多支持作 ...

  8. 深度学习入门(三十二)卷积神经网络——BN批量归一化

    深度学习入门(三十二)卷积神经网络--BN批量归一化 前言 批量归一化batch normalization 课件 批量归一化 批量归一化层 批量归一化在做什么? 总结 教材 1 训练深层网络 2 批 ...

  9. 深度学习入门(六十四)循环神经网络——编码器-解码器架构

    深度学习入门(六十四)循环神经网络--编码器-解码器架构 前言 循环神经网络--编码器-解码器架构 课件 重新考察CNN 重新考察RNN 编码器-解码器架构 总结 教材 1 编码器 2 解码器 3 合 ...

最新文章

  1. unity3d 切换网络_Unity3d新网络请求方式UnityWebRequest详解
  2. 第十五届全国大学生智能车竞赛安徽赛区比赛报名信息
  3. python 同时打乱多个列表
  4. mysql 6.5安装_(整理)MySQL_REHL6.5 安装MySQL5.5
  5. 深度学习的数学 (4)张量、矩阵、导数
  6. excelvba怎么设置不打开文件自动保存_自从有了这个工具,我的Office操作已经快到慢不下来了!(升级篇)...
  7. Pandas数据排序,人人都能学会的几种方法
  8. Timus 1114. Boxes
  9. (转)在MAC上查找和设置$JAVA_HOME
  10. CSS3账号密码输入框动画模板
  11. 2021-06-27变量的作用域
  12. Linux服务器文件权限被改
  13. 基于C#的安全聊天工具设计
  14. 【硬件】达林顿驱动电路ULN2000
  15. Python图像处理库PIL的基本概念介绍
  16. linux路由表怎么看懂,教你读懂Linux路由表
  17. 怎么样才能在服务器显示皮肤,lol生涯怎么显示皮肤,手把手教你设置lol生涯皮肤显示...
  18. 为什么要使用mongodb
  19. \int_0^{+\infty} \frac{\sin x}{x}\mathop{}\!\mathrm{d}{x}
  20. JavaScript 推断浏览器类型及32位64位

热门文章

  1. 谷歌、百度循环多次翻译、语音下载python脚本
  2. 2018年年度总结-工作成长
  3. 域名转向目录php代码,php域名301转向程序代码
  4. pythonencoding etf-8_Python 量化分析ETF指数基金投资
  5. 1.1什么是DHTML
  6. linux使用入门debian,Debian 7.7入门安装与配置
  7. 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱
  8. NLTK异常问题 [nltk_data] Error loading reuters: <urlopen error [Errno 11004] [nltk_data] getaddrinfo
  9. 【Android探索】基于OpenCV的微液滴粒径分析APP
  10. Photoshop CS6 MAC 中文版破解版 支持Retina屏