附件说明
关于MATLAB的入门视频有不少,但要称的上完整、系统,恐怕很难有统一的标准。
我提供的是胡晓冬,董辰辉的《MATLAB从入门到精通》(人民邮电出版社,2010-06)一书的配套光盘,应该能满足你的需求。内含217个实例程序文件,330分钟的视频讲解。
图书下载
ishareiasksinacomcn/f/67219177html
图书简介
本书以MATLAB R2009a软件为基础,系统讲解了MATLAB基本环境和 *** 作方法。本书介绍了最新的MATLAB功能,并分章阐述了数据类型、数值计算、符号计算、编程基础、可视化、Simulink、应用程序接口等内容,结合案例详细讲解了MATLAB语言的使用。本书还专门讲解了实用的MATLAB编程技巧与数学建模应用等。
本书所带的光盘是读者学习MATLAB的好帮手,提供了全部示例的源程序,另外配有知识点和例题的视频教程,可帮助读者更好地理解书中的内容并更快地掌握MATLAB的使用方法。
本书内容丰富、贴近实战应用,可作为高校学生系统学习MATLAB的书籍,也可以作为广大科研和工程技术人员在工作中使用MATLAB的参考书。
图书目录
第1章 MATLAB概述 1
11 MATLAB简介 1
12 MATLAB主要功能 2
121 开发算法和应用程序 2
122 分析和访问数据 3
123 实现数据可视化 3
124 进行数值计算 4
125 发布结果和部署应用程序 5
13 MATLAB安装与启动 5
131 MATLAB的安装 5
132 MATLAB的启动与退出 7
133 Desktop *** 作界面简介 8
14 Command Window运行入门 8
141 命令行的使用 8
142 数值、变量和表达式 9
143 命令行的特殊输入方法 11
144 命令窗口的显示格式 12
145 命令窗口常用快捷键与命令 13
15 Command History窗口 14
16 Current Directory窗口 14
17 Workspace Browser和Variable Editor窗口 15
171 Workspace Browser窗口 15
172 Variable Editor窗口 15
18 命令行辅助功能与Function Browser 16
19 Help 17
191 Help Browser 18
192 命令窗口查询帮助 18
第2章 矩阵和数组 20
21 矩阵的创建与组合 20
211 创建简单矩阵 20
212 创建特殊矩阵 21
213 矩阵的合并 22
22 矩阵的寻访与赋值 23
221 矩阵的标识 23
222 矩阵的寻访 24
223 矩阵的赋值 24
23 进行数组运算的常用函数 25
231 函数数组运算规则的定义 25
232 进行数组运算的常用函数 25
24 查询矩阵信息 27
241 矩阵的形状信息 27
242 矩阵的数据类型 27
243 矩阵的数据结构 28
25 数组运算与矩阵运算 28
26 矩阵的重构 29
261 矩阵元素的扩展与删除 29
262 矩阵的重构 30
27 稀疏矩阵 31
271 稀疏矩阵的存储方式 32
272 稀疏矩阵的创建 32
273 稀疏矩阵的运算 35
274 稀疏矩阵的交换与重新排序 36
275 稀疏矩阵视图 38
28 多维数组 38
281 多维数组的创建 39
282 多维数组的寻访与重构 41
29 多项式的表达式及其 *** 作 44
291 多项式的表达式和创建 44
292 多项式运算函数 45
第3章 数据类型 47
31 数值型 47
32 逻辑型 47
321 逻辑型简介 47
322 返回逻辑结果的函数 48
323 运算符的优先级 50
33 字符和字符串 51
331 创建字符串 51
332 字符串比较 52
333 字符串查找与替换 53
334 类型转换 54
335 字符串应用函数小结 55
34 structure数组 56
341 structure数组的创建 57
342 structure数组的寻访 59
343 structure数组域的基本 *** 作 60
344 structure数组的 *** 作 61
35 cell数组 63
351 cell数组的创建 63
352 cell数组的寻访 65
353 cell数组的基本 *** 作 65
354 cell数组 *** 作函数 66
36 Map容器 67
361 Map数据类型介绍 67
362 Map对象的创建 68
363 查看Map的内容 69
364 Map的读写 70
365 Map中key和value的修改 72
366 映射其他数据类型 73
第4章 数值计算 75
41 因式分解 75
411 行列式、逆和秩 75
412 Cholesky因式分解 77
413 LU因式分解 78
414 QR因式分解 79
415 范数 81
42 矩阵特征值和奇异值 82
421 特征值和特征向量的求取 82
422 奇异值分解 84
43 概率和统计 85
431 基本分析函数 85
432 概率函数、分布函数、逆分布函数和随机数 93
44 数值求导与积分 94
441 导数与梯度 94
442 一元函数的数值积分 95
443 二重积分的数值计算 97
444 三重积分的数值计算 97
45 插值 98
451 一维数据插值 98
452 二维数据插值 99
453 多维插值 100
454 样条插值 100
46 曲线拟合 101
461 最小二乘原理及其曲线拟合算法 101
462 曲线拟合的实现 102
47 Fourier分析 102
48 微分方程 104
481 常微分方程 104
482 偏微分方程 106
第5章 符号计算 110
51 符号变量、表达式及符号方程 110
511 符号变量与表达式的创建 110
512 符号计算中的运算符和基本函数 112
513 创建符号方程 113
52 符号微积分 113
521 符号求导与微分 113
522 符号求极限 115
523 符号积分 116
524 级数求和 116
525 Taylor级数 117
53 符号表达式的化简与替换 117
531 符号表达式的化简 118
532 符号表达式的替换 122
54 符号可变精度计算 125
55 符号线性代数 127
551 基础代数运算 127
552 线性代数运算 128
56 符号方程求解 130
561 求代数方程符号解 130
562 求代数方程组的符号解 130
563 求微分方程符号解 132
564 求微分方程组的符号解 134
57 符号积分变换 134
571 Fourier变换及其反变换 134
572 Laplace变换及其反变换 135
573 Z变换及其反变换 136
第6章 MATLAB编程基础 138
61 M文件 138
611 M文件编辑器 139
612 M文件的基本内容 140
613 脚本式M文件 142
614 函数式M文件 143
62 流程控制 143
621 顺序结构 144
622 if语句 144
623 switch语句 146
624 for循环 146
625 while循环 147
626 continue命令 148
627 break命令 149
628 return命令 150
629 人机交互命令 150
63 函数的类型 152
631 主函数 152
632 子函数 152
633 私有函数 153
634 嵌套函数 154
635 重载函数 157
636 匿名函数 157
64 函数的变量 161
641 变量类型 161
642 变量的传递 162
65 函数句柄 164
651 函数句柄的创建 165
652 函数句柄的调用 165
653 函数句柄的 *** 作 166
66 串演算函数 167
661 eval函数 167
662 feval函数 168
663 inline函数 169
67 内存的使用 170
671 内存管理函数 170
672 高效使用内存的策略 170
673 解决“Out of Memory”问题 172
68 程序调试和优化 173
681 使用Debugger窗口调试 173
682 在命令窗口中调试 176
683 profile性能检测 178
69 错误处理 180
691 使用try-catch语句捕捉错误 180
692 处理错误和从错误中恢复 181
693 警告 183
第7章 数据可视化 185
71 绘图的基本知识 185
711 离散数据和离散函数的可视化 185
712 连续函数的可视化 186
713 可视化的一般步骤 187
72 二维图形 187
721 基本绘图函数 187
722 曲线的色彩、线型和数据点型 189
723 坐标、刻度和网格控制 190
724 图形标识 192
725 双坐标图和子图 195
726 双轴对数图形 197
727 特殊二维图形 197
73 三维图形 203
731 绘制三维曲线图 203
732 绘制三维曲面图 203
733 特殊三维图形 205
74 三维图形的高级控制 207
741 视点控制 207
742 颜色的使用 208
743 光照控制 208
第8章 图像处理 210
81 图像文件的 *** 作 210
811 查询图像文件的信息 211
812 图像文件的读写 212
813 图像文件的显示 213
814 图像格式的转换 214
82 图像的几何运算 216
821 图像的平移 216
822 图像的镜像变换 216
823 图像缩放 217
824 图像的旋转 218
825 图像的剪切 218
83 图像的正交变换 219
831 傅立叶变换 219
832 离散余弦变换 220
833 Radon变换 221
84 MATLAB图像增强 222
841 像素值及其统计特性 222
842 对比度增强 224
843 直方图均衡化 225
844 空域滤波增强 226
845 频域增强 228
第9章 图形用户界面(GUI)设计 230
91 句柄图形对象 230
911 图形对象 230
912 图形对象句柄 231
913 图形对象属性的获取和设置 232
92 GUIDE简介 234
921 启动GUI 235
922 Layout编辑器 235
923 运行GUI 236
93 创建GUI 236
931 GUI窗口布局 236
932 菜单的添加 237
933 控件 241
94 CallBack函数 245
941 变量的传递 245
942 函数编写 246
95 GUI设计示例 248
第10章 数据文件I/O 254
101 处理文件名称 254
102 MATLAB支持的文件格式 255
103 导入向导的使用 256
104 MAT文件的读写 257
1041 MAT文件的写入 257
1042 MAT文件的读取 258
105 Text文件读写 259
1051 Text文件的读取 259
1052 Text文件的写入 262
106 Excel文件读写 262
107 音频/视频文件 *** 作 264
1071 获取音频/视频文件的文件头信息 264
1072 音频/视频文件的导入与导出 264
第11章 MATLAB优化问题应用 266
111 MATLAB优化工具箱 266
1111 MATLAB求解器 267
1112 极小值优化 269
1113 多目标优化 275
1114 方程组求解 276
1115 最小二乘及数据拟合 277
112 模式搜索法 278
113 模拟退火算法 280
1131 模拟退火算法简介 280
1132 模拟退火算法应用实例 280
1133 关于计算结果 281
114 遗传算法 282
1141 遗传算法简介 282
1142 遗传算法应用实例 283
115 Optimization Tool简介 285
第12章 信号处理 289
121 信号处理基本理论 289
1211 信号的生成 289
1212 数字滤波器结构 293
122 IIR滤波器的MATLAB实现 294
1221 IIR滤波器经典设计 295
1222 IIR滤波器直接设计法 301
1223 广义巴特沃思IIR滤波器设计 302
123 FIR滤波器的MATLAB实现 303
1231 FIR滤波器设计 303
1232 fir1函数 304
1233 fir2函数 305
第13章 Simulink仿真 306
131 Simulink简介 306
1311 Simulink功能与特点 306
1312 Simulink的安装与启动 307
132 Simulink基础 309
1321 Simulink模型是什么 309
1322 Simulink模块 *** 作 309
1323 Simulink信号线 *** 作 312
1324 Simulink对模型的注释 314
1325 Simulink常用的模型库 314
1326 Simulink仿真配置 316
133 Simulink动态系统仿真 320
1331 简单系统的仿真分析 320
1332 离散系统的仿真分析 322
1333 连续系统的仿真分析 324
134 Simulink模型中的子系统 327
1341 子系统的建立 327
1342 子系统的封装 328
135 Simulink S-函数 331
1351 什么是S-函数 332
1352 S-函数的作用和原理 332
1353 用M文件创建S-函数实例 333
第14章 应用程序接口 336
141 MATLAB应用程序接口介绍 336
142 MATLAB调用C/C++ 337
1421 MATLAB MEX文件 338
1422 C-MEX文件的使用 341
143 C/C++调用MATLAB引擎 346
1431 MATLAB计算引擎概述 346
1432 MATLAB计算引擎库函数 347
1433 C/C++调用MATLAB引擎 348
144 MATLAB编译器 352
1441 MATLAB编译器的安装和设置 353
1442 MATLAB编译器的使用 354
1443 独立应用程序 356
第15章 MATLAB基础计算技巧 365
151 MATLAB数组创建与重构技巧 365
152 MATLAB数据类型使用技巧 371
153 MATLAB数值计算技巧 373
154 MATLAB文件读取 *** 作技巧 375
155 MATLAB绘图技巧 376
第16章 MATLAB编程技巧 379
161 MATLAB编程风格 379
1611 命名规则 379
1612 文件与程序结构 381
1613 基本语句 382
1614 排版、注释与文档 385
162 MATLAB编程注意事项 387
163 内存的使用 389
164 提高MATLAB运行效率 390
1641 提高运行效率基本原则 390
1642 提高运行效率举例 392
第17章 MATLAB在数学建模中的应用 395
171 MATLAB蒙特卡罗模拟 395
1711 蒙特卡罗方法简介 395
1712 蒙特卡罗方法编程示例 396
172 MATLAB灰色系统理论应用 398
1721 GM(1,1)预测模型简介 398
1722 灰色预测计算实例 399
173 MATLAB模糊聚类分析 401
1731 模糊聚类分析简介 401
1732 模糊聚类分析应用示例 402
174 MATLAB层次分析法应用 406
1741 层次分析法简介 406
1742 层次分析法的应用 409
1函数优化
数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。
2。车间调度
间调度问题是一个典型的NP-Hard问题,遗传算法作为一种经典的智能算法广泛用于车间调度中,很多学者都致力于用遗传算法解决车间调度问题,现今也取得了十分丰硕的成果。
遗传算法(GA)属于 人工智能启发式算法 ,启发式算法的目标就是 寻找原始问题的最优解 ,该算法的定义为
人类通过直观常识和生活经验,设计出一种以搜索最优解为目的,通过仿真大自然规律的算法,该算法在可以在接受的花销(计算时间和存储空间)范围内找到问题实例的一个可行解,且该可行解和真实最优解的误差一般不可以被估计
当下主要有的启发式算法包括 遗传算法、退火法,蚁群算法、人工神经网络等 ,这篇文章主要介绍遗传算法
遗传算法的基本原理是模拟达尔文进化论 "物竞天择,适者生存" 的自然法则,其核心思想为
(1)将原始问题的参数,抽象为基因编码
(2)将原始问题的可行解,抽象为基因排列的染色体组合
(3)将原始问题的解集规模,抽象为一定数量染色体组成的种群
(4)寻找可行解的过程,抽象为种群的进化过程(染色体选择、交叉、变异等)
(5)比较可行解的优劣,抽象为量化比较不同种群对当前环境的适应程度
(6)逼近最优解的过程,抽象为淘汰适应度差的种群,保留适应度高的种群进行下一次进化
(7)问题的最优解,抽象为经过多次进化后,最终生存下来的精英种群
理论上,通过有限次种群进化,生存下来的种群都是 精英染色体 ,是最适合当前环境条件的种群,也就可以无限逼近原始问题的最优解
相关生物学术语:
为了大家更好了解遗传算法,在此之前先简单介绍一下相关生物学术语,大家了解一下即可。
基因型(genotype):性状染色体的内部表现;
表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
适应度(fitness):度量某个物种对于生存环境的适应程度。
选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
解码(decoding):基因型到表现型的映射。
个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群
大体实现过程
遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。 遗传算法的实现过程实际上就像自然界的进化过程那样。
基本遗传算法概述
1[开始]生成n个染色体的随机群体(适合该问题的解决方案)
2[适应度]评估群体中每个染色体x的适应度f(x)
3[新种群]通过重复以下来创建新种群直到新种群完成的步骤
31 [选择]根据种群的适合度选择两个亲本染色体(更好的适应性,更大的选择机会)
32 [交叉]以交叉概率跨越父母形成新的后代(儿童) )。如果没有进行交叉,后代就是父母的确切副本。
33 [突变]突变概率突变每个基因座(染色体中的位置)的新后代。
4[接受]在新种群中放置新后代[替换]使用新生成的种群进一步运行算法
5[测试]如果满足结束条件,则停止并返回当前种群中的最佳解
6。[循环]转到步骤2
影响GA的因素
从遗传算法概述可以看出,交叉和变异是遗传算法中最重要的部分。性能主要受这两个因素的影响。在我们解释有关交叉和变异的更多信息之前,我们将给出一些有关染色体的信息。
染色体编码
染色体应该以某种方式包含它所代表的解决方案的信息。最常用的编码方式是二进制字符串。然后染色体看起来像这样:
每个染色体由二进制字符串表示。字符串中的每个位都可以表示解决方案的一些特征。另一种可能性是整个字符串可以表示一个数字 - 这已在基本的GA小程序中使用。当然,还有许多其他的编码方式。编码主要取决于解决的问题。例如,可以直接编码整数或实数,有时对某些排列等进行编码很有用。
染色体交叉
在我们确定了将使用的编码之后,我们可以继续进行交叉 *** 作。 Crossover对来自亲本染色体的选定基因进行 *** 作并产生新的后代。最简单的方法是随机选择一些交叉点,并在此点之前从第一个父项复制所有内容,然后在交叉点之后复制另一个父交叉点之后的所有内容。交叉可以说明如下:( |是交叉点):
还有其他方法可以进行交叉,例如我们可以选择更多的交叉点。交叉可能非常复杂,主要取决于染色体的编码。针对特定问题进行的特定交叉可以改善遗传算法的性能。
4染色体突变
在执行交叉之后,发生突变。突变旨在防止群体中的所有解决方案落入解决问题的局部最优中。突变 *** 作随机改变由交叉引起的后代。在二进制编码的情况下,我们可以将一些随机选择的位从1切换到0或从0切换到1突变可以如下所示:
突变(以及交叉)技术主要取决于染色体的编码。例如,当我们编码排列时,可以将突变作为两个基因的交换来进行。
GA的参数
1交叉和突变概率
GA有两个基本参数 - 交叉概率和变异概率。
交叉概率 :交叉的频率。如果没有交叉,后代就是父母的精确副本。如果存在交叉,则后代由父母染色体的部分组成。如果交叉概率为100%,那么所有后代都是由交叉产生的。如果它是0%,那么全新一代都是从旧种群的染色体的精确拷贝制成的(但这并不意味着新一代是相同的!)。交叉是希望新染色体将包含旧染色体的良好部分,因此新染色体将更好。但是,将旧人口的一部分留给下一代是好的。
突变概率 :染色体部分突变的频率。如果没有突变,则在交叉(或直接复制)后立即生成后代而不进行任何更改。如果进行突变,则改变染色体的一个或多个部分。如果突变概率为100%,则整个染色体发生变化,如果是0%,则没有变化。突变通常会阻止GA陷入局部极端。突变不应该经常发生,因为GA实际上会改变为随机搜索。
2其他参数
种群规模 :种群中有多少染色体(一代)。如果染色体太少,GA几乎没有可能进行交叉,只探索了一小部分搜索空间。另一方面,如果染色体太多,GA会减慢。研究表明,经过一定的限制(主要取决于编码和问题),使用非常大的种群是没有用的,因为它不能比中等规模的种群更快地解决问题。
3 选择
正如您从GA概述中已经知道的那样,从群体中选择染色体作为交叉的父母。问题是如何选择这些染色体。根据达尔文的进化论,最好的进化能够创造出新的后代。选择最佳染色体的方法有很多种。例如轮盘赌选择,Boltzman选择,锦标赛选择,等级选择,稳态选择和其他一些选择。
1轮盘赌选择
父母根据他们的健康状况选择。染色体越好,它们被选择的机会就越多。想象一下轮盘赌轮,人口中的所有染色体都放在那里。轮盘中截面的大小与每条染色体的适应度函数的值成比例 - 值越大,截面越大。有关示例,请参见下图。
轮盘赌中放入一块大理石,并选择停止的染色体。显然,具有较大适应值的染色体将被选择更多次。
该过程可以通过以下算法来描述。
[Sum]计算总体中所有染色体拟合度的总和 - 总和S
[Select]从区间(0,S)-r生成随机数。
[循环]遍历总体并从0 - 总和中求和。当总和s大于r时,停止并返回您所在的染色体。当然,对于每个群体,步骤1仅执行一次。
2排名选择
当健身值之间存在很大差异时,先前的选择类型会出现问题。例如,如果最佳染色体适应度是所有拟合度总和的90%,那么其他染色体将很少被选择的机会。等级选择首先对群体进行排序,然后每个染色体接收由该等级确定的适合度值。最差的将是健身1,第二个最差的2等等,最好的将具有适应度N(人口中的染色体数量)。您可以在下面的中看到,在更改适应性与排名确定的数字后情况如何变化。
排名前的情况(适合度图)
排名后的情况(订单号图)
现在所有染色体都有机会被选中。然而,这种方法会导致收敛速度变慢,因为最好的染色体与其他染色体的差别不大。
3稳态选择
这不是选择父母的特定方法。这种选择新种群的主要思想是染色体的很大一部分可以存活到下一代。稳态选择GA以下列方式工作。在每一代中,选择一些好的(具有更高适应性)染色体来创建新的后代。然后去除一些不好的(具有较低适合度)染色体并将新的后代放置在它们的位置。其余人口幸存下来。
4精英
精英主义的想法已经被引入。当通过交叉和变异创建新的种群时,我们有很大的机会,我们将失去最好的染色体。精英主义是首先将最佳染色体(或少数最佳染色体)复制到新种群的方法的名称。其余人口以上述方式构建。精英主义可以迅速提高GA的性能,因为它可以防止丢失最佳找到的解决方案。
交叉(Crossover)和突变 (Mutation)
交叉和变异是GA的两个基本运算符。 GA的表现非常依赖于它们。运算符的类型和实现取决于编码以及问题。有多种方法可以执行交叉和变异。在本章中,我们将简要介绍一些如何执行多个编码的示例和建议。
1二进制编码
交叉
单点交叉 - 选择一个交叉点,从第一个父项复制从染色体开始到交叉点的二进制字符串,其余从另一个父项复制
选择两点交叉 - 两个交叉点,从第一个父节点复制从染色体开始到第一个交叉点的二进制字符串,从第一个父节点复制从第一个交叉点到第二个交叉点的部分,其余的是再次从第一个父级复制
均匀交叉 - 从第一个父项或第二个父项中随机复制位
算术交叉 - 执行一些算术运算以产生新的后代
突变
位反转 - 选择的位被反转
2置换编码
交叉
单点交叉 - 选择一个交叉点,将排列从第一个父项复制到交叉点,然后扫描另一个父项,如果该数字还没有在后代中,则添加它注意:还有更多方法如何在交叉点之后产生休息
(1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) = (1 2 3 4 5 6 8 9 7)
变异
顺序更改 - 选择并交换两个数字
(1 2 3 4 5 6 8 9 7) => (1 8 3 4 5 6 2 9 7)
3值编码
交叉
可以使用来自二进制编码的所有交叉
变异
添加一个小数字(用于实数值编码) - 将一个小数字添加到(或减去)所选值
(129 568 286 411 555)=>(129 568 273 422 555)
4树编码
交叉
树交叉 - 在父母双方中选择一个交叉点,父母在该点被分割,交换点下面的部分被交换以产生新的后代
变异
更改运算符,数字 - 选定节点已更改
补充:
疑惑点:
初始种群是啥:
利用二进制(一般)表示最终解
例如:需要求解z=x^2+y^2的最大值,x={1,5,3,8},y={5,4,0,6}
用六位二进制数表示由x,y组成的解,例如:001100 表示x=1,y=4
001100 称为一条基因序列,表示的是该问题的一种解决 方案
种群是包含多个基因序列(解决方案/个体)的集合
适应度函数是啥,有什么作用:
适应度函数可以理解成“ 游戏 规则”,如果问题较为复杂,需要自定义适应度函数,说明如何区分优秀与不优秀的个体; 如果问题比较简单,例如上述求最大值的问题,则直接用此函数式作为适应度函数即可。作用:评定个体的优劣程度,从而决定其遗传机会的大小。
怎么选择:
定义“适者生存不适者淘汰”的规则,例如:定义适应度高的被选择的概率更大
怎么交叉:
利用循环,遍历种群中的每个个体,挑选另一个体进行交叉。例如,通过遍历为基因序列A挑选出B配对,则取A的前半部分,B的后半部分,组合成新的个体(基因序列)C
如何变异:
随机挑选基因序列上的某一位置,进行0-1互换
建议 GA的参数
如果您决定实施遗传算法,本章应该为您提供一些基本建议。这些建议非常笼统。您可能希望尝试使用自己的GA来解决特定问题,因为没有一般理论可以帮助您针对任何问题调整GA参数。
建议通常是对GA的经验研究的结果,这些研究通常仅在二进制编码上进行。
交叉率
交叉率一般应高,约为80%-95%。 (但是有些结果表明,对于某些问题,交叉率约为60%是最好的。)
突变率
另一方面,突变率应该非常低。最佳利率似乎约为05%-1%。
人口规模
可能令人惊讶的是,非常大的人口规模通常不会改善GA的性能(从找到解决方案的速度的意义上说)。良好的人口规模约为20-30,但有时大小为50-100是最好的。一些研究还表明,最佳种群规模取决于编码字符串(染色体)的大小。这意味着如果你有32位染色体,那么人口应该高于16位染色体。
选择
可以使用基本的轮盘赌选择,但有时排名选择可以更好。查看有关选择优缺点的章节。还有一些更复杂的方法可以在GA运行期间更改选择参数。基本上,这些表现类似于模拟退火。如果您不使用其他方法来保存最佳找到的解决方案,则应确保使用精英主义。您也可以尝试稳态选择。
编码
编码取决于问题以及问题实例的大小。查看有关编码的章节以获取一些建议或查看其他资源。
交叉和变异
运算符取决于所选的编码和问题。查看有关 *** 作员的章节以获取一些建议。您还可以查看其他网站。
搜索空间
如果我们正在解决问题,我们通常会寻找一些最好的解决方案。所有可行解决方案的空间(所需解决方案所在的解决方案集)称为搜索空间(也称为状态空间)。搜索空间中的每个点代表一种可能的解决方案。每个可能的解决方案可以通过其对问题的值(或适应度)进行“标记”。通过GA,我们在众多可能的解决方案中寻找最佳解决方案 - 以搜索空间中的一个点为代表。然后寻找解决方案等于在搜索空间中寻找一些极值(最小值或最大值)。有时可以很好地定义搜索空间,但通常我们只知道搜索空间中的几个点。在使用遗传算法的过程中,随着进化的进行,寻找解决方案的过程会产生其他点(可能的解决方案)。
问题是搜索可能非常复杂。人们可能不知道在哪里寻找解决方案或从哪里开始。有许多方法可用于寻找合适的解决方案,但这些方法不一定能提供最佳解决方案。这些方法中的一些是爬山,禁忌搜索,模拟退火和遗传算法。通过这些方法找到的解决方案通常被认为是很好的解决方案,因为通常不可能证明最佳方案。
NP-hard Problems
NP问题是一类无法用“传统”方式解决的问题。我们可以快速应用许多任务(多项式)算法。还存在一些无法通过算法解决的问题。有很多重要问题很难找到解决方案,但是一旦有了解决方案,就很容易检查解决方案。这一事实导致了NP完全问题。 NP代表非确定性多项式,它意味着可以“猜测”解决方案(通过一些非确定性算法),然后检查它。如果我们有一台猜测机器,我们或许可以在合理的时间内找到解决方案。为简单起见,研究NP完全问题仅限于答案可以是或否的问题。由于存在输出复杂的任务,因此引入了一类称为NP难问题的问题。这个类并不像NP完全问题那样受限。 NP问题的一个特征是,可以使用一个简单的算法,可能是第一眼看到的,可用于找到可用的解决方案。但是这种方法通常提供了许多可能的解决方案 - 只是尝试所有可能的解决方案是非常缓慢的过程(例如O(2 ^ n))。对于这些类型问题的更大的实例,这种方法根本不可用。今天没有人知道是否存在一些更快的算法来提供NP问题的确切答案。对于研究人员来说,发现这样的算法仍然是一项重大任务(也许你!:-))。今天许多人认为这种算法不存在,因此他们正在寻找替代方法。替代方法的一个例子是遗传算法。 NP问题的例子是可满足性问题,旅行商问题或背包问题。可以获得NP问题汇编。
参考:
>
在许多实际应用领域,无论是工程技术科学还是社会经济科学中,都会遇到全局最优化问题[53,56~59,61],这一类问题大多数可以形式化为一个对(S,f)的寻优问题,其中 S⊂R n 是 R n 中的有界集,f∶S→R是 n 维实值函数。所要求解的问题就是要找到一点 x best∈S,使得 f(xbest)是 S 上的全局最优解,可以是极大值或极小值。以极小值为例,即求一点 x min∈S,满足
含水层参数识别方法
尽管人们对这类问题进行了大量的研究,但得到的成绩仍不能令人满意,目前只能解决一些简单的问题。对于更复杂的全局最优化问题,通常是利用数值解法,但许多数值解法都不能找到最优解,只是返回一个接近于全局最优的值。
全局最优化数值方法可以分为两大类:确定性算法和随机算法。在随机算法中,最优化步骤在一定程度上依赖于概率事件,它排除了确定性算法中的一个最大障碍——预先详细说明一个问题的全部特征并针对问题的特征决定算法应采用的对策。与常规的优化算法相比,遗传算法有可能在更大的范围内探寻问题潜在的解。确定性算法没有用到概率信息。只有当对S上进行穷举搜索及对f规定附加的假设条件下,算法才能找到全局最优解。实行穷举搜索在很多情况下(如实数解)是不可能的,因此多采用对f规定附加的假设条件,这必然影响到最终解的可靠性。在这些算法中,搜索速度越快的算法往往意味着需要对f做更多的假设,或者不能保证搜索成功。与此相对照,许多随机算法都可以证明在概率意义下渐近收敛到全局最优解,即这些算法保证以概率1渐近收敛,而且随机算法的计算结果一般要优于那些确定性算法的结果。遗传算法就是其中具有代表性的随机算法。
常用的遗传算法 *** 作有选择(Selection)、交叉(Crossover)、变异(Mutation)。复制是直接将个体的代码进行拷贝形成新个体。下面就选择、交叉与变异 *** 作做一介绍。
731 选择过程
选择过程是以旋转赌轮Pop-Size次(种群规模,即群体中个体的总个数)为基础,每次旋转都为新的种群选择一个染色体。首先计算出个体i被选择的概率Pi,优秀的染色体其选择概率大,然后根据选择概率的大小将一个圆盘分为Pop-Size个扇形,每个扇形的中心角的大小为2πPi。
每次进行选择时,先选择赌轮边界旁一个不动的参考点,赌轮随机地转动,若不动点停留在扇形j内,则选择个体j。个体的适应值越大,被选择的概率越大,从而其染色体被遗传到下一代的概率越大。
赌轮式选择的特点是对于种群内的所有个体,无论其适应值大小,都有被选择的机会。适应值大的个体被选择的概率大,适应值小的个体被选择的概率小。经过选择后适应值大的个体在种群中的数目会增加。这正体现了适者生存的原则。
732 交叉 *** 作
交叉 *** 作是个有组织的、随机的字符串间的信息交换过程。假设群体G(t)是模式库。历史信息以每个模式实例数目的形式存储于G(t)中。交叉作用产生模式库中已有模式的新的实例,同时也产生新的模式。简单的交叉 *** 作分为三步:
(1)从当前群体G(t)中选择两个个体结构:A=a1a2…an,B=b1b2…bn;
(2)以交叉概率 Pc 随机选择一个整数 x∈{1,2,…,n};
(3)交换A和B中位置x右边的元素,产生两个新的个体结构:a1a2…axbx+1…bn和b1b2…bxax+1…an。
733 变异 *** 作
对于群体G(t)中的每个个体A=a1a2…an,简单的变异 *** 作过程如下:
1)每个位置的字符变量都有一个变异概率Pm,各位置互相独立,通过随机过程选择发生变异的位置x1,x2,…,xn。
2)产生一个新个体结构 B=a1 a2……an ,其中是从对应位置x 1 的字符变量的值域中随机选择的一个取值。类似地,,…,可以同样得到。
如果每个位置的变异概率等于Pm,那么模式H(阶为o(H))发生一次或多次变异的概率是
含水层参数识别方法
遗传 *** 作除了有选择、交叉、变异等算子外,还有染色体内部复制(Intrachromo-somal duplication)、删除、易位(Translocation)、分异(Segregation)等。
以上就是关于MATLAB 7.0全部的内容,包括:MATLAB 7.0、遗传算法有哪些比较直观的应用呢、遗传算法--GA等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)