《基于MatLab分布式编程模型的机械优化设计算法实验指导书.doc》由会员分享,可在线阅读,更多相关《基于MatLab分布式编程模型的机械优化设计算法实验指导书.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于MATLAB分布式编程模型的机械优化设计算法实验指导书一、实验所需基础知识MATLAB是matrix & laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它在很大程度上摆脱了传统非交互式程序设计语言(如C、Java)的编辑模式。本指导书重点阐述在MATLAB的编程环境下,如何运用优化工具箱(Optimization Toolbox)、分布式计算服务(MATLAB Distributed Computing Server,简称MDCE)和并行计算工具箱(Parallel Comput
2、ing Toolbox)实现机械优化设计的算法,有关MATLAB操作环境和编程语言的详细基础知识请参考帮助文件或其它相关资料。1MATLAB语言编程简介MATLAB开发环境除了提供命令窗口(Command Window),实现人机交互式操作外,还提供编辑器(Editor),用户可以编制自己的程序文件。用MATLAB语言编写的可以在MATLAB环境中运行的程序称为M文件,M文件用扩展名.m 结尾,可在命令行中执行,也可被其它程序调用。M文件分为两种:命令文件和函数文件,它们有各自的特点。1.1 函数文件函数接收输入参数,返回输出参数。函数文件与程序文件类似也是以“.m”为扩展名的文本文件,而程序
3、文件与函数文件的主要区别在于,函数允许通过数值进行参数传递,而且函数使用局部变量而不是全局变量操作。另外函数文件的第一行必须包括“function”这个关键字。函数文件的文件名必须和函数定义的函数名称相同。MATLAB的函数M文件通常由以下几个部分组成:l 函数定义行 函数M文件的第一行用关键字“function”把M文件定义为一个函数,并指定它的名字,并且与文件名必须相同,同时定义了函数的输入和输入参数。输入参数的定义用小括号(),如果有多个输入参数则用逗号分隔;输出参数的定义用中括号,如果有多个输出参数则用逗号分隔。l H1行所谓H1行指帮助文本的第一行,它紧跟在定义行之后并以“%”符号开
4、头,用于概括说明函数名和函数的功能。l 函数帮助文本帮助文本指位于H1行之后函数体之前的说明文本,同样以“%”符号开头,一般用来比较详细地介绍函数的功能和用法。在命令窗口用help命令时将显示函数的H1行和所有帮助文本。当然,帮助文本是可选项,不是必选项。l 函数体是函数的主体部分,包括进行运行和赋值操作的所有MATLAB程序代码,其中可以有流程控制、输入输出、计算、赋值、注释以及函数调用等操作。l 注释除了函数开始独立的帮助文本外,还可以在函数体中添加对语句的注释。注释必须以“%”符号开头,MATLAB在编译执行M文件时把每一行中“%”后面的全部内容作为注释不进行编译。例1.1:黄金分割法求
5、一维问题最优解算法函数minHJ.mfunction x,minf = minHJ(f,a,b,isDisplay,eps)% 一维黄金分割法%f: 目标函数的符号表达式%a: 区间左端 %b: 区间右端%isDisplay: 是否显示求解结果%eps: 收敛精度 if nargin = 3 isDisplay = false;end format long;if nargin eps & k fu a = l; l = u; u = a + 0.618*(b - a); else b = u; u = l; l = a + 0.382*(b-a); end k = k+1; tol = ab
6、s(b - a);endif k = disp(找不到最小值!); x = NaN; minf = NaN; return;endx = (a+b)/2;minf = subs(f, findsym(f),x); if isDisplay disp -黄金分割法求解结果-; fprintf(迭代次数 k=%6dn,k); fprintf(最优点 x*=%6.2fn,x); fprintf(最优值 f(x*)=%6.2fn,minf);endformat short;1.2 命令文件命令文件没有输入参数也没有输出参数,只是一些MATLAB命令和函数的组合。命令文件可以操作工作空间的变量,也可以生
7、成新的变量,但是当命令文件执行结束后新变量将保存在工作空间中,不会被自动清除。例1.2:调用黄金分割法求解一维函数的最优解minHJ_test.mclc;syms t;f = t3 - 3*t + 2;x,minf=minHJ(f,-3,5,true);在编辑器界面按F5键运行该程序,其运行结果如下:-黄金分割法求解结果-迭代次数 k= 34最优点 x*= 1.00最优值 f(x*)= 0.001.3 子函数一个M文件中可以定义多个函数,其中第一个定义的函数称为主函数,主函数名必须与M文件名相同,其它函数称为子函数。子函数只能被定义它的文件中的函数调用,其它函数和文件不能调用。1.4 局部函数
8、把一些文件放在private目录下,那么这些文件中定义的函数就是局部函数。局部函数只能被其父母目录中的函数或文件调用,其它函数和文件无权调用。1.5 M文件的执行当Matlab 遇到一个新的名称(命令、函数、变量)时,按如下次序查找这个名称:(1)当前的工作空间;(2)子函数名称;(3)局部函数名称;(4)set path 指定的路径。要想使自己编写的函数或命令能够在命令窗口自由的使用,一个比较好的处理方法是建立一个目录,并把这个目录加到Set Path指定的目录中,将自己编写的M 文件都存放到这个目录中。2MATLAB优化工具箱(Optimization Toolbox)我们除了可以运用MA
9、TLAB语言自己编写优化算法外,还可以直接调用优化工具箱来解决工程设计中的优化问题。2.1 MATLAB优化工具箱的常用函数 MATLAB优化工具箱由一系列函数组成,主要包括:边界约束条件下的非线性最小化Fminbnd求解多变量函数的最小化Fminunc求解无约束非线性最小化Fminsearch求解线性规划问题Linprog求解二次规划问题Quadprog求解有约束的非线性最小化Fmincon求解多目标规划的优化问题Fgoalattain求解最小、最大化问题Fminimax各个函数的语法结构和适用解决优化问题的类型,请参阅MATLAB帮助文件。另外,在MATLAB的命令窗口键入命令help o
10、ptim结果显示该工具箱中所有函数清单,部分函数如下图示。2.2函数调用时需要注意的问题使用优化工具箱时,由于优化函数要求目标函数和约束条件满足一定的格式,所以需要用户在进行模型输入时注意以下几个问题:(1).目标函数最小化优化函数fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目标函数最小化,如果优化问题要求目标函数最大化,可以通过使该目标函数的负值最小化即-f(x)最小化来实现。近似地,对于quadprog函数提供-H和-f,对于linprog函数提供-f。(2).约束非正优化工具箱要求非线性不等式约束的
11、形式为Ci(x)0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的目的,如Ci(x)0形式的约束等价于-Ci (x)0;Ci (x)b形式的约束等价于-Ci (x)+b0。2.3 应用实例设计一圆形截面的悬臂梁,该梁在悬臂端作用有集中载荷P=1000kgf,扭矩M=1000kgf.cm。悬臂伸出长度的允许取值范围为5cml15cm,直径的允许取值范围为2cmd10cm。试求在满足强度、刚度条件下,用料最省的设计方案。(1).优化模型的建立根据悬臂梁的工作要求,优化模型建立如下:设计变量:目标函数:约束条件:(2).运用优化工具箱求解该优化模型是典型的非线性规划问题,因此
12、我们调用工具箱的fmincon函数求解。l 目标函数文件myfun_test.mfunction f = myfun_test(x)f = 0.25*pi*x(1)2*x(2);l 约束条件文件Confun_test.mfunction c, ceq = ConFun_test(x)ceq=;c(1) = -x(1)+2;c(2) = x(1)-10;c(3) = -x(2)+5;c(4) = x(2)-15;c(5) = -x(1)3/x(2)+10;c(6) = -x(1)3*+6.66;c(7) = -x(1)4/x(2)3+0.965;l 调用fmincon函数命令文件test_too
13、lbox.mclc;% call optimization tool boxoptions = optimset(GradObj, off,LargeScale,off,Display,iter);x0 = -0.2,-0.2;x,fval = fmincon(myfun_test,x0,ConFun_test,options)l 运行结果运行上面的命令文件,可得到优化的计算结果:x = 3.6840 5.0000fval = 53.29753MATLAB分布式计算服务(MDCE)和并行计算工具箱(Parallel Computing Toolbox)云计算(cloud computing)是
14、一种基于互联网的计算方式,核心思想是将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务。MDCE和并行计算工具箱是Mathworks公司的云计算解决方案,通过它们我们可以充分利用联网计算机(多处理器和多核)的计算能力来解决复杂系统模型的计算问题。图 1 基础结构图如图1所示,使用Parallel Computing Toolbox开发并行应用程序。利用该工具箱,应用程序能够在包含多达八个本地worker(左)的桌面建立原型。并且,通过MDCE(右),可以扩展应用程序,将其应用到一个集群上的多台计算机(可理解为Mathworks的“云”)。3.1 几个重要的概念(1).j
15、ob:是在MATLAB的会话中要执行的大量操作运算。一个job可以分解成不同的部分,称为Task。 Client可以决定如何更好地将job划分为task,各task可以相同也可以不同。(2).client session:制定job和task的MATLAB会话,通常就是你用MATLAB编程的那台计算机。Client运用并行计算工具箱(Parallel Computing Toolbox)来完成job和task的定义,MDCE负责执行job的task,并将结果返回给client。(3).job manager(JM):是MDCE的一个组成部分,用来协调各个job及其task在各个worker上的
16、执行。JM可以运行在网络的任何一台计算机上,它按job被提交的顺序来执行这些job。当然,job队列中每个job的优先级可以提升或降低,job也可以被取消和销毁。(4).worker(集群时也称为lab):是执行task的工作单元,每个worker每次只能执行一个正在运行job的一个task,执行完成后把结果返回给JM。在一个分布计算系统中通常包括多个worker,以便同时执行多个Task,以提高运算速度。对client来说,具体哪一个task由哪一个worker执行是透明的。也就是说,使用者只需关心如何将job提交到JM和从JM取回运算结果,而无需管理具体的任务调度。图2描述了四者之间的关系
17、。图2 Basic Parallel Computing Configuration3.2 MDCE ServiceMATLAB Distributed Computing Engine/Server,简称MDCE,可以使并行计算工具箱应用程序得到扩展,从而可以使用运行在任意数量计算机上任意数量的worker来完成计算任务。MDCE是以服务的形式运行在所有worker node节点上,接受来自调度程序(JM)的job,在节点上建立进程,解释执行MATLAB代码,将结果返回给调度程序。MDCE的安装及相关操作如下:(1).安装MDCE服务。首先,开始-运行-cmd到DOS命令行窗口,假如MATL
18、AB的安装地址为D:MATLABR2010b,进入D:MATLABR2010btoolboxdistcompbin目录。然后,运行如下命令:D:MATLABR2010btoolboxdistcompbinmdce install(2).启动MDCE服务。去控制台-管理工具-服务,查看MATLAB Distributed Computing Server,如果存在说明安装成功了。按启动按钮可启动该服务,也可回到cmd窗口,运行如下命令启动MDCE服务:D:MATLABR2010btoolboxdistcompbinmdce start(3).启动JM(job manager)。在cmd中运行命令
19、startjobmanager name MyJM clean启动名为MyJM的JM,运行startjobmanager help命令可查看该命令的详细使用方法。另外,使用Configurations Manager可配置JM的属性,下面以配置MyJM的属性为例说明如下:在MATLAB的菜单栏上选择Parallel-Manage Configurations.,启动Configurations Manager。设置Scheduler页面的内容:设置Jobs页面的内容:详细设置请参阅MATLAB帮助主题Programming with User Configurations。(4).启动work
20、er。在cmd中运行命令startworker name worker1 jobmanager MyJM jobmanagerhost duanyang clean启动名为worker1的worker,worker1注册到MyJM,而且该JM运行在计算机duanyang上。即MyJM负责给worker1分配task。运行startworker help命令可查看该命令的详细使用方法。(5).查看节点状态。在cmd中运行命令nodestatus命令查看节点的状态。3.3 MATLAB中并行程序开发(一).分布式应用程序的工作流程(1).寻找一个JM(或者作业调度程序(scheduler)网络上可
21、能有一个或多个JM(但是通常只有一个scheduler);用来寻找一个JM或者作业调度程序的函数findResource()在当前MATLAB内核中创建一个对象,用来表示将要运行job的JM或者作业调度程序。(2).创建一个job创建job用以产生一个task集合,job存在于JM中,而一个在本地MATLAB内核中的job对象代表相应的job。(3).创建task创建task添加到job中去,可以用本地MATLAB内核中的task对象表示job中的每一个task。(4).提交job到待执行的job队列当job的每一个task都被定义之后,将它提交到JM或者作业调度程序,它们将task分配到wo
22、rker中执行。当各worker的所有task执行完毕后,job将被标记为完成状态。(5).返还job结果。(6).销毁job当所有job完成,结果收集回来后,需要销毁job以释放内存。(二).应用实例在本例中,我们将运用MDCE和并行计算工具箱,编写分布式应用程序调用牛顿法来求解无约束问题的最优解。本例的目标函数为:是一个二维非线性规划问题,有三个局部极值点。我们拟定义一个job,该job包含三个task,分别从不同的初始点出发,调用多维牛顿法,将三个局部极值点一次性求解出来,从而实现并行计算。 1) 搜索JM,创建对象: findResource()% MyJMcfg 表示在3.2定义的j
23、ob manager:MyJM的配置jm = findResource(scheduler,Configuration,MyJMcfg);使用findResource函数时,省略所有property和value,可搜索所有局域网内可用的JM。all_managers = findResource(scheduler,type,jobmanager);2) 创建Job: createJob()虽然这个函数在client会话中执行,但实际上是在名叫jm的Job Manager上创建了一个名叫job1的Job。job1 = createJob(jm);3) 代码传递:set()将求解需要的代码文件传
24、给执行task的所有worker,该过程对client是透明的。set(job1,FileDependencies,minNT.m,Funval.m);4) 分配Task: createTask()在创建Job之后,使用createTask函数为该Job创建Task。Task定义了Worker所要执行的函数。在本例中,每个Task将会从不同初始点出发,调用牛顿法minNT求一个局部解。createTask(job1, minNT, 2, fx,1 1,x1 x2,0.01,false);createTask(job1, minNT, 2, fx,1 1.8,x1 x2,0.01,false);
25、createTask(job1, minNT, 2, fx,-0.2 0.2,x1 x2,0.01,false);也可用以下方法生成3个Task:createTask(job1, minNT, 2, fx,1 1,x1 x2,0.01,false,fx,1 1.8,x1 x2,0.01,false,fx,-0.2 0.2,x1 x2,0.01,false);4) 提交工作: submit()使用submit函数提交Job到Job Manager,Job Manager将Task分配到已注册的Worker上并开始执行。submit(job1);5) 等待: waitForState()waitF
26、orState(job1, finished);6) 取回计算结果: getAllOutputArguments()计算结果存储在每个任务对象的OutputArguments属性中,使用getAllOutputArguments取回所有的结果,运算结果以cell数组的形式返回。results = getAllOutputArguments(job1);完整示例代码如下:clc;jm = findResource(scheduler, Configuration, MyJMcfg); job1 = createJob(jm);set(job1, FileDependencies, minNT.m
27、,Funval.m);syms x1 x2;fx = x14 - 2*x12*x2 + x12 + 2*x22 - 2*x1*x2 + 4.5*x1 -4*x2 + 4;createTask(job1, minNT, 2, fx,1,1,x1 x2,0.01,false,fx,1,1.8,x1 x2,0.01,false,fx,-0.2,0.2,x1 x2,0.01,false);submit(job1);waitForState(job1, finished);results = getAllOutputArguments(job1);results1:6errmsgs = get(job1
28、.Tasks, ErrorMessage);nonempty = cellfun(isempty, errmsgs);celldisp(errmsgs(nonempty);destroy(job1);二、实验一:MATLAB开发环境和优化工具箱综合实验1.实验目的 上机操作熟悉MATLAB开发环境,运用编程语言和优化工具箱求解机械优化设计实例。2.实验要求(1).实验任务l 熟悉MATLAB的交互式开发平台l 掌握MATLAB编程语言的基础知识l 运用优化工具箱解决实际优化问题(2).实验预习预习本实验指导书,并进一步收集更多的相关资料,深入理解实验的目的与任务,熟悉实验步骤和基本环节。(3)
29、.实验报告编写程序,调用优化工具箱相关函数,求解教材8.3节“二级斜齿轮减速器优化设计”所建立的优化模型。3.实验步骤(1).通用操作界面l Command Window窗口操作Command Window是MATLAB执行交互式操作的主窗口,可以进行指令的执行和函数的调用。例1.求12+2 (7 4) 32的算术运算结果。用键盘在Command Window中输入以下内容 (12+2*(7-4)/32在上述表达式输入完成后,按【Enter】键,该就指令被执行。在指令执行后,Command Window中将显示以下结果。ans = 2例2.简单矩阵的输入步骤。在键盘上输入下列内容A = 1,2
30、,3; 4,5,6; 7,8,9按【Enter】键,指令被执行。在指令执行后,Command Window中将显示以下结果:A = 1 2 3 4 5 6 7 8 9 MATLAB数学计算功能强大,内置提供了丰富的数学运算函数,现将在优化设计算法中要用到的函数列表简介如下,大家可在Command Window中具体测试一下。常用基本数学函数abs(x)纯量的绝对值或向量的长度sqrt(x)开平方Round(x)四舍五入至最近整数fix(x)无论正负,舍去小数至最近整数floor(x)地板函数,即舍去正小数至最近整数ceil(x)天花板函数,即加入正小数至最近整数sign(x)符号函数 (Sig
31、num function)rem(x,y)求x除以y的馀数gcd(x,y)整数x和y的最大公因数lcm(x,y)整数x和y的最小公倍数exp(x)自然指数pow2(x)2的指数log(x)以e为底的对数,即自然对数log2(x)以2为底的对数log10(x)以10为底的对数常用的三角函数asin(x)反正弦函数acos(x)反余弦函数atan(x)反正切函数sin(x)正弦函数cos(x)余弦函数tan(x)正切函数适用于向量的常用函数min(x)向量x的元素的最小值max(x)向量x的元素的最大值mean(x)向量x的元素的平均值median(x)向量x的元素的中位数std(x)向量x的元素
32、的标准差diff(x)向量x的相邻元素的差length(x)向量x的元素个数norm(x)向量x的欧氏(Euclidean)长度sum(x)向量x的元素总和cumsum(x)向量x的累计元素总和cumprod(x)向量x的累计元素总乘积dot(x, y)向量x和y的内积cross(x, y)向量x和y的外积常用矩阵计算函数B=A矩阵转置C=A+B矩阵相加C=A*B矩阵相乘C=Ak矩阵的幂C=A.*B矩阵点乘,即两维数相同的矩阵各对应元素相乘expm(A)指数矩阵,也就是eAinv(A)矩阵的逆矩阵rank(A)计算矩阵的秩eig(A)矩阵的特征值常用到的永久常数Eps系统的浮点(Floatin
33、g-point)精确度Inf无限大nan或NaN非数值(Not a number)Pi圆周率 p(= 3.)Realmax系统所能表示的最大数值Realmin系统所能表示的最小数值Nargin函数的输入参数个数Nargout函数的输出参数个数上面列表仅介绍了这些函数的基本功能,详细用法可参阅MATLAB系统帮助文件。l Command History窗口该窗口保存Command Window中运行命令的历史记录,双击某条记录可再次运行该命令。l Current Folder窗口和路径设置器MATLAB使用Current Folder和路径设置器来管理文件的操作,任何可以在Command Win
34、dow中直接运行或在程序中被调用的文件必须存放在Current Folder或路径设置器所管理的目录内。选择FileSet Path菜单可打开路径设置管理器窗口。l Workspace Browser窗口该窗口显示在MATLAB会话期间产生的保存在内存中的变量,在调用函数、执行M文件时都会向Workspace添加新的变量。执行clear命令清除所有变量以释放内存。(2).在编程环境测试函数的调用和M文件的执行提供若干求解一维、多维、无约束和约束优化问题的算法函数,编制M文件调用这些函数,加深对各种算法的理解。在此基础之上,编程实现一种新的优化算法,如Powell法求解无约束优化问题。(3).优
35、化工具箱调用实验学习本指导书2.1节所列出的优化工具箱所包含的主要函数的使用方法,编程调用相应函数求解教材8.3节“二级斜齿轮减速器优化设计”所建立的优化模型。三、实验二:运用并行计算工具求解机械优化设计实例1.实验目的 通过学习MATLAB并行计算的基本原理,初步掌握MATLAB实现并行计算采用的主要方法,并运用并行计算工具箱求解机械优化设计实例。2.实验要求(1).实验任务l 学习MATLAB并行计算的基本原理,掌握MATLAB实现并行计算采用的主要方法。l 寻找机械优化设计算法中可采用MATLAB并行计算的环节,从而加快算法执行的效率。(2).实验预习预习本实验指导书,并进一步收集更多的
36、相关资料,深入理解实验的目的与任务,熟悉实验步骤和基本环节。(3).实验报告编写程序,利用并行计算工具箱,求解教材8.3节“二级斜齿轮减速器优化设计”所建立的优化模型。3.实验步骤(1).交互式并行计算操作(pmode)pmode允许我们以交互的方式同时在多个lab上运行一个并行任务,我们在Parallel Command Window中输入的命令会同时在所有lab上执行。在Command Window中输入如下命令pmode start local 4按【Enter】键,指令被执行,开启4个本地lab,创建一个并行job运行在这4个lab上,并且打开Parallel Command Wind
37、ow。实验一在Command Window中运行的各种命令,可以同样在该窗口中运行,请注意两者之间的差异。更详细的操作请参考MATLAB帮助主题Parallel Computing ToolboxInteractive Parallel Computation with pmode。注意,local lab的数量不能超过cpu的核数。另外,pmode也可扩展到集群。例如,执行命令pmode start MyJMcfg 4(2).MDCE服务安装按照3.2节的步骤安装MDCE服务,建立计算集群。(3).代码级编程调用并行计算工具箱按照3.3节的流程,综合运用并行计算工具箱和优化工具箱编程求解教材8.3节建立的优化模型。