优化问题的计算机求解
最优化问题的建模与解法

最优化问题的建模与解法最优化问题(optimization problem)是指在一组可能的解中寻找最优解的问题。
最优化问题在实际生活中有广泛的应用,例如在工程、经济学、物流等领域中,我们经常需要通过数学模型来描述问题,并利用优化算法来求解最优解。
本文将介绍最优化问题的建模和解法,并通过几个实例来说明具体的应用。
一、最优化问题的数学建模最优化问题的数学建模包括目标函数的定义、约束条件的确定以及变量范围的设定。
1. 目标函数的定义目标函数是一个表达式,用来衡量问题的解的优劣。
例如,对于一个最大化问题,我们可以定义目标函数为:max f(x)其中,f(x)是一个关于变量x的函数,表示问题的解与x的关系。
类似地,对于最小化问题,我们可以定义目标函数为:min f(x)2. 约束条件的确定约束条件是对变量x的一组限制条件,用来定义问题的可行解集合。
约束条件可以是等式或不等式,通常表示为:g(x) ≤ 0h(x) = 0其中,g(x)和h(x)分别表示不等式约束和等式约束。
最优化问题的解必须满足所有的约束条件,即:g(x) ≤ 0, h(x) = 03. 变量范围的设定对于某些变量,可能需要限定其取值的范围。
例如,对于一个实数变量x,可能需要设定其上下界限。
变量范围的设定可以通过添加额外的不等式约束来实现。
二、最优化问题的解法最优化问题的解法包括数学方法和计算方法两种,常见的数学方法有最优性条件、拉格朗日乘子法等,而计算方法主要是通过计算机来求解。
1. 数学方法数学方法是通过数学分析来求解最优化问题。
其中,常见的数学方法包括:(1)最优性条件:例如,对于一些特殊的最优化问题,可以通过最优性条件来判断最优解的存在性和性质。
最优性条件包括可导条件、凸性条件等。
(2)拉格朗日乘子法:对于带有约束条件的最优化问题,可以通过拉格朗日乘子法将原问题转化为无约束最优化问题,从而求解最优解。
2. 计算方法计算方法是通过计算机来求解最优化问题。
管理科学中的优化理论方法

管理科学中的优化理论方法管理科学是综合应用数学、统计学、计算机科学等理论和方法研究企业内部生产、经营与管理的学科。
其中优化是管理科学中最重要的一个理论方法,它可以帮助企业在规定的约束条件下,寻找到最优的决策方案,提高了企业的效益和竞争力。
本文将从优化理论的基本概念、优化方法的分类、最优解的求解以及优化理论的应用等方面,对管理科学中的优化理论方法进行探讨。
一、优化理论的基本概念在管理科学中,优化是指在某种目标或约束条件的前提下,确定最适合要求的解决方案。
这种最适合要求的解决方案被称为最优解,而寻找最优解的方法被称为优化方法。
一般来说,优化问题可以归为线性规划、非线性规划、整数规划、多目标规划、动态规划等多种类型,其中线性规划是最常见的一类优化问题。
二、优化方法的分类优化方法主要分为两类:经典优化方法和现代优化方法。
经典优化方法包括梯度下降法、牛顿法、拟牛顿法等;现代优化方法包括遗传算法、模拟退火、粒子群算法等。
梯度下降法是一种通过不断迭代寻找最优解的方法,它的基本思想是沿着函数曲面的下降方向寻找极小值点。
牛顿法也是一种求极值的迭代方法,它的基本思想是通过一阶导数和二阶导数来确定步长和迭代方向。
拟牛顿法则是利用一阶导数的信息,基于Broyden-Fletcher-Goldfarb-Shanno(BFGS)公式不断逼近函数的梯度。
遗传算法是一种模拟自然遗传的算法,它利用随机抽样的方法进行迭代搜索,可以寻找到全局最优解。
模拟退火则是从物理学中借鉴而来的一种搜索算法,通过随机跳出局部最优解,来达到寻找全局最优解的目的。
粒子群算法则是模拟鸟群飞行、群体协作等现象的一种进化算法,它可以通过模拟粒子在搜索空间中的运动来寻找最优解。
三、最优解的求解找到一个优化问题的最优解是管理科学中优化理论的核心。
一般来说,最优解的求解可以采用数学求解和计算机求解两种方法。
数学求解是指通过公式计算出问题的最优解。
例如,在解决线性规划问题时,可以通过单纯性算法来求解最优解。
c语言最优化问题的编程

C语言最优化问题的编程1. 简介在计算机科学中,最优化问题是指在给定约束条件下,寻找使得目标函数达到最大或最小值的变量取值。
C语言是一种高效、强大的编程语言,可以用于解决各种最优化问题。
本文将介绍C语言中最优化问题的编程方法和常用算法。
2. 最优化问题的定义最优化问题可以形式化地定义为:minimize f(x)subject to g(x) <= 0h(x) = 0其中,f(x)是目标函数,g(x)是不等式约束条件,h(x)是等式约束条件。
我们的目标是找到使得目标函数f(x)取得最小值的变量取值x。
3. 求解最优化问题的算法3.1. 穷举法穷举法是一种简单但效率较低的求解最优化问题的方法。
它通过遍历所有可能的解空间来寻找最优解。
在C语言中,可以使用嵌套循环和条件判断来实现穷举法。
double exhaustive_search(double lower_bound, double upper_bound, double step_s ize) {double min_value = INFINITY;double min_x;for (double x = lower_bound; x <= upper_bound; x += step_size) {double value = f(x);if (value < min_value) {min_value = value;min_x = x;}}return min_x;}上述代码中,lower_bound和upper_bound分别是变量x的取值范围的下界和上界,step_size是每次迭代的步长。
函数f(x)计算目标函数的值。
通过遍历x的所有可能取值,并比较目标函数的值,最终找到使得目标函数最小化的x。
3.2. 梯度下降法梯度下降法是一种常用且高效的求解最优化问题的方法。
它利用目标函数在当前点处的梯度信息来指导搜索方向,并通过迭代逐步接近最优解。
学习算法中的路径搜索和优化问题

学习算法中的路径搜索和优化问题在计算机科学领域中,路径搜索和优化问题是一类非常重要的算法问题。
这些问题涉及到在给定的图或网络中寻找最短路径、最优路径或最优解的方法。
路径搜索和优化问题在实际生活中有很多应用,比如导航系统中的路线规划、物流中的货物配送以及人工智能领域的决策问题等。
一、路径搜索问题路径搜索问题是指在一个给定的图或网络中寻找从一个起点到达目标点的最短路径或最优路径。
常见的路径搜索算法有深度优先搜索(DFS)、广度优先搜索(BFS)、Dijkstra算法和A*算法等。
深度优先搜索是一种递归的搜索方法,它从起点开始,沿着一条路径一直向前搜索,直到找到目标点或者无法继续搜索为止。
广度优先搜索则是一种迭代的搜索方法,它从起点开始,逐层扩展搜索,直到找到目标点或者搜索完整个图。
Dijkstra算法是一种用于求解单源最短路径的算法,它通过不断更新起点到其他点的最短距离来寻找最短路径。
A*算法则是一种启发式搜索算法,它在Dijkstra算法的基础上引入了启发函数,通过估计从当前点到目标点的最短距离来进行搜索,以减少搜索的范围。
二、优化问题优化问题是指在给定的约束条件下寻找最优解的问题。
常见的优化问题有线性规划、整数规划和动态规划等。
线性规划是一种求解线性目标函数下的最优解的方法,它通过线性约束条件来限制解的范围,并通过求解线性方程组来找到最优解。
整数规划则是一种在变量取整数值的情况下求解最优解的方法,它在线性规划的基础上加入了整数约束条件。
动态规划是一种通过将问题分解为子问题并保存子问题的解来求解最优解的方法。
它通常适用于具有重叠子问题和最优子结构性质的问题。
动态规划的核心思想是通过保存已计算的结果来减少重复计算,从而提高算法的效率。
三、路径搜索与优化问题的应用路径搜索和优化问题在实际生活中有很多应用。
比如,在导航系统中,我们需要根据起点和目标点来寻找最短路径或最优路径,以便提供最佳的路线规划。
在物流领域,我们需要根据货物的起点和目标点来优化配送路线,以减少运输成本和时间。
带有复杂约束的组合优化问题的求解

带有复杂约束的组合优化问题的求解组合优化问题是计算机科学中的一种重要问题,它涉及到在一定的约束条件下对各种不同元素进行组合以达到最优解的目的。
组合优化问题不仅需要考虑计算的效率,也需要考虑解的准确性和实用性,因此在实际应用过程中会遇到许多复杂的约束条件。
本文将围绕带有复杂约束的组合优化问题展开讨论,介绍一些常用算法和方法来应对这些问题。
一、问题定义组合优化问题的定义可以用以下形式表示:给定一个大小为n的元素集合A={a1,a2,…,an},并要求从中选择k个元素的子集S,使得满足若干个约束条件且达到最优解。
其中,约束条件可以是单调性、集合的大小限制、元素互斥关系、概率限制等等多种形式。
例如,假设有n个任务,每个任务需要用一个不同的机器处理,每台机器一次只能处理一个任务。
我们要求出一种分配方案,使得每个任务都被分配给某台机器处理且每台机器都只处理一个任务。
这是一个约束条件为配对和不得重复的组合优化问题。
二、常见算法及其应用1.贪心算法贪心算法是一种很常见的算法,通常用于组合算法的近似求解。
它的核心思想是通过贪心地选择当前最佳的元素来构建解决方案,然后用这个方案来尽可能地满足约束条件。
但是,贪心算法并不能保证找到最优解,因为可能存在某个元素组合的组合方式比刚刚的选择更优。
以任务分配问题为例,如果我们选择的策略是尽可能选取能够完成任务的全部节点,那么可能会造成部分节点没有合适的机器分配,从而无法保证最优解。
如果我们选择其他的贪心策略,是否会得到更好的结果,还需要继续优化。
2.分支定界法分支定界法是解决组合优化问题的常见算法之一,其基本思想是通过对问题的搜索,逐步缩小可行解的集合,而且能够在较少的搜索次数内得到一个最优解。
核心思想是将问题划分为两个或多个独立的子问题,然后对每个子问题进行求解,再将各个子问题的解整合成一个整体解。
除此之外,在处理带有约束条件的组合优化问题时,还可以使用禁忌搜索、模拟退火、遗传算法等进化算法来解决。
优化算法的分类

优化算法的分类优化算法是一种用于找到问题的最优解或近似最优解的方法。
在计算机科学和运筹学领域,优化算法被广泛应用于解决各种实际问题,例如机器学习、图像处理、网络设计等。
优化算法的分类可以根据其基本原理或应用领域进行划分。
本文将介绍一些常见的优化算法分类。
1. 传统优化算法传统优化算法是指早期开发的基于数学原理的算法。
这些算法通常基于确定性模型和数学规则来解决问题。
以下是一些常见的传统优化算法:(1) 穷举法穷举法是一种朴素的优化算法,它通过遍历所有可能的解空间来寻找最优解。
穷举法的优点是能够找到全局最优解(如果存在),缺点是搜索空间过大时会非常耗时。
(2) 贪婪算法贪婪算法是一种启发式算法,它通过每一步选择当前状态下最优的决策,从而逐步构建最优解。
贪婪算法的优势是简单快速,但它可能无法找到全局最优解,因为它只考虑了当前最优的选择。
(3) 动态规划动态规划是一种基于最优子结构和重叠子问题性质的优化算法。
它将原问题拆分为一系列子问题,并通过保存子问题的解来避免重复计算。
动态规划的优点是可以高效地求解复杂问题,例如最短路径问题和背包问题。
(4) 分支界限法分支界限法是一种搜索算法,它通过不断分割搜索空间并限制搜索范围,以找到最优解。
分支界限法可以解决一些组合优化问题,如旅行商问题和图着色问题。
2. 随机优化算法随机优化算法是基于概率和随机性的算法,通过引入随机扰动来逐步寻找最优解。
以下是一些常见的随机优化算法:(1) 模拟退火算法模拟退火算法模拟了固体物体冷却过程中的原子运动,通过逐步减小随机扰动的概率来搜索最优解。
模拟退火算法可以通过接受劣解来避免陷入局部最优解。
(2) 遗传算法遗传算法模拟了生物进化过程,通过遗传操作(如交叉和变异)来搜索最优解。
遗传算法通常包括种群初始化、选择、交叉和变异等步骤,能够自适应地搜索解空间。
(3) 蚁群算法蚁群算法模拟了蚂蚁在寻找食物时的行为,通过蚂蚁之间的信息交流和挥发性信息素来搜索最优解。
工程实际应用中优化问题的三种分析求解方法的比较
工程实际应用中优化问题的三种分析求解方法的比较优化问题來源于求某一广义的设计的最优结果,用数学观点來说就是求某一个指标或某儿个指标描述的设计的最大值或最小值的问题。
“优化”既是一个专业术语,乂是一个通俗词汇,说明优化设计问题同时具有其存在范用的广泛性及探讨问题的难度,其解决盂要专门的理论与技巧。
设计的决策包含优化的过程, 其中有通过以往经验判断得出的决策,有通过枚举或者多方案比较得出的决策, 而经济的做法则是通过对设计建立数学模型,通过解析或数值计算寻找到决策的依据,用以指导设计的实施。
例如.某设计的模型可用一元函数f(x)来表示,对其进行最优化设计就是求该一元函数的最大值或者最小值。
如果一元函数是单调函数,则函数的最大値或最小值会在变量X的边界上取得;如果一元函数是高次多项式,函数曲线有多个极值点,则求函数的最大值或最小值问题就变得复杂起來,对多元函数的极值问题更是如此。
本文将对优化问题从简单的儿何方法、线性规划单•纯形法进行分析计算的比较。
引用课程中所接触到的一个简单算例进行初步阐释。
【算例一】某工程在计划内要安排生产1、11两种产品。
而这两种产品分别要在A、B、C、D 四种不同的设备上加工。
按工艺规定,产品I、II每一件在四种不同设备上加工的工时如表1所示。
已知设备在计划期内有效台数分别是12、& 16、12(1台设备工作lh称为1台时)•该工厂每生产一件产品I可获利润2元,每生产一件产品II可得利润3元。
问在计划期内如何安排生产I、II两种产品的产量获得利润最多。
表1两类产品在设备A、B、C、D上加工的台时数表【解析】首先按照线性规划的方法把上述问题简化为数学问题:假设变量X「X2分别表示该丁厂在计划期内所生产的产片T和n的产量,A设备的有效台数是12 台,这是一个限制产量的约束条件。
所以在确定两种产品的产量时,要考虑到不能超出设备A的有效台时数,其他三种设备与此类似:然后按照传统的几何线性规划方法进行函数的儿何图形分析,找出符合算例条件的最优解,将线性规划单纯形法的计算结果与线性规划几何图形分析结果进行初步比较。
最优化问题的求解方法分类
最优化问题的求解方法分类最优化方法不同类型的最优化问题可以有不同的最优化方法,即使同一类型的问题也可有多种最优化方法。
反之,某些最优化方法可适用于不同类型的模型。
最优化问题的求解方法一般可以分成解析法、直接法、数值计算法和其他方法。
①解析法:这种方法只适用于目标函数和约束条件有明显的解析表达式的情况。
求解方法是:先求出最优的必要条件,得到一组方程或不等式,再求解这组方程或不等式,一般是用求导数的方法或变分法求出必要条件,通过必要条件将问题简化,因此也称间接法。
②直接法:当目标函数较为复杂或者不能用变量显函数描述时,无法用解析法求必要条件。
此时可采用直接搜索的方法经过若干次迭代搜索到最优点。
这种方法常常根据经验或通过试验得到所需结果。
对于一维搜索(单变量极值问题),主要用消去法或多项式插值法;对于多维搜索问题(多变量极值问题)主要应用爬山法。
③数值计算法:这种方法也是一种直接法。
它以梯度法为基础,所以是一种解析与数值计算相结合的方法。
④其他方法:如网络最优化方法等(见网络理论)。
根据函数的解析性质,还可以对各种方法作进一步分类。
例如,如果目标函数和约束条件都是线性的,就形成线性规划。
线性规划有专门的解法,诸如单纯形法、解乘数法、椭球法和卡马卡法等。
当目标或约束中有一非线性函数时,就形成非线性规划。
当目标是二次的,而约束是线性时,则称为二次规划。
二次规划的理论和方法都较成熟。
如果目标函数具有一些函数的平方和的形式,则有专门求解平方和问题的优化方法。
目标函数具有多项式形式时,可形成一类几何规划。
最优解的概念最优化问题的解一般称为最优解。
如果只考察约束集合中某一局部范围内的优劣情况,则解称为局部最优解。
如果是考察整个约束集合中的情况,则解称为总体最优解。
对于不同优化问题,最优解有不同的含意,因而还有专用的名称。
例如,在对策论和数理经济模型中称为平衡解;在控制问题中称为最优控制或极值控制;在多目标决策问题中称为非劣解(又称帕雷托最优解或有效解)。
组合优化问题的计算方法
组合优化问题的计算方法组合优化问题是数学、计算机科学、运筹学等学科中的一个重要研究领域,其研究的主要是在一定限制下,如何从一组可行解中找到最优解。
这种问题的特点是通常具有指数级别的计算复杂度,因此需要使用特殊的计算方法来求解,本文将对组合优化问题的计算方法进行分类介绍。
一、启发式算法启发式算法是解决组合优化问题的一种常用方法,通常基于一些贪心策略和随机性的思路,运用启发式搜索来不断寻找最优解。
常见的启发式算法有遗传算法、蚁群算法、模拟退火算法等。
1.1 遗传算法遗传算法是从生物遗传学中得到灵感而发展出来的一种基于种群的搜索算法,其主要模拟了生物进化论中基因变异、自然选择等过程。
具体工作流程如下:1)初始化种群2)选择运算3)交叉(重组)运算4)变异运算5)选择运算6)重复第2步到第5步,直到达到预设的终止条件。
1.2 蚁群算法蚁群算法是基于蚂蚁觅食行为而发展出来的一种启发式算法,在其过程中,蚂蚁相互合作通过信息素的沉积和蒸发来寻找最优路径。
具体的工作流程如下:1)初始化目标问题的信息素2)每只蚂蚁按照信息素选择寻找路径3)在路径上更新信息素4)重复第2步到第3步,直到达到预设的终止条件。
1.3 模拟退火算法模拟退火算法是一种启发式优化算法,旨在模拟物理学中固体物体冷却的过程,寻找全局最优解。
具体的工作流程如下:1)初始化初始解和温度2)在当前温度下尝试多次跳转到现有解空间内的随机解3)更新温度4)重复第2步到第3步,直到达到终止条件。
二、穷举算法穷举算法是指对所有可能的情况进行搜索的算法,它能找到所有可行解并寻找最优解。
但由于其计算复杂度极高,因此在实际生产中很少使用。
三、线性规划算法线性规划算法是解决线性约束条件下的目标函数最优化问题的一类算法,其主要的思路是将最优化问题转化为线性规划问题并进行求解。
常见的线性规划算法有单纯形法、内点法、分支定界法等。
3.1 单纯形法单纯形法是求解线性规划问题的一种常用方法,它是从全约束角的某一点开始(常为初始点),不断朝外跳到更优解处,并最终找到全局最优解。
MATLAB中的遗传算法与优化问题解析
MATLAB中的遗传算法与优化问题解析引言随着计算机科学的迅猛发展,优化问题的求解变得越来越重要。
在现实生活中,我们经常遇到各种需要优化的情况,例如在工程设计中寻找最佳方案、在运输调度中确定最优路径、在金融领域优化投资组合等。
针对这些问题,遗传算法作为一种基于生物进化思想的优化算法,成为了研究者们的关注焦点。
一、遗传算法概述遗传算法(Genetic Algorithm, GA)是一种用来求解最优化问题的随机搜索和优化技术。
它通过模拟生物进化的机制,不断地进行个体之间的交叉、变异和选择,以寻找到最优解。
1.1 算法流程遗传算法的基本流程包括初始化种群、评估适应度、选择、交叉、变异和进化等步骤。
首先,通过随机生成一定数量的个体作为初始种群,利用适应度函数评估每个个体的适应程度。
然后,根据适应度大小,按照一定的概率选择优秀个体作为父代,进行交叉和变异操作产生新的个体。
最后,将新个体替换掉原有种群中适应度较差的个体,重复以上步骤直到满足终止条件。
1.2 适应度函数设计适应度函数是遗传算法中非常重要的一个组成部分,它用来评估个体的优劣程度。
适应度函数应该能准确地衡量问题的目标函数,使得达到最大(或最小)适应度的个体能代表问题的最优解。
在设计适应度函数时,需要结合问题本身的特点和要求,合理选择适应性度量。
1.3 交叉与变异操作交叉和变异是遗传算法中的两个重要操作。
交叉操作通过将两个父代个体的染色体片段进行互换,产生出新的后代个体。
变异操作则是在个体的染色体上随机改变一个或多个基因的值。
通过交叉和变异操作可以增加种群的多样性,提高搜索空间的覆盖率,从而增加找到最优解的概率。
二、 MATLAB中的遗传算法工具箱MATLAB作为一种高效且易于使用的科学计算软件,提供了丰富的工具箱,其中包括了强大的遗传算法工具箱。
通过这个工具箱,用户可以方便地实现遗传算法来解决各种优化问题。
2.1 工具箱安装与调用遗传算法工具箱是MATLAB的一个功能扩展包,用户可以在MATLAB官方网站上下载并安装。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优化问题的计算机求解第七章 最优化问题的计算机求解7.1 无约束最优化问题求解无约束最优化问题是最简单的一类最优化问题,其一般数学描述为)(min x f x(7-1-1) 其中,T n x x x x ],,,[21 =称为优化变量,)(⋅f 函数称为目标函数,该数学表示的含义亦即求取一组x 向量,使得最优化目标函数)(x f 为最小,故这样的问题又称为最小化问题。
其实,最小化是最优化问题的通用描述,它不失普遍性。
如果要想解最大化问题,那么只需给目标函数)(x f 乘一个负号就能立即将最大化问题转换成最小化问题。
所以本书中描述的全部问题都是最小化问题。
7.1.1 解析解法和图解法无约束最优化问题的最优点*x 处,目标函数)(x f 对x 各个分量的一阶导数为0,从而可以列出下面的方程:0,0,021=∂∂=∂∂=∂∂===***x x x x x x n x f x f x f(7-1-2)求解这些方程构成的联立方程可以得出极值点。
其实,解出的一阶导数均为0的极值点不一定都是极小值的点,其中有的还可能是极大值点。
极小值问题还应该有正的二阶导数。
对于单变量的最优化问题可以考虑采用解析解的方法进行来解。
然而多变量最优化问题因为需要将其转换成求解多元非线性方程,其难度也不低于直接采取最优化问题,所以没有必要采用解析解方法求解。
一元函数最优化问题的图解法也是很直观的,应绘制出该函数的曲线,在曲线上就能看出其最优值点。
二元函数的最优化也可以通过图解法求出。
但三元或多元函数,由于用图形没有办法表示,所以不适合用图解法来解。
【例7-1】函数5.0)2cos(4)24sin()(5.03-++=--t e t e t f t t ,试用解析求解和图形求解的方法研究该函数的最优性。
【求解】可以先表示该函数,并解析地求解该函数的一阶导教,用ezplot()函数可以给制出]4,0[∈t 区间内一阶导函数的曲线,如图7-1a 所示。
>> syms t; y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5;y1=diff(y,t); %求取一阶导数ezplot(y1,[0,4]) 绘制出选定区间内一阶导函数的曲线其实求解导数等于0的方程不比直接求解其最优值简单。
用图解法可以看出,在这个区域内有两点:21,A A ,使得它们的一阶导数为0,但从其一阶导数走向看,2A 点对应负的二阶导数值,所以该点对应于极大值点,而1A 点对应于正的二阶导数值,故为极小值点。
1A 点的值可以由下面的语句直接解出。
>> t0=solve(y1),ezplot(y,[0,4]) %求出一阶导数等于零的点t0 =1.4528424981725411893375778048840>>y2=diff(y1); b=subs(y2,t,t0) %并验证二阶导数为正b =7.8553420253333601379464405534590这样,就可以求出函数的最小值。
还可以用图形绘制的方法进一步验证得出的结果.如图7-1b 所示,可见, 1A 为最小值点,2A 为最大值点。
然而因为给定的函数是非线性函数.所以用解析法或类似的方法求解最小值问题一点都不比直接求解最优化问题简单。
因此.除演示之外,不建议用这样的方法求解该问题,而直接采用最优化问题求解程序得出问题的解。
t t(a) 函数的一阶导函数曲线(b) 函数曲线图7-1 联立方程图解法示意图 7.1.2 基于 MATLAB 的数值解法MATLAB 语言中提供了求解无约束最优化的函数fminsearch(),其最优化工具箱中还提供了函数fminunc(),二者的调用格式完全一致,为x =fminunc(Fun,x 0) 最简求解语句[x ,f ,flag ,out ]=fminunc(Fun,x 0,opt,p 1,p 2,……) 一般求解格式opt 为控制参数。
该函数主要采用了单纯形算法。
下面将通过例子来演示无约束最优化问题的数值解法。
【例7-2】已知二元函数xy y x e x x y x f z ----==22)2(),(2,试用MATLAB 提供的求解函数求出其最小值.并用图形方法表示其求解过程。
【求解】因为函数中给出的自变量是y x ,,而最优化函数需要求取的是自变量向量x 。
故在求解前应该先进行变量替换,如令y x x x ==21,,这样就可以用下面的语句由inline()形式定义出目标函数f ,然后将求解控制变量中的Display 属性设置为‘iter ’,这样可以显示中间的搜索结果。
用下面的语句求解出最优解。
>> f=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))','x');x0=[0; 0]; ff=optimset; ff.Display='iter';x=fminsearch(f,x0,ff)Iteration Func-count min f(x) Procedure0 1 01 3 -0.000499937 initial simplex2 4 -0.000499937 reflect…… …… ……………… …………72 137 -0.641424 contract outsideOptimization terminated:the current x satisfies the termination criteria using OPTIONS.TolX of1.000000e-004and F(X) satisfies the convergence criteria using OPTIONS.TolFun of1.000000e-004x =0.6111-0.3056同样的问题用fminunc ()函数求解,则可以得出如下的结果。
x=fminunc(f,[0;.0],ff)Iteration Func-count f(x) Step-size derivative1 2 -2e-008 0.001 -42 9 -0.584669 0.304353 0.3433 16 -0.641397 0.950322 0.001914 22 -0.641424 0.984028 -1.45e-008x =0.6110-0.3055比较两种方法,显然可以看出用fminunc()函数的效率明显高于fminsearch()。
所以在无约束力优化问题求解时,如果安装了最优化工具箱则建议使用fminunc()函数。
练习:求解()12424)(min 22122211++++=x x x x x e x f x x 1) 首先编写该函数的M 文件: fun1.m2) x=[-1,1] %估计初值fminunc(‘fun1’,x)7.2 有约束最优化问题求解有约束最优化问题的一般描述为)(min 0)(..x x x f G t s ≤(7-2-1)其中,T n x x x x ],,,[21 =,记号s.t.是英文subject to 的缩写,表示满足后面的关系。
该数学表示的含义为求取一组x 向量,使得在满足约束条件0)(≤x G 的前提下能够使目标函数)(x f 最小化。
在实际遇到的最优化问题中,有时约束条件可能是很复杂的,它既可以是等式约束,也可以是不等式约束等,既可以是线性的,也可能是非线性的,有时甚至可以不能用纯数学函数来描述。
7.2.1 约束条件与可行解区域满足约束条件0)(≤x G 的x 范围称为可行解区域。
下面通过例子演示二元问题的可行解范围与图解结果。
【例7-3】考虑下面二元最优化问题的求解,试用图解方法对该问题进行研究⎩⎨⎧≤++≥--19..)(max 212221221x x x x t s x x x 【求解】由约束条件可见,若在[-3,3]区间选择网格.则可以得出无约束时目标函数的三维图形数据。
可以用下面的语句获得这些数据。
>> [x1,x2]=meshgrid(-3:.1:3); % 生成网格型矩阵z=-x1.^2-x2; % 计算出矩阵上各点的高度引入了约束条件,则在图形上需要将约束条件以外的点剔除掉。
具体的方法是找出这些点的横纵坐标值,将其函数值设置成不定式NaN 即可剔除这些坐标点。
这样可以使用如下的语句进行求解。
>> i=find(x1.^2+x2.^2>9); z(i)=NaN;%找出92221>+x x 的坐标,并置函数值为NaNi=find(x1+x2>1); z(i)=NaN; %找出121>+x x 的坐标,并置函数值为NaNsurf(x1,x2,z); shading interp;该语句可以直接绘制出如图7-2(a )所示的三维图形,若想从上向下观察该图形,则可以使用view (0,90)命令.这样可以得出如图7-2(b )所示的二维投影图。
图形上的区域为相应最优化问题的可行区域,即满足约束条件的区域。
该区域内对应目标函数的最大值就是原问题的解,故从图形可以直接得出结论,问题的解为3,021==x x 用max(z(:))可以得出最大值为3。
(a) 三维图形(b) 二维投影图图7-2 二维最优化问题的图解法对于一般的一元问题和二元问题,可以用图解法直接得出问题的最优解。
但对于一般的多元问题和较复杂的问题,则不适合用图解法求解,而只能用数值解的方法进行求解,也没有检验全局最优性的方法。
7.2.2 线性规划问题的计算机求解线性规划问题是一类特殊的问题,也是最简单的有约束最优化问题。
在线性规划中,目标函数和约束函数都是线性的,其整个问题的数学描述为⎪⎩⎪⎨⎧≤≤=≤M meq eq T x x x B x A B Ax t s x xf ..min (7-2-2) 为描述原问题的方便及求解的高效性起见,这里的约束条件已经进一步细化为线性等式约束eq eq b x A =,线性不等式约束B Ax ≤,x 变量的上界向量M x 和下界向量m x ,使得M m x x x ≤≤。
对不等式约束来说,MATLAB 定义的标准型是“≤”关系式。
如果约束条件中某个式于是“≥”关系式,则在不等号两边同时乘以-1就可以转换成“≤”关系式了。
线性规划是一类最简单的有约束最优化问题,求解线性规划问题有多种算法。
其中,单纯形法是最有效的一种方法,MATLAB 的最优化工具箱中实现了该算法,提供了求解线性规划问题的linprog()函数。
该函数的调用格式为[x ,f opt ,flag ,c]= linprog (f , A , B , A eq , B eq , x m , x M , x 0, opt, p 1, p 2,……)其中,f , A , B , A eq , B eq , x m , x M 与前面约束与目标函数公式中的记号是完全一致的,x 0为初始搜索点。