使用MATLAB遗传算法工具实例(详细)
更新时间:2023-08-07 00:22:01 阅读量: 实用文档 文档下载
最新发布的MATLAB Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。
本章节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。
遗传算法与直接搜索工具箱概述
本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。
8.1.1 工具箱的特点
GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。
使用语句
type function_name
就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。
工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。
遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。
遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。
8.1.1.1 功能特点
遗传算法与直接搜索工具箱的功能特点如下:
(1)图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。
(2)具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。
(3)直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表
决方法和搜索方法。
(4)遗传算法与直接搜索工具箱函数可与MATLAB的优化工具箱或其他的MATLAB
程序结合使用。
(5)支持自动的M代码生成。
8.1.1.2 图形用户界面和命令行函数
遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行和图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置算法选项、对优化问题进行详细定义。
遗传算法与直接搜索工具箱还同时提供了用于优化管理、性能监控及终止准则定义的工具,同时还提供大量标准算法选项。
在优化运行的过程中,可以通过修改选项来细化最优解,更新性能结果。用户也可以提供自己的算法选项来定制工具箱。
8.1.1.3 使用其他函数和求解器
遗传算法与直接搜索工具箱与MATLAB及优化工具箱是紧密结合在一起的。用户可以用遗传算法或直接搜索算法来寻找最佳起始点,然后利用优化工具箱或用MATLAB程序来进一步寻找最优解。通过结合不同的算法,可以充分地发挥 MATLAB 和工具箱的功能以提高求解的质量。对于某些特定问题,使用这种方法还可以得到全局(最优)解。
8.1.1.4 显示、监控和输出结果
遗传算法与直接搜索工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化的过程,并且允许在执行过程中进行修改。
工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化的过程,并且允许在执行过程中进行修改。该工具箱还提供了一些特殊绘图函数,它们不仅适用于遗传算法,还适用于直接搜索算法。适用于遗传算法的函数包括函数值、适应度值和函数估计。适用于直接搜索算法的函数包括函数值、分值直方图、系谱、适应度值、网格尺
寸和函数估计。这些函数可以将多个绘图一并显示,可直观方便地选取最优曲线。另外,用户也可以添加自己的绘图函数。
使用输出函数可以将结果写入文件,产生用户自己的终止准则,也可以写入用户自己的图形界面来运行工具箱求解器。除此之外,还可以将问题的算法选项导出,以便日后再将它们导入到图形界面中去。
8.1.1.5 所需的产品支持
遗传算法与直接搜索工具箱作为其他优化方法的补充,可以用来寻找最佳起始点,然后可以再通过使用传统的优化技术来进一步寻找最优解。
工具箱需要如下产品支持:(1) MATLAB。(2) 优化工具箱。
8.1.1.6 相关产品
与遗传算法与直接搜索工具箱相关的产品有:
(1)统计工具箱——应用统计算法和概率模式。
(2)神经网络工具箱——设计和仿真神经网络。
(3)模糊逻辑工具箱——设计和仿真基于模糊逻辑的系统。
(4)金融工具箱——分析金融数据和开发金融算法。
8.1.1.7 所需的系统及平台
遗传算法和直接搜索工具箱对于对于运行环境、支持平台和系统的需求,可随时通过访问网站了解最新发布的信息。
这里介绍的MATLAB Release 14所需的最低配置是:Windows系列操作系统,Pentium III 500 CPU、64MB RAM,空闲硬盘空间600MB以上。
8.1.2 编写待优化函数的M文件
为了使用遗传算法和直接搜索工具箱,首先必须编写一个M文件,来确定想要优化的函数。这个M文件应该接受一个行向量,并且返回一个标量。行向量的长度就是目标函数中独立变量的个数。本节将通过实例解释如何编写这种M文件。
8.1.2.1 编写M文件举例
下面的例子展示了如何为一个想要优化的函数编写M 文件。假定我们想要计算下面函数的最小值:
2212112122(,)266f x x x x x x x x =-++-
M 文件确定这个函数必须接受一个长度为2的行向量X ,分别与变量x1和x2相对应,并且返回一个标量X ,其值等于该函数的值。为了编写这个M 文件,执行如下步骤:
(1) 在MATLAB 的File 菜单中选择New 菜单项。
(2) 选择M-File ,将在编辑器中打开一个新的M 文件。
(3) 在该M 文件中,输入下面两行代码: function z = my_fun(x)
z = x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2);
(4) 在MATLAB 路径指定的目录中保存该M 文件。
为了查看该M 文件是否返回正确的值,可键入 my_fun([2 3])
ans =
-5
注意:在运行遗传算法工具或模式搜索工具时,不要使用编辑器或调试器来调试目标函数的M 文件,否则会导致在命令窗口出现Java 异常消息,并且使调试更加困难。
8.1.2.2 最大化与最小化
遗传算法和直接搜索工具箱中的优化函数总是使目标函数或适应度函数最小化。也就是说,它们求解如下形式的问题:
min imize ()x
f x 如果我们想要求出函数f (x )的最大值,可以转而求取函数
g (x )=-f (x )的最小值,因为函数g (x )最小值出现的地方与函数f (x )最大值出现的地方相同。
例如,假定想要求前面所描述的函数221211212
2(,)266f x x x x x x x x =-++-的最大值,这时,我们应当编写一个M 文件来计算,求函数
2212112122()(,)(266)g x f x x x x x x x x =-=--++-
的最小值。
8.1.2.3 自动代码生成
遗传算法与直接搜索工具箱提供了自动代码生成特性,可以自动生成求解优化问题所需要的M文件。例如,图所示的就是使用遗传算法工具的自动代码生成特性所产生的M文件。
另外,图形用户界面所输出的优化结果可以作为对来自命令行调用代码的一种解释,这些代码还用于使例程和保护工作自动化。
图遗传算法M文件代码的自动生成
使用遗传算法工具初步
遗传算法与直接搜索工具箱包含遗传算法工具和直接搜索工具。从本节至章末,将主要介绍其中的遗传算法工具及其使用方法。
本节主要介绍遗传算法工具使用的初步知识,内容包括:遗传算法使用规则,遗传算法工具的使用方式,举例说明如何使用遗传算法来求解一个优化问题,解释遗传算法的一些基本术语,最后阐述遗传算法的工作原理与工作过程。
8.2.1 遗传算法使用规则
遗传算法是一种基于自然选择、生物进化过程来求解问题的方法。遗传算法反复修改对于个体解决方案的种群。在每一步,遗传算法随机地从当前种群中选择若干个体作为父辈,
并且使用它们产生下一代的子种群。在连续若干代之后,种群朝着优化解的方向进化。我们可以用遗传算法来求解各种不适宜于用标准优化算法求解的优化问题,包括目标函数不连续、不可微、随机或高度非线性的问题。
遗传算法在每一步使用下列三类规则从当前种群来创建下一代:
(1)选择规则(Selection rules),选择对下一代种群有贡献的个体,称为父辈。
(2)交叉规则(Crossover rules),将两个父辈结合起来构成下一代的子辈种群。
(3)变异规则(Mutation rules),施加随机变化给父辈个体来构成子辈。
遗传算法与标准优化算法主要在两个方面有所不同,它们的比较情况归纳于表中。
表遗传算法与标准优化算法比较
8.2.2 遗传算法使用方式
遗传算法工具有两种使用方式:
(1)以命令行方式调用遗传算法函数ga。
(2)使用遗传算法工具,从图形用户界面到遗传算法。
本节对这些方式做一个简要的介绍。
8.2.2.1 在命令行调用函数ga
对于在命令行使用遗传算法,可以用下列语法调用遗传算法函数ga:
[x fval] = ga(@fitnessfun, nvars, options)
其中:@fitnessfun 是适应度函数句柄;nvars 是适应度函数的独立变量的个数;options 是一个包含遗传算法选项参数的结构。如果不传递选项参数,则ga使用它本身的缺省选项值。
函数所给出的结果:fval——适应度函数的最终值;x——最终值到达的点。
我们可以十分方便地把遗传算法工具输出的结果直接返回到MATLAB的workspace(工作空
间),或以不同的选项从M文件多次调用函数ga来运行遗传算法。
调用函数ga时,需要提供一个选项结构options。后面的有关章节对于在命令行使用函数ga和创建选项结构options提供了详细的描述。
8.2.2.2 通过GUI使用遗传算法
遗传算法工具有一个图形用户界面GUI,它使我们可以使用遗传算法而不用工作在命令行方式。为了打开遗传算法工具,可键入
gatool
打开的遗传算法工具图形用户界面如图所示。
显示参数描述
输入适应度函数
输入适应度函数
开始遗传算法
显示结果
图遗传算法工具
为了使用遗传算法工具,首先必须输入下列信息:
(1)Fitness function(适应度函数)——欲求最小值的目标函数。输入适应
度函数的形式为@fitnessfun,其中是计算适应度函数的M文件。在前面“编写待优化函数的M文件”一节里已经解释了如何编写这种M文件。符号@产生一个对于函数fitnessfun的函数句柄。
(2)Number of variables(变量个数)——适应度函数输入向量的长度。对于
“编写待优化函数的M文件”一节所描述的函数My_fun,这个参数是2。
点击Start按钮,运行遗传算法,将在Status and Results(状态与结果)窗格中显示出相应的运行结果。
在Options窗格中可以改变遗传算法的选项。为了查看窗格中所列出的各类选项,可单击与之相连的符号“+”。
8.2.3 举例:Rastrigin 函数
本节介绍一个例子,讲述如何寻找Rastrigin 函数的最小值和显示绘制的图形。Rastrigin 函数是最常用来测试遗传算法的一个典型函数。Rastrigin 函数的可视化图形显示,它具有多个局部最小值和一个全局最小值,遗传算法可以帮助我们确定这种具有多个局部最小值函数的最优解。
8.2.3.1 Rastrigin 函数
具有两个独立变量的Rastrigin 函数定义为
221212()2010(cos 2cos 2)Ras x x x x x ππ=++-+
Rastrigin 函数的图形如图所示。
工具箱包含一个M 文件,即,是用来计算Rastrigin 函数值的。
图 Rastrigin 函数图形
如图所示,Rastrigin 函数有许多局部最小值——在图上显示为“谷底(valleys )”。然而,该函数只有一个全局最小值,出现在x-y 平面上的点[0,0]处,正如图中竖直线指示的那样,函数的值在那里是0。在任何不同于[0,0]的局部最小点处,Rastrigin 函数的值均大于0。局部最小处距原点越远,该点处Rastrigin 函数的值越大。 全局最小点[0,0]
Rastrigin函数之所以最常用来测试遗传算法,是因为它有许多局部最小点,使得用标准的、基于梯度的查找全局最小的方法十分困难。
图所示是Rastrigin函数的轮廓线,它显示出最大最小交替变化的情形。
局部最小点
局部最小点
全局最小点[0,0]
图 Rastrigin函数的轮廓线
8.2.3.2 寻找Rastrigin函数的最小值
本节解释如何使用遗传算法来寻找Rastrigin函数的最小值。
注意:因为遗传算法使用随机数据来进行它的搜索,所以该算法每一次运行时所返回的结果会稍微有些不同。
为了查找最小值,进行下列步骤:
(1)在命令行键入gatool,打开遗传算法工具。
(2)在遗传算法工具的相应栏目,输入适应度函数和变量个数。在“Fitness
function(适应度函数)”文本框中,输入@rastriginsfcn;在“Number of variables
(变量个数)”文本框中,输入2,这就是Rastrigin函数独立变量的个数。这一步
操作如图所示。
图输入适应度函数与变量个数
(3) 在“Run solver (运行求解器)”窗格中,单击Start 按钮,如图所示。
图 单击运行求解器Start 按钮
在算法运行的同时,“Current generation (当前代数)”文本框中显示出当前的代数。通过点击“暂停(Pause )”按钮,可以使算法临时暂停一下。当这样做的时候,该按钮的名字变为“Resume (恢复)”。为了从暂停处恢复算法的运行,可单击这个“Resume ”按钮。
当算法完成时,“Status and results ”窗格出现如图所示的情形。
图 状态与结果显示
“Status and results ”窗格显示下列信息:
(1) 算法终止时适应度函数的最终值:
Fitness function value:
注意:所显示的值非常接近于Rastrigin 函数的实际最小值0。“遗传算法举例”一节描述了一些方法,可以用来得到更接近实际最小值的结果。
(2) 算法终止的原因: Optimization terminated:
maximum number of generations exceeded.
即退出的原因是:超过最大代数而导致优化终止。
在本例中,算法在100代后结束,这是“Generations(代数)” 选项的缺省值,此选项规定了算法计算的最大代数。
(3)最终点,在本例中是[ ]。
8.2.3.3 从命令行查找最小值
为了从命令行查找Rastrigin函数的最小值,可键入
[x fval reason] = ga(@rastriginsfcn, 2)
这将返回
x =
fval =
reason =
Optimization terminated:
maximum number of generations exceeded.
其中:x是算法返回的最终点;fval是该最终点处适应度函数的值;reason是算法结束的原因。
8.2.3.4 显示绘制图形
“Plots(绘图)”窗格可以显示遗传算法运行时所提供的有关信息的各种图形。这些信息可以帮助我们改变算法的选项,改进算法的性能。例如,为了绘制每一代适应度函数的最佳值和平均值,选中复选框“Best fitness(最佳适应度)”,如图所示。
图绘图对话框
当点击Start按钮时,遗传算法工具显示每一代适应度函数的最佳值和平均值的绘制图形。当算法停止时,所出现的图形如图所示。
最佳值平均值
图各代适应度函数的最佳值和平均值
在每一代中,图的底部的点表示最佳适应度值,而其上的点表示平均适应度值。图的顶部还显示出当前一代的最佳值和平均值。
为了得到最佳适应度值减少到多少为更好的直观图形,我们可以将图中y轴的刻度改变为对数刻度。为此,需进行如下操作:
(1) 从绘图窗格的Edit(编辑)菜单中选择“Axes Properties(坐标轴属性)”,打开属性编辑器,如图所示。
图 绘图属性编辑器 (2) 点击Y 表项。
(3) 在“Scale (刻度)”窗格,选择“Log (对数)”。 绘制的图形如图所示。
最佳值平均值
图每一代适应度函数最佳值和平均值的对数图形
典型情况下,在早期各代中,当个体离理想值较远时,最佳值会迅速得到改进。在后来各代中,种群越接近最佳点,最佳值改进得越慢。
8.2.4 遗传算法的一些术语
本节解释遗传算法的一些基本术语,主要包括:
(1)适应度函数(Fitness Functions)。
(2)个体(Individuals)。
(3)种群(Populations)和代(Generations)。
(4)适应度值(Fitness Values)和最佳适应度值(Best Fitness Values);
(5)父辈和子辈(Parents and Children)。
8.2.4.1 适应度函数
所谓适应度函数就是想要优化的函数。对于标准优化算法而言,这个函数称为目标函数。该工具箱总是试图寻找适应度函数的最小值。
我们可以将适应度函数编写为一个M文件,作为输入参数传递给遗传算法函数。
8.2.4.2 个体
一个个体是可以施加适应度函数的任意一点。一个个体的适应度函数值就是它的得分或评价。例如,如果适应度函数是
222123123(,,)(21)(34)(2)f x x x x x x =++++-
则向量(2, -3, 1)就是一个个体,向量的长度就是问题中变量的个数。个体(2, -3, 1)的得分是f (2, -3, 1) = 51。
个体有时又称为基因组或染色体组(genome ),个体的向量项称为基因(genes )。
8.2.4.3 种群与代
所谓种群是指由个体组成的一个数组或矩阵。例如,如果个体的长度是100,适应度函数中变量的个数为3,我们就可以将这个种群表示为一个100×3的矩阵。相同的个体在种群中可以出现不止一次。例如,个体(2, -3, 1)就可以在数组的行中出现多次。
每一次迭代,遗传算法都对当前种群执行一系列的计算,产生一个新的种群。每一个后继的种群称为新的一代。
8.2.4.4 多样性
多样性或差异(Diversity )涉及一个种群的各个个体之间的平均距离。若平均距离大,则种群具有高的多样性;否则,其多样性低。在图中,左面的种群具有高的多样性,亦即差异大;而右面的种群多样性低,亦即差异小。
图种群多样性比较
多样性是遗传算法必不可少的本质属性,这是因为它能使遗传算法搜索一个比较大的解的空间区域。
8.2.4.5 适应度值和最佳适应度值
个体的适应度值就是该个体的适应度函数的值。由于该工具箱总是查找适应度函数的最小值,所以一个种群的最佳适应度值就是该种群中任何个体的最小适应度值。
8.2.4.6 父辈和子辈
为了生成下一代,遗传算法在当前种群中选择某些个体,称为父辈,并且使用它们来生成下一代中的个体,称为子辈。典型情况下,该算法更可能选择那些具有较佳适应度值的父辈。
8.2.5 遗传算法如何工作
本节简要介绍遗传算法的工作原理或工作过程,内容包括:算法要点;初始种群;生成下一代;后一代的绘图;算法的停止条件。
8.2.5.1 算法要点
下面的要点总结了遗传算法是如何工作的:
(1) 首先,算法创建一个随机种群。
(2) 接着,算法生成一个新的种群序列,即新的一代。在每一步,该算法都使用当前一代中的个体来生成下一代。为了生成新一代,算法执行下列步骤:
(a) 通过计算其适应度值,给当前种群的每一个成员打分。
(b) 确定原来的适应度值的比例尺度,将其转换为更便于使用的范围内的值。
(c) 根据它们的适应度选择父辈。
(d) 由父辈产生子辈。子辈的产生可以通过随机改变一个单个父辈,亦即变异(mutation)来进行,也可以通过组合一对父辈的向量项,亦即交叉(crossover)来进行。
(e) 用子辈替换当前种群,形成下一代。
(3) 最后,若停止准则之一得到满足,则该算法停止。关于停止准则,可参见“8.2.5.7
算法的停止条件”一节。
8.2.5.2 初始种群
遗传算法总是以产生一个随机的初始种群开始,如图所示。
图初始种群
在本例中,初始种群包含20个个体,这恰好是“Population(种群)”选项中的“Population size(种群尺度)”的缺省值。
注意:初始种群中的所有个体均处于图上右上角的那个象限,也就是说,它们的坐标处于0和1之间,这是因为“Population”选项中的“Initial range(初始范围)”的缺省值是[0; 1]。
如果已知函数的最小点大约位于何处,就可以设置一个适当的“Initial range”,以便使该点处于那个范围的中间附近。例如,如果确信Rastrigin函数的最小值在点[0,0]附近,那么就可以直接设置“Initial range”为[-1;1]。然而,正如本例所显示的那样,即使没有给“Initial range”设置一个理想的值,遗传算法也还是能够找到那个最小值。
8.2.5.3 产生下一代
在每一步,遗传算法使用当前种群来产生子辈,即获得下一代。算法在当前种群中选择一组个体,称为父辈,这些个父辈将其genes——亦即其向量中的项——贡献给它们的子辈。
遗传算法通常选择那些具有较好适应度值的个体作为父辈。我们可以在“Selection(选择)”选项的“Selection function(选择函数)”文本框中指定遗传算法用来选择父辈的函数。
遗传算法对于下一代产生三类子辈:
(1)优良子辈(Elite children),是在当前代中具有最佳适应度值的那些个体。
这些个体子辈存活到下一代。
(2)交叉子辈(Crossover children),是由一对父辈向量组合产生的。
(3)变异子辈(Mutation children),是对一个单个父辈引入随机改变即变异产生的。
图表示了这三个类型的子辈。
优良子辈
交叉子辈
变异子辈
图三类子辈
在“8.3.3.5变异与交叉”一节解释如何指定遗传算法产生的每一类子辈的数目,以及用来执行完成交叉和变异的函数。
8.2.5.4 交叉子辈
算法通过组合当前种群中的父辈对(Pair)来产生交叉子辈。在子辈向量的每一个相同位置处,缺省的交叉函数在两个父辈之一的相同位置处随机选择一项,即基因,并将它指派给其子辈。
8.2.5.5 变异子辈
算法通过随机改变个体父辈中的基因而产生变异子辈。按照缺省,算法给父辈增加一个高斯分布的随机向量。
正在阅读:
使用MATLAB遗传算法工具实例(详细)08-07
三、VHDL语言基础05-21
新人教版小学数学二年级上册第6单元《表内乘法二》试卷210-23
复习题(11)01-12
锚杆静压桩作业指导书01-06
人教版一年级数学第五单元《认识人民币》练习题(下册)07-25
广东省建设工程施工招标经评审的最低投标价评标办法工作导则03-06
全自动热转印机安全操作规程(新版)04-12
第13讲 前馈--反馈控制系统分析12-27
回乡扫墓作文300字06-23
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 遗传
- 算法
- 实例
- 工具
- 使用
- MATLAB
- 详细
- 七年级数学下册难题及解答
- 江西省高速铁路安全管理规定
- 麦肯锡公司管理咨询的典型标准流程
- 【推荐】事故反思大讨论-word范文模板 (4页)
- Crack growth behavior under biaxial fatigue with phase difference
- 人教版六年级下册语文10 十六年前的回忆(导学案)
- 机场改扩建工程监理细则
- 五年级消防安全教育主题班会教案-预防和应对火灾事故发生 全国通用
- 视听语言构图,主题
- 5-电子数据交换技术
- 人教版四年级数学下册《小数的加法和减法》PPT课件
- 角膜塑形镜配适不良的十种常见问题和处理方法
- 研发中心管理制度
- 油脂精炼工艺流程图
- 无线数字电视转发器(1)
- 新浪微博开卖小米2:商业化正在加速进行
- 宾馆酒店客房部年终工作总结
- (青岛版五年制)三年级科学上册教案 认识太阳
- 五年级上册道德与法治-7.中华民族一家亲1-课件
- 中国联通移动网网络华为厂家BTS设备基础维护知识测试题库