当前位置:文档之家› 如何进行程序优化

如何进行程序优化

如何进行程序优化
如何进行程序优化

?2005 Journal of Software 软件学报

如何进行程序优化

葛志春1+

福建省毕业生就业公共网研发服务中心福建省福州市福建人才大厦12F 350001

摘要:

软件的性能问题常常是软件工作者关注的主题,但究竟要如何优化程序使软件系统的性能达到要求却一直以来没有一个系统的解决方案。本文作者从实际经验出发通过如何优化CPU处理时间、RAM、I/O操作、共享软件资源、数据库操作等方面系统的介绍了如何优化运用程序,提升系统运行效率的基本方法。

最后还介绍了提高代码质量的一些方法。

关键词: 性能共享资源数据库

1 引言

运用程序的性能的问题是最让我们的软件工作者头疼的问题,特别是大型网站的性能问题。我们的软件工作者们常常发现新系统上线后巨慢或者频繁崩溃,但却不知道问题出自那里?!新系统无法正常运行的“可能的问题很多”:可能是硬件的配置问题,可能是网络带宽的问题,可能是防火墙配置的问题,可能是操作系统的问题,可能是数据库的配置问题,可能是Web中间件配置的问题,可能是程序代码的问题,可能是。。。。。。有很多的“可能”,但最有“可能”的却都是来自运行程序代码质量的问题。

程序代码的质量的问题是软件系统无法正常运行的主要问题,而代码的“低效性”则是影响系统性能的最核心问题。如何进行程序优化,提高程序代码的质量与运行效率?这个问题是一直困扰我们软件工作者的问题。作者分析大量的软件代码后,认为编写优质高效的运行程序还需要从以下方面下手:

2 处理好共享资源

软件系统在运行时需要占用各种资源,包括硬件资源和软件资源。硬件资源应该主要考虑CPU的处理时间、线程使用、RAM、I/O、网络等资源。软件资源目前主要突出的是:数据库连接、共享对象等资源。

2.1 共享硬件资源

2.1.1 CPU处理时间

CPU处理时间资源是最宝贵的资源,在程序编写时我们要时时注意“节约”这一宝贵资源;尽量让CPU 少做事,或者不做事;让CPU做的每一件事都是“不得不做的事”。请记住“小葛公理之一”:“最快做完事情的方法就是尽量不做事,什么都不做是最快的”。

在分析系统代码时,我发现我们系统慢的一个重要原因是:我们的程序走了很多的“冤枉路”,我们的CPU做了很多“无聊的事情”。这主要体现在以下几个方面:

1、系统中垃圾代码过多,不简洁;导致CPU做了很多无用功;

2、程序算法不合理,比如循环次数过多,随意使用递归等;

作者简介:葛志春(1976,04 -)男系统分析员高级程序员福建省毕业生就业公共网研发服务中心

2

Journal of Software 软件学报 2005,16(6)

3、 可以用一条语句实现的,用了多条语句才达到相同的目的;

4、 不该放在循环体内部的,放在循环体内部做循环;

5、 不该调用递归算法的,调用递归算法;

6、 可以选择执行的代码,却每次都让它执行等。

其实对于以上问题的解决没有什么难度。问题的解决在于能否用心去做每件事,能否认真对待、分析所写的每一行代码。 “小葛公里之二”:“技术含量的高低在于技术人员的细心程度”。

在程序界有一个至理名言:“程序的编写很简单,关键看您会不会拷贝、粘贴”。 我们程序员在编写代码时 “很会”拷贝;但“粘贴”的技术却不行,粘的整个系统的“垃圾代码成灾”,让我们的CPU 做了大量的无用功。因此,大家在编写代码时必须时刻注意:您所编写的或者拷贝的每一行代码确实为业务所需,是完成系统功能所“不得不做”的;如果不是必须严格“斩除”。

算法是否合理、是否高效,对于“软件蓝领”来说可算是高难度的问题;但对于以下几个问题来说就看用心不用心的问题了。只要您细心点,您会发现下面提到的方法其实真的很简单。

1、 将不需要在循环中执行的语句尽量放在循环体之外。

2、 应该发在IF … Else …语句中的语句,必须发在IF …Else..语句中,因为系统有可能执行不到。

3、 程序代码的顺序应该遵循“程序金字塔结构”,如图1。尽量让占用CPU 、RAM 资源较多的方法、

语句后面执行,同样因为系统有可能执行不到,比如将数据库查询、文件读写等方法移到“万不得已”时才执行的位置。在代码编写时将参数检查等轻量级代码放前面,越重量级的代码放在越后面。这样如果执行前面轻量级代码时执行到了return 语句,后面重量级代码就可不执行了。

程序金字塔结构

占用资源由少到多

程序金字塔结构要

图1

4、 能不用循环、递归的尽量不要用循环、递归,即使用了也要想办法减少循环、递归次数。

5、 能将多条语句并成一条,又不影响程序清晰性的合并成一条,比如可以将声明语句和赋值语句合并。

6、 在不影响程序清晰性的情况下,能不声明的变量尽量不要声明,如可采用:

代码段1: {

session.setAttribute ("list", api.findRealDemanList (year, demandStatus)) ;

}

代替 代码段2: {

//多余声明的VOlist.

List VOlist = api.findRealDemanList (year, demandStatus) ;

作者名等:题目 3

session.setAttribute ("list", VOlist) ;

}

7、在声明指针变量时,尽量不赋值。如

代码段3:

{

List Volist = new vector();

VOlist = api.findRealDemanList (year, demandStatus) ;

}

其实第一句中new Vector()对象根本没用,这样不但让费了new Vector()的漫长cpu时间,而且还让费了堆栈空间。

8、尽量避免递归或循环调用SQL语句或者其它较占资源的操作。否则循环次数一多,系统必然崩溃。

9、一个方法尽量只做一件事,将一个方法中做多件事的分成多个方法,这样可以删除很多冗余代码。

比如:一个方法可能用了上10个if… else…语句,这时应该将其分开处理,让每一if…else …中只调用一个方法。

10、能够用JavaScript实现的尽量不要提交到系统后台执行,这样一方面可以降低网络流量,另一方面

可以大大降低服务器端的负荷。

2.1.2 RAM

RAM资源,对于一个软件系统来说与CPU资源同样的珍贵;节约它的方法同样是:尽量的让RAM少存放对象,或者不存放对象,即使“万不得已”存放了也必须尽量缩短对象在RAM的驻留时间。

对于像内存管理这样的理论“好高骛远”的程序员来说没有什么意义;而对于编写高质量的代码来说确必不可少。Java中内存的使用分为堆和堆栈两部分,在堆中存放指针,在堆栈中存放对象。当堆栈中的对象不再被任何指针引用时,垃圾回收器会将其垃圾收集,否则将一直引用。指针的生命周期是方法体中声明的指针方法运行完之后结束;指向对象的指针指向对象死亡之后死亡;Session指针Session结束后死亡。Session 中的指针Remove之后,或者session死亡之后结束。

在内存管理方面,我们系统主要存在以下问题:

1、声明了较多无用的对象,造成大量的对象垃圾;

2、很多对象一直占用内存无法释放,造成内存泄漏;

3、可用轻量级对象实现的却滥用用重量级对象代替;

4、指针生命周期过长,迟迟不释放所暂用的资源。

为了优化系统的内存,尽量让系统少占RAM资源;大家在编码时必须注意以下几点:

1.在声明指针时尽量不要生成无用的对象,如以下语句:

代码段4:

{

CurUserVO cuvo = new CurUserVO();

Cuvo =(CurUserVO) session.getAttribute(“CurUserVO”);

}

其实第一句中new 的对象CurUserVO没有任何意义,唯一的作用是增加系统负担,制造内存垃圾。

其实上面代码段完全可以这样:

代码段5:

{

4 Journal of Software软件学报2005,16(6)

CurUserVO cuvo = (CurUserVO) session. GetAttribute (“CurUserVO”);

}

这样不但不制造内存垃圾,降低了CPU负担;且使代码看起来很简洁。

2.千万不要在循环体里生成无用的对象。参考第一点。

3.如果某个对象还有利用价值请继续利用,不要重新生成新对象;直到对象该没有价值为止,可以用指针指向它。

4.在定义类时尽量让所定义的类为轻量级类;在类中不要随意的增加属性或将局部变量当作属性处理;

只有类的业务属性或者变化会引起整个类变化的变量才能当作属性处理。

5.在声明对象时,在不影响清晰性与使用效果的前提下,尽量使用轻量级对像,尽量不要采用重量级对像。

6.应该缩短对象的生命周期,在不影响清晰性的情况下只有需要用时才声明对象,用完尽快释放。

代码段6:

{

…………

AlreadyJobFindCriteriaVO vo = new AlreadyJobFindCriteriaVO () ;

……….

……….

………

//以上省略代代码都没有调用对象vo

……..

collegeID = ExStr.parseInt (request.getParameter ("collegeID")) ;

vo.setCollegeID (collegeID) ;

……..

}

以上VO对象声明了很长时间,都没用,但在这段时间内却一直占用着内存。其实以上代码这样写会好些:

代码段7:

{

…………

……….

……….

………

//以上省略代代码都没有调用对象vo

……..

collegeID = ExStr.parseInt (request.getParameter ("collegeID")) ;

AlreadyJobFindCriteriaVO vo = new AlreadyJobFindCriteriaVO () ;

vo.setCollegeID (collegeID) ;

……..

}

以上代码大大缩短了VO在内存中的占用时间。

当然对于Java系统来说,目前对象的释放只能靠java自身。但您可以尽快将不再使用的对象使其没有指针指向它。比如将它声明为局部变量或者强制让指向它的指针为null,使得没有任何指针指向它,

作者名等:题目 5

从而使对象更快得到收集,内存得以释放;如:

代码段8:

{

……

List VOlist = api.findGraduateJobInfo1 (memerId) ;

session.setAttribute ("list", VOlist) ;

VOlist = null;

……

}

以上代码,其实到session.setAttribute ("list", VOlist) ;VOList指针在整个代码段中已经没有存在的必要性了。

7.尽量避免使用Session、Application中的指针,对于Session、Application中的指针使用必须统一管理。

对于Session、Application中指针所指向的对象用完应该尽快释放,否则将会长期占据内存造成内存泄漏。如:

代码段9:

{

……

List VOlist = api.findGraduateJobInfo1 (memerId) ;

session.setAttribute ("list", VOlist) ;

VOlist = null;

……

}

代码段10:

{

…….

List ls = session.getAttribute(“list”);

Session.setAttribute(“list”,null);

…….

}

用完Session中的”list”指针后,将其置空,这样可以防止Session中的”list”指针一直指向该对象,造成内存泄漏。

8.使用对象池的确能够带来很好的性能和节省内存,但是它是以牺牲编程难度为代价的,而且用的不好很容易造成当机,只有非常需要使用的时候才考虑。

2.1.3 I/O

节省I/O资源的方法同样应该是尽量不要调用I/O操作,尽量的减少I/O输出,尽量降低网络流量。把不必要输出的信息关掉。在系统提交运行后应该关掉所有的跟踪语句,如System.out.println(“”)等。能够用JavaScript实现的尽量不要提交到系统后台。

2.2 共享软件资源

解决有限资源共享的问题是非常麻烦的问题,如果所有的资源都“取之不揭,用之不尽”,多好。而且共享资源的使用很容易造成死锁,导致整个系统瘫痪。所以解决软件共享资源的最好办法就是:尽量不要使用软件共享资源。只有在共享资源能得够大大改善性能(像数据库链接池),能够带来大大好处的时候才用,

现代优化设计方法的现状和发展趋势

M ac hi neBuil di ng Auto m atio n,D ec2007,36(6):5~6,9 现代优化设计方法的现状和发展趋势 王基维1,熊伟2,李会玲1,汪振华3 (1.宁波职业技术学院,浙江宁波315800;2.湖南生物机电职业技术学院,湖南长沙410126; 3.南京理工大学,江苏南京210094) 摘要:优化设计是近年来发展起来的一门新学科,为机械设计提供了一种重要的科学设计方 法。优化设计在解决复杂设计问题时,能从众多设计方案中寻到尽可能完美或最适宜的设计 方案。对现代优化设计方法进行了概括和总结,展望了现代优化设计的发展方向和发展趋势。 关键词:优化设计;机械设计;发展趋势 中图分类号:T H122文献标识码:B文章编号:167125276(2007)0620005202 Develop ing T rend on M odern O pt im a l Design M ethods WANG J i2wei1,XI ONG W ei2,LI H u i2li ng1,WANG Zhen2hua3 (1.Ni ngbo Voca ti on Te chno l ogy C o ll e ge,N i n gbo315800,C h i na; 2.Huna n B i o l ogy Me c ha ni c a la nd E l e c tri c a lP ro f e ss i ona lTe chno l ogy C o ll ege,C ha ngsha410126,C h i na; 3.Na n ji ng Un i ve rs ity o f S c i e nc e a nd Te chno l o gy,Na n ji ng210094,C h i n a) Abstr ac t:As a new d i s c i p l i ne,o p tm i a l de s i gn p rov i de s an m i p o rtan t sc i en tifi c de s i gn m e t h od f o r e ng i nee https://www.doczj.com/doc/7a1151824.html, i ng op tm i a ld es i gn, t he y can fi nd o ut a nea rl y pe rf e ct o r op tm i um des i gn s ch em e fr om l o ts o f feas i b l e ap p r o ache s.T he p ape r s um m a ri ze s t he de ve l o p i ng trend a nd d ir e cti o n o f t he m ode rn op tm i a l des i gn m e t hod s. K ey word s:op tm i a ld es i g n;m a ch i n e des i gn;de ve l o p t re nd 0引言 机械设计与制造是机械工程领域中最重要的内容,而机械设计又是机械制造的前提。优化设计(opti m a l de2 si gn)是近年来发展起来的一门新的学科,优化设计为机械设计提供了一种重要的科学设计方法,在机械设计上起着重要的作用,使得在解决复杂设计问题时,能从众多的设计方案中寻到尽可能完美的或最适宜的设计方案[1]。实践证明,在机械设计中采用优化设计方法,不仅可以减轻机械设备质量,降低材料消耗与制造成本,而且可以提高产品的品质和工作性能[2]。文中初步论述了机械优化设计方法的发展现状和趋势。 优化设计方法[3]是数学规划和计算机技术相结合的产物,它是一种将设计变量表示为产品性能指标、结构指标或运动参数指标的函数(称为目标函数),然后在产品规定的性态、几何和运动等其它条件的限制(称为约束条件)的范围内,寻找满足一个目标函数或多个目标函数最大或最小的设计变量组合的数学方法。优化设计方法已成为解决复杂设计问题的一种有效工具。 1优化设计方法及应用现状 优化设计的基础和核心是优化理论和算法。迄今为止,己有上百种优化方法提出,这里重点介绍以下几种优化方法[4,5]。 a)线性逼近法:线性逼近法SLP是将原非线性问题转化为一系列线性优化问题,通过求解线性优化问题得到原问题的近似解。根据形成线性优化的方法不同,可以得到不同的线性逼近法。常用的线性逼近法有近似规划法和割平面法; b)遗传算法[2,6,14]:遗传算法GA(genetic a l gorith m s)是一种基于生物自然选择与遗传机理的随机搜索算法。它是1962年首先由美国密执安大学的J.H.H olland教授提出、随后主要由他和他的一批学生发展起来的[7],并在1975年的专著中作了介绍,首先提出了以二进制串为基础的基因模式理论,用二进制位串来模拟生物群体的进化过程。进化结束时的二进制所对应的设计变量的值即为优化问题的解。GA方法的主要优点是具有很强的通用优化能力,它不需要导数信息,也不需要设计空间或函数的连续性条件,其优化搜索具有隐性并行性,可以多点同时在大空间中作快速搜索,因此有可能获得全局最优解。由于G A有着其他优化算法不可比拟的优点,因此,GA的应用非常广泛,取得大量研究应用成果。在结构优化设计方面的如离散结构的遗传形状优化设计[8]、悬臂扭转结构和梁结构的优化设计[9]、桁架和薄壁的结构优化问题[10]等。在文献[11]中对平面四杆机构的遗传优化设计进行了研究。文献[12]介绍了一个用于ZL40装载机的直齿圆锥齿轮差速器的优化设计问题,用GA中的实数编码进行优化求解,取群体大小为50,交叉率为0.2,变异率为0.5,经过120代的进化并经圆整后得到最优解。文献[15]中通过把机械方案设计过程看作是一个状态空间的求解问题,用遗传算法控制其搜索过程,完善了新的遗传编码体系,为了适应新的编码体系重新构建了交叉和变异等遗传操作,并利用复制、交换和变异等操作进行一次次迭代,最终自动生成一组最优的设计方案。 此外,G A还应用在函数优化、机械工程、结构优化、电工、神经网络、机器学习、自适应控制、故障诊断、系统工程调度和运输问题等诸多领域中[13]; #5 #

机械优化设计方法概述

机械优化设计方法概述 摘要 机械优化设计是最优化技术在机械设计领域的移植和应用,其基本思想是根据机械设计的理论,方法和标准规范等建立一反映工程设计问题和符合数学规划要求的数学模型,然后采用数学规划方法和计算机计算技术自动找出设计问题的最优方案。作为一门新兴学科,它建立在数学规划理论和计算机程序设计基础上,通过计算机的数值计算,能从众多的设计方案中寻到尽可能完善的或最适宜的设计方案,使期望的经济指标达到最优,它可以成功地解决解析等其它方法难以解决的复杂问题。优化设计为工程设计提供了一种重要的科学设计方法。因而采用这种设计方法能大大提高设计效率和设计质量。本文论述了优化设计方法的发展背景、流程,并对无约束优化及约束优化不同优化设计方法的发展情况、原理、具体方法、特点及应用范围进行了叙述。 关键词:机械优化设计;约束;特点;选取原则 Mechanical optimization design is optimized technology in the field of mechanical design and application of transplantation, its basic idea is based on mechanical design theory, methods and standards to establish a reflect problems in engineering design and meet the requirements of the mathematical programming model, and then applying the mathematical programming method and computer technology to find out the design problem of the optimal scheme of automatic. As a new subject, which is based on the theory of mathematical programming and computer program design basis, by numerical calculation, from the large number of design so as to improve or the most suitable design, so that the desired economic index optimal, it can successfully solve the analysis and other methods are difficult to deal with complex problem. Optimization design and provides an important scientific design method. So using this design method can greatly improve the design efficiency and design quality. This paper discusses the optimized design method of the background, development process, and to the unconstrained and constrained optimization of different optimal design method for the development, principle, methods, characteristics and scope of application are described. Key words: mechanical design optimization; constraint; characteristics; selection principle.

现代设计论文-优化设计

现代设计方法论文课题名称:现代设计—优化设计 班别:卓越交Y131 姓名:刘xx 学号; 2013002070xx 2015年7月

摘要:优化设计是在计算机广泛应用的基础上发展起来的一项新技术,是根据最优化原理和方法综合各方面因素,以人机配合方式或“自动探索”方式,在计算机上进行的半自动或自 动设计,以选出在现有工程条件下的最佳设计方案的一种现代设计方法。其设计原则是最优设 计:设计手段是电子计算机及计算程序;设计方法是采用最优化。 关键词:优化方法;数学模型;优化应用;MATLAB 一·现代设计——优化设计 优化设计主要包括两部分内容,一是优化设计的建模技术;另一是优化设计问题的求解 技术。如何将一个实际的设计问题抽象成一个优化设计问题,并建立起符合实际要求的优化 设计数学模型,这是优化技术的关键。建立实际问题的优化数学模型,不仅需要掌握优化设 计方法的基本理论,更重要的是要具有该设计领域的设计经验。 目前,它的内容主要包括优化设计、可靠性设计、设计方法学、计算机辅助设计、动态 设计、有限元法、工业艺术造型设计、人机工程、并行工程、价值工程、反求工程设计、模 块化设计、相似性设计、虚拟设计、疲劳设计、三次设计等。在运用它们进行工程设计时, 一般都以计算机作为分析、计算、综合、决策的工具。这些学科汇集成了一个设计学的新体 系,即现代设计方法。 设计的思想和方法一方面不断地影响着人类的生活与生产,推动社会的进步;另一方面又 受到社会发展的反作用,不断变化和更新。实际上所谓的“传统设计”和“现代设计”都只 是相对的概念。人们把当前认为先进的那部分系统称为现代的,而其余的自然成为传统的, 若干年后,目前先进的被新发展的东西所取代,而成为传统。从人类生产的进步来看,整个 设计进程大致经历了四个阶段。 1直觉设计阶段。既从自然现象中直接获得启示,或是全凭人的直观感受来设计,制作。2经 验设计阶段。3半理论半经验设计阶段。4现代设计阶段。电子计算机技术的发展和应用,使 设计工作产生了革命性的突变。 现代设计是面向市场面向用户的设计。首先,好的产品始于先进的设计理念和对市场需求 的深刻了解以及贯穿整个设计过程中的以人为本的信念。其次,设计要求对产品进行全寿命 周期设计。即在设计过程中要考虑设计,制造,安装,运行,维修和报废等每一个阶段中用 户的需求。也就是,设计不仅要实现产品的基本功能要求,还应该体现人性化和环境友好的 先进设计思想。此外,设计对象从最初的单一功能产品变为越来越复杂的系统。功能更加先 进和全面,因此需要在设计时运用集成,综合,系统的方法与技术来解决设计问题。 与传统设计相比,有如下一些特点。 1传统设计中灵感和经验的成分占有很大的比例。思维带有很大的被动性。但是,今天技

现代设计方法(第二章 优化设计)

1.直接搜索法。它只利用目标函数值构成的搜索方法,如POWELL,单纯形法; 2.梯度法。它需要有目标函数及其导数的解析式。 对于非线性的显函数,且变量数较少或中等的问题,用复合形法或罚函数法(其中尤其是内点罚函数法)的求解效果一般都比较理想,前者求得全域最优解的可能性较大。建议当找不到一个可行的初始点时,才用外点罚函数法。在用罚函数法解优化问题时,必须选用一个合适的无约束优化方法。如果目标函数的一阶和二阶偏导数易于计算(用解析法),且设计变量不是很多(如n ≤20)时,建议用拟牛顿法;若n>20,且每一步的Hessian 矩阵求解变得很费时时,则选用变尺度法较好。若目标函数的导数计算困难(用解析法)或者不存在连续的一阶偏导数,则用Powell共轭方向法效果是最好的。对于一般工程设计问题,由于维数都不很高(n<50),且函数的求导计算都存在不同程度的困难,因此用内点罚函数法调用Powell无约束优化方法求序列极小化。 优化设计:它是以数学规划理论为基础,以电子计算机为辅助工具的一种设计方法。它首先将设计问题按规定的格式建立数学模型,并选择合适的优化方法,选择或编制计算机程序,然后通过电子计算机自动获得最优设计方案。 两类优化方法: 1.直接法:直接计算目标函数值,比较目标函数值,并以之作为迭代、收敛根据的方法。 2.求导法:以多变量函数极值理论为基础,利用目标函数的性态,并以之作为寻优、迭代、收敛根据的方法。 综合设计法: 以程序设计、优化技术、仿真技术及自动绘图技术的综合为基础,以计算机工作站为工具,将工业设计方法提高到更新的阶段,使产品设计,换代、创新更趋于自动化,并展示了有可能向智能化发展的前景。 优化问题的分类: 按照目标函数的性质和约束条件可分为无约束问题和有约束问题。 无约束问题按照目标函数包含的单变量或多变量来分类。(直接搜索法:它只利用目标函数值构成的搜索方法,如POWELL法,单纯形法等。梯度法:它需要有目标函数及其导数的解析式。) 有约束问题有三类: 1.线性目标函数和线性约束(线性规划,整数规划) 2.非线性的目标函数和线性约束(二次规划,凸规划,线性分式规划) 3.非线性目标函数和非线性约束条件(变换法,线性逼近法,直接搜索法) 建立数学模型有哪三个基本步骤? 1)识别要确定的未知变量,并用代数符号表示它们。2)识别目标或判别标准,并将其表示为要最大化或最小化的函数。 3)识别问题的约束条件或限制,并将它们表示成未知变量的线性或非线性的等式或不等式组。 。优化设计的数学模型一般由设计变量、目标函数和约束条件三个基本要素组成。其含义为在一定的约束条件下,追求目标函数的极小值(或极大值),而求得一组设计变量值。 。设计变量与设计空间:设计变量的个数决定了设计空间的维数,设计空间的维数又表征设计的自由度,设计变量越多,则设计的自由度越大,可供选择的方案越多,设计越灵活,但难度亦越大,求解越复杂。通常在保证必要的设计精度的前提下,设计变量应尽可能取少些。 。约束条件可分为边界约束和性能约束。在二维设计空间中,不等式约束条件的可行域,是各约束线所围的平面,比较直观。三维和三维以上的设计问题,约束条件是曲面或超曲面,约束曲面围成的可行域,是多曲面或超越曲面围成的空间。 。等值线有哪些特点:不同值的等值线不相交;除极 值点外,等值线在设计空间内不会中断;等值线反映 了目标函数的变化规律,愈内层的等值线,其函数值 愈小,其中心点为极值点;等值线间隔越密,表示该 处函数变化率越大;极值点附近的等值线近似椭圆 族,极值点为中心点。 。线性规划与非线性规划有何区别? 当目标函数F(x)和约束条件都是设计变量的线性函 数时,列出这种数学模型并求解的过程,称为线性规 划,只有一个公用算法,称为“单纯形法”。在所有 的优化模型中,线性规划应用的最广。如果目标函数 F(x)和约束条件中有一个或多个是设计变量的非线 性函数时,列出这种数学表达式并求解的过程,称为 非线性规划。解非线性规划问题有许多算法。 。什么是约束条件?约束条件和可行域有何关系?等 式约束和不等式约束有何区别与联系? 设计变量的取值范围有限制或必须满足一定的条件, 这种对设计变量取值的限制称为约束条件。 不等式约束条件将设计空间划分为可行域和非可行 域,设计方案只能在可行域内选取。 等式约束条件只允许设计方案在可行域的等式约束 线(或面)上选取。 不等式约束将设计变量限制在一个区间或区域,约束 不严格;而等式约束设计变量限制在一个点、线或面 上,约束严格。 等式约束起到降低自由度的作用,有一个等式约束可 以降低一个设计自由度,一个等式约束可以用两个不 等式约束表示。 。约束极值点存在的条件:库恩-塔克条件:一个约 束极值点存在的必要条件为目标函数的梯度可表示 成诸约束面梯度纯属组合的负值。其几何意义为:起 作用约束的梯度矢量,在设计空间构成一个锥体,目 标函数的负梯度应包含在此锥体内。这个条件是约束 优化问题极值的必要条件,而不是充分条件。只有当 目标函数为凸函数,约束函数也是凸函数时,即凸规 划问题时,其局部最优点就是全局最优点,刚库恩- 塔克条件是该极值的必要充分条件。 。数值方法:根据目标函数值的变化规律,以适当的 步长沿着能使目标函数值下降的方向,逐步向目标函 数值的最优点进行探索,逐步逼近目标函数的最优 点,直至达到最优点。 。常用迭代终止准则有哪三种? 1)点距准则:当设计变量在相邻两点之间的移动距 离以充分小时,可以相邻两点的矢量差的摸作为终止 迭代的判据。 2) 值差准则:当相邻两点目标函数之差已达到充分 小时,可用两次迭代的目标函数之差作为终止判据 3)梯度准则:当迭代点逼近极值点时,目标函数在 该点的梯度已达到充分小时,可用梯度的模作为终止 判据。 0.618法的基本思想:0.618法又称黄金分割法,要 求定义区间[a,b]上的函数为单峰值函数通过不断割 舍左端或右端的一部分,逐步把区间缩小之至极小点 所在区间到给定误差范围内,从而得到近似的最优 解,并且每次缩短的新区建长度与元区间长度的比值 始终是一个常数。 。二次插值法的基本思想是:在选定的单峰区间内选 一点,连同两端点,利用这三点的函数值构成一个二 次多项式,作为原函数的近似,求近似二次多项式的 极小点作为原函数的近似最优点。 。Powell法在每一轮形成新的搜索方向时会存在何 种问题导致不收敛?如何修正? Powell法在每一轮形成新的搜索方向替换原来矢量 组中的第一个方向形成新的搜索方向组,可能存在新的方向 组线性相关的情况,从而导致算法不收敛的问题。修正 方法:选代过程中,形成一个新的方向后,先判别一下新方 向是否有效,如果有效则替换原来的搜索方向组中的第一个 搜索方向,否则,不替换,仍然按原来的方向组搜索。 。梯度法的基本原理和特点是什么 1)梯度法的基本原理:梯度法又称最速下降法,基本原理是 在迭代点附近采用使目标函数值下降最快的负梯度方向作为 搜索方向,求目标函数的极小值。 2)梯度法的特点:迭代计算简单,只需求一阶偏导数,所占 用存储单元少,对初始点要求不高,在接近极小点位置时收 敛速度很慢。 1.共轭梯度法的特点是什么? 在梯度法靠近极值点收敛速度减慢的情况下,共轭梯度法可 以通过构造共轭方向,使其收敛速度加快,具有一次收敛速 度,使得计算过程简便,效果又好:在每一步迭代过程中都 要构造共轭方向,比较繁琐。 2.为什么选项用共轭方向作为搜索方向可以取得良好的 效果? 选用共轭方向作为搜索方向可以取得良好的效果,主要是由 共轭方向的性质所决定。 共轭方向的性质为: 对于n维正定二次型函数,从任意初始 点出发,依次沿着与矩阵A为共轭的n个线性无关的方向进 行一维搜索,则能在第n或第n步以前达到极小点。 3.变尺度法:为了得到既快速收敛的性质,又能避免计 算二阶导数矩阵及其逆矩阵,减少计算工作量。 变尺度矩阵必须是对称正定矩阵,才能保证变尺度算法的搜 索方向是函数值下降的方向,而且从一次迭代到另一次迭代 是变化的,故称变尺度矩阵。 4.有约束优化方法根据对约束条件的处理方法不同,可 分为直接法和间接法两大类。 直接法的基本思想是设法使每一次的迭代点都能在可行域 内,并逐步降低目标函数值,直至最后得到一个在可靠域内 的约束最优解。即在迭代过程中,搜索方向和迭代步长都要 经过可靠性和适用性条件的检查。属于直接法的有:复合形 法、简约梯度法等。间接法的基本思想是把有约束问题通过 一定形式的变换,转化成无约束优化问题,然后用无约束方 法求解,属于此类常见的有罚函数法等。 5.简述复合形法的优化过程的基本原理。 复合形法的优化过程为:在可行域内选择是个设计点,作为 初始复合形的顶点,构造一个多面体;然后对多面体各顶点 的函数值逐个进行比较,目标函数最大的为坏点,按照一定 规则去掉坏点而代以新点,构成一个新的多面体;依次步骤 进行多次,使复合形的位置逐步调向邻近最优点,最后以顶 点中目标函数值最小的点,作为近似最优点而得到解。 特点:由于在迭代计算中不必计算目标函数的导数,也不用 一维搜索,所以程序结构比较简单,适用性较广。对设计变 量增加,维数高或约束条件多的优化问题,为了得到较好的 新顶点,往往要向中心点多次收缩,因而计算效率显著降低。 6.简约梯度法:解决线性约束非线性规划问题。 7.简述罚函数法的基本原理,罚函数法分为哪几种? 基本思想是把一个有约束的问题转化为一系列无约束问 题求解,逐渐逼近于目标函数的最优值。 在原目标函数中添加一些与约束函数有关的项,形成一个 新的目标函数以取代原目标函数,然后用无约束融洽优化 方法求新目标函数的最优解。 有内点法、外点法、混合法。 内点罚函数法、外点罚函数法及混合罚函数法的基本思想: 内点罚函数法:是把新目标函数定义于可行域内,因此其初 始点和后面产生的迭代点序列也必然在可行域内,这种方法 是求解不等式约束最优化问题的一种十分有效的方法,但不 能处理等式约束。 缺陷:一是不能处理等式约束问题,因为在边界上新目标函 数的函数值无穷大,迭代点无法达到;二是初始点必须在可

优化设计方法

优化设计方法 第1章 优化设计概述 1.1 优化设计概述 现代化的设计工作已不再是过去那种凭借经验或直观判断来确定结构方案,也不是像过去“安全寿命可行设计”方法那样:在满足所提出的要求的前提下,先确定结构方案,再根据安全寿命等准则,对该方案进行强度、刚度等的分析、校核,然后进行修改,以确定结构尺寸。现代化的设计是借助电子计算机,应用一些精确度较高的力学的数值分析方法(如有限元法等)进行分析计算,并从大量的可行设计方案中寻找出一种最优的设计方案,从而实现用理论设计代替经验设计,用精确计算代替近似计算,用优化设计代替一般的安全寿命的可行性设计。 优化方法不仅用于产品结构的设计、工艺方案的选择,也用于运输路线的确定、商品流通量的调配、产品配方的配比等等。 机械优化设计包括建立优化设计问题的数学模型和选择恰当的优化方法与程序两方面的内容。由于机械优化设计是应用数学方法寻求机械设计的最优方案,所以首先要根据实际的机械设计问题建立相应的数学模型,即用数学形式来描述实际设计问题。在建立数学模型时需要应用专业知识确定设计的限制条件和所追求的目标,确立设计变量之间的相互关系等。机械优化设计问题的数学模型可以是解析式、试验数据或经验公式。虽然它们给出的形式不同,但都是反映设计变量之间数量关系的。 数学模型一旦建立,机械优化设计问题就变成一个数学求解问题。应用数学规划方法的理论,根据数学模型的特点,可以选择适当的优化方法,进而可以选取或自行编制计算机程序,以计算机作为工具求得最佳设计参数。 优化设计方法的应用极为广泛。下面用几个简单的例子来说明优化设计的基本概念。 在优化设计中,通常是根据分析对象的设计要求,应用有关专业的基础理论和具体技术知识进行推导来建立相应的方程或方程组。对机械类的分析对象来说,主要是根据力学、机械设计基础知识和各专业机械设备的具体知识来推导方程或方程组,这些方程反映结构诸参数之间的内在联系,通过它可以研究各参数对设计对象工作性能的影响。 下面通过几个具体的例子,说明机械化设计中建立方程组的方法和步骤。 例1 平面四连杆机构的优化设计。 平面四连杆机构的设计主要是根据运动学的要求,确定其几何尺寸,以实现给定的运动规律。 图1-1所示是一个曲柄摇杆机构。图中1234,,,x x x x 分别是曲柄AB 、连杆BC 、摇杆CD 和机架AD 的长度。?是曲柄输入角,0ψ是摇杆输出的起始位置角。这里,

现代设计方法(第二章 优化设计).

1.直接搜索法。它只利用目标函数值构成的搜索方法,如POWELL,单纯形法; 2.梯度法。它需要有目标函数及其导数的解析式。 对于非线性的显函数,且变量数较少或中等的问题,用复合形法或罚函数法(其中尤其是内点罚函数法的求解效果一般都比较理想,前者求得全域最优解的可能性较大。建议当找不到一个可行的初始点时,才用外点罚函数法。在用罚函数法解优化问题时,必须选用一个合适的无约束优化方法。如果目标函数的一阶和二阶偏导数易于计算(用解析法,且设计变量不是很多(如n ≤20时,建议用拟牛顿法;若n>20,且每一步的Hessian 矩阵求解变得很费时时,则选用变尺度法较好。若目标函数的导数计算困难(用解析法或者不存在连续的一阶偏导数,则用Powell共轭方向法效果是最好的。对于一般工程设计问题,由于维数都不很高(n<50,且函数的求导计算都存在不同程度的困难,因此用内点罚函数法调用Powell无约束优化方法求序列极小化。 优化设计:它是以数学规划理论为基础,以电子计算机为辅助工具的一种设计方法。它首先将设计问题按规定的格式建立数学模型,并选择合适的优化方法,选择或编制计算机程序,然后通过电子计算机自动获得最优设计方案。 两类优化方法: 1.直接法:直接计算目标函数值,比较目标函数值,并以之作为迭代、收敛根据的方法。 2.求导法:以多变量函数极值理论为基础,利用目标函数的性态,并以之作为寻优、迭代、收敛根据的方法。 综合设计法: 以程序设计、优化技术、仿真技术及自动绘图技术的综合为基础,以计算机工作站为工具,将工业设计方法提高到更新的阶段,使产品设计,换代、创新更趋于自动化,并展示了有可能向智能化发展的前景。 优化问题的分类:

机械最优化设计及其应用实例

机械最优化设计及其应用 徐华伟 (三峡大学机械与材料学院2009106130) 摘要:机械优化设计是将数学规划理论、计算机技术、最优化原理与方法和机械设计相结合的一项新的科学技术。它是一门综合性的学科,具有丰厚的理论和应用价值,是解决复杂设计问题的一种有效工具。它是以最优化理论和方法为基础,以计算机为运算工具从众多的设计方案中寻找出最优的机械设计参数的一种现代设计方法。因此,优化设计可以形象的表示为:专业理论+数学规划+计算机技术。优化设计其内容包括:最优化问题基础知识、一维探索、无约束最优化问题的求解方法、约束最优化问题的求解方法、多目标函数的优化设计方法、遗传算法简介、最优化方法在压力加工、机构设计、拟合公式中的应用等。其在工程设计中的应用如:具有独立悬挂汽车的双桥转向机构的最优化设计、内燃机连杆结构的最优化设计、凸轮机构的最优化设计、汽车变速器的最优化设计、弹簧的最优化设计、制动器的最优化设计、离合器盖结构形状的最优化设计等等。 关键词:设计机械最优化目标函数变量约束 常规的设计方法进行工程设计,特别是当影响设计的因素很多时,只能得到有限候选方案中的最好方案,而不可能得到众多可能方案中的“最优设计方案”。优秀的工程设计人员总是准备好几种候选设计方案,再从中择其“最优”,如此这样才会让所设计的项目达到更精。然而,由于设计时间和经费的制约,所设计的候选方案的数目会受到很大限制。“最优化设计”是在现代计算机广泛应用的基础上发展起来的一项新技术。是根据最优化原理和方法综合各方面的因素,以人机配合方式或“自动探索”方式在计算机上进行的半自动或自动设计以选出在现有工程条件下的最佳设计方案的一种现代设计方法。其设计原则是最优设计,设计手段是电子计算机及计算程序,设计方法是采用最优化数学方法。实践证明,最优化设计是保证产品具有优良的性能,减轻自重或体积,降低工程造价的一种有效设计方法。同时也可使设计者从大量繁琐和重复的计算工作中解脱出来使之有更多的精力从事创造性的设计并大大提高设计效率。在数学规划方法的基础上发展起来的最优化设计是60年代初电子计算机引入结构设计领域后逐步形成的一种有效的设计方法。利用这种方法,不仅使设计周期大大缩短,计算精度显著提高,而且可以解决传统设计方法所不能解决的比较复杂的最优化设计问题。 现代设计都是面向市场,实现功能及产品优势的设计、创新设计、绿色设计、优化设计、可靠性设计等现代设计方法备受国内外机械设计领域的关注,而机械的优化设计与机构设计、机械传动设计和机械强度设计共同组成了机械设计的内涵。机械优化设计是建立在近代应用数学、物理学、应用化学、应用力学和材料学和计算机程序设计之上的,是解决复杂设计问题的一种有效工具,机械优化设计是把机械设计与优化理论及方法密切结合起来去处理机械设计问题,工程实用价值大,

相关主题
文本预览
相关文档 最新文档