遗传算法入门(连载之十)

   最近在学习有关遗传算法和神经网络方面的知识,网上查看了很多这方面的秘笈,只怪小生天生愚钝、才疏学浅,不能很好的领悟秘笈中的真谛,往往被弄得晕头转向、不知所措快哭了委屈。直到有一天无意中看到了博主zzwu写的有关这方面的文章,初读之,如温旧习;渐深入,觉甚好;遂一气呵成,犹如拨云见日、茅塞顿开。余甚怕在茫茫Internet中再无机会拜读之,遂收藏于此,以便众人观之,绝无其他不良用途。在此对博主再次深表感谢。

博文转自:http://blog.csdn.net/zzwu/article/details/564030


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



.
(连载之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:功能的两个改进


猜你喜欢

转载自blog.csdn.net/u011514451/article/details/51043227