论文 关键词:非线性规划 最优决策 初值依赖 matlab
  论文摘要:本课题主要研究非线性规划的算法。非线性规划在军事, 经济 ,管理,生产过程自动化,工程设计和产品优化设计等方面都有着重要的应用。但非线性规划的研究目前还不成熟,有许多问题需要进一步完善。非线性规划不像线性规划有统一的算法,对于不同的问题需要用不同的算法处理,现阶段各种算法都有一定的局限性,只有对各种算法加以改正,才能有效地解决人们在日常的生产、生活中遇到的优化问题,做出最优决策。   本文主要是对现有的各种算法加以测试,指出各种算法的优缺点,寻一种不受初值依赖,收敛更快的最优算法。首先介绍了非线性规划研究的背景和国内外研究状况,然后论述了方案的选取过程,重点描实验过程,主要是对各种非线性最优 计算 方法用matlab软件编程,给出一个在工程中具有代表性的最优函数实例,经过大量的测试,并给出了结果分析。最后给出了整个实验的 总结 和由此对未来的展望。
  1 选题背景
  1.1 课题背景
  1.2 课题研究的目的和意义   一般来说,解非线性规划问题要比求解线性规划问题困难得多,而且也不像线性规划那样有统一的数学模型及如单纯形法这一通用解法。非线性规划的各种算法大都有自己特定的适用范围。都有一定的局限性,到目前为止还没有适合于各种非线性规划问题的一般算法。这正是需要人们进一步研究的课题。非线性规划在工程、管理、经济、科研、军事等方面都有广泛的应用,为最优设计提供了有力的工具。例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制系统的某些参数,使系统的工作状态最佳;如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。对于静态的最优化问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。
  随着社会的发展,实际问题越来越复杂,例如全局最优化问题。经典算法一般都用得局部信息,如单个初始点及所在点的导数等,这使得经典算法无法避免局部极小问题。全局最优化是np-hard问题,所以原有的经典算法不再使用,必须对其进行改进,或将其与启发式算法
结合。启发式算法是受大 自然 的启发,人们从大自然的运行 规律 中到了许多解决实际问题的方法。启发式算法的计算量都比较大,所以启发式算法伴随着计算机技术的发展,取得了巨大的成就。
  40年代:由于实际需要,人们已经提出了一些解决实际问题快速有效的启发式算法。
  50年代:启发式算法的研究逐步繁荣起来。随后,人们将启发式算法的思想和人工智能领域中的各种有关问题的求解的收缩方法相结合,提出了许多启发式的搜索算法。其中贪婪算法和局部搜索等到人们的关注。
  60年代: 随着人们对数学模型和优化算法的研究越来越重视,发现以前提出的启发式算法速度很快,但是解得质量不能保证。虽然对优化算法的研究取得了很大的进展,但是较大规模的问题仍然无能为力(计算量还是太大)。
  70年代:计算复杂性理论的提出。np完全理论告诉我们,许多实际问题不可能在合理的时间范围内到全局最优解。发现贪婪算法和局部搜索算法速度快,但解不好的原因主要是他们只是在局部的区域内解,得到的解不能保证全局最优性。由此必须引入新的搜索机制和策略,才能有效地解决这些困难问题。
  优胜劣汰是大自然的普遍规律,它主要通过选择和变异来实现。选择是优化的基本思想,变异(多样化)是随机搜索或非确定搜索的基本思想。“优胜劣汰”是算法搜索的核心,根据“优胜劣汰”策略的不同,可以获得不同的超启发式算法。超启发式算法的主要思想来自于人类经过长期对物理、生物、社会的自然现象仔细的观察和实践,以及对这些自然现象的深刻理解,逐步向大自然学习,模仿其中的自然现象的运行机制而得到的。
  遗传算法:是根据生物演化,模拟演化过程中基因染体的选择、交叉和变异得到的算法。在进化过程中,较好的个体有较大的生存几率。
  模拟退火:是模拟统计物理中固体物质的结晶过程。在退火的过程中,如果搜索到好的解接受;否则,以一定的概率接受不好的解(即实现多样化或变异的思想),达到跳出局部最优解得目的。
  神经网络:模拟大脑神经处理的过程,通过各个神经元的竞争和协作,实现选择和变异的过程。
  禁忌搜索:模拟人的经验,通过禁忌表记忆最近搜索过程中的 历史 信息,禁忌某些解,以避免走回头路,达到跳出局部最优解的目的。
  蚂蚁算法:模拟蚂蚁的行为,拟人拟物,向蚂蚁的协作方式学习。
  虽然人们研究对启发式算法的研究将近50年,但它还有很多不足:
  1)启发式算法目前缺乏统一、完整的理论体系。
  2)由于np理论,各种启发式算法都不可避免的遭遇到局部最优的问题,如何判断已经到的最优值是全局最优值。
  3)各种启发式算法都有各自优点,如何完美结合。
  4)启发式算法中的参数对算法的效果起着至关重要的作用,如何有效设置参数。
  5)启发算法缺乏有效的迭代停止条件。
  6)启发式算法收敛速度的研究等。
  2 方案论证
  2.1 设计原理
  对实际规划问题作定量分析,必须建立数学模型。建立数学模型首先要选定适当的目标变量和决策变量,并建立起目标变量与决策变量之间的函数关系,称之为目标函数。然后将各种限制条件加以抽象,得出决策变量应满足的一些等式或不等式,称之为约束条件。一般非线性规划的数学模型可表示为:
  有约束问题与无约束问题是非线性规划的两大类问题,它们在处理方法上有明显的不同。实际问题中,大多数都是有约束条件的问题。求解带有约束条件的问题比起无约束问题要困难得多,也复杂得多。在每次迭代时,不仅要使目标函数值有所下降,而且要使迭代点都落在可行域内(个别算法除外)。求解带有约束的极值问题常用方法是:将约束问题化为一个或一系列的无约束极值问题;将非线性规划化为近似的线性规划;将复杂问题变为较简单问题等等。
  关于求解非线性规划的迭代法有二分法、简单迭代法、牛顿迭代法与拟牛顿迭代法、同论延拓法、单纯形法等。以上方法都有一定的局限性。目前需寻一种初值不受限制,以较快的是速度收敛到最优解的迭代法。
  2.2方案选择
  求解非线性规划需要编写各种算法程序,可供选择的高级语言有很多种,如fortran和c在内的多种高级语言均可以实现这些非线性最优算法,这里选择用matlab语言实现,为什要选择matlab?在通过一定的比较和分析之后,不难发现,matlab语言应该是一个最佳方案。
  matlab最突出的特点就是简洁。matlab用更直观的,符合人们思维习惯的代码,代替了c和 fortran语言的冗长代码。matlab给用户带来的是最直观,最简洁的程序开发环境。如果用fortran或c语言去为实现平台功能而编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦,如下文中的一个二元函数的三维立体图就是通过matlab的一个简单的命令绘出来的。
  以fortran和c这样的高级语言为例,如果用户想求解一个非线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解非线性方程的算法(例如牛顿法)编写一个程序块来求解方程,最后再输出计算结果。在求解过程中,最麻烦的要算第二部分。解非线性方程的麻烦在于要对矩阵的元素作循环,选择稳定的算法以及代码的调试都不容易。即使有部分源代码,用户也会感到麻烦,且不能保证运算的稳定性。解非线性方程的程序用fortran和c这样的高级语言编写,估计要编写代码上百行,调试这种几百行的计算程序可以说很困难。而matl
ab 语言强大的库函数和优化工具箱使得这些问题迎刃而解,其优越性不言自明。
  以下简单介绍一下matlab相较于其他语言(主要指fortran和c语言)的主要优越性:
  1)语言简洁紧凑,使用方便灵活,库函数极其丰富。matlab程序书写形式自由,利用丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。如果用fortran或c语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦,而matlab的程序是极其简短的。更为难能可贵的是,matlab甚至具有一定的智能水平,比如解方程时,matlab会根据矩阵的特性选择方程的求解方法,所以用户根本不用怀疑matlab的准确性。
  2)运算符丰富。由于matlab是用c语言编写的,matlab提供了和c语言几乎一样多的运算符,灵活使用matlab的运算符将使程序变得极为简短。
  4)程序限制不严格,程序设计自由度大。例如,在matlab里,用户无需对矩阵预定义就可使用。
  5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
  6)matlab的图形功能强大。在fortran和c语言里,绘图都很不容易,但在matlab里,数据的可视化非常简单。matlab还具有较强的编辑图形界面的能力。
  7)功能强大的工具箱是matlab的另一特。matlab包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究。
  8)源程序的开放性。开放性也许是matlab最受人们欢迎的特点。除内部函数以外,所有matlab的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
  综上所述,matlab这些突出的优越性使得其成为目前实现求解非线性规划的不二选择。
  3 过程论述
matlab难还是c语言难
  3.1 关键技术
  整个过程中需要掌握的相关知识有线性规划、非线性规划,最优计算方法、matlab优化工具箱的使用、matlab编程。非线性规划求最优值的算法包括梯度法、牛顿法、拟牛顿法、方向加速法、单纯型法、粒子法…需要对这些算法进行深入的学习与研究。并根据算法步骤编写程序。这里具体要做的工作就是利用matlab的绘图函数绘出实例函数的立体图,利用matlab的优化工具箱求解函数的最优值,利用matlab语言完成非线性最优算法编程,通过实例测试各种算法的优缺点,最终寻一种具有较强的全局搜索能力和较高的收敛精度的计算方法,能够不受初值条件限制,跳出局部最优值,以较快的速度出全局最优解。用于解决非线性规划问题。