logo资料库

matlab 优化工具箱.docx

第1页 / 共75页
第2页 / 共75页
第3页 / 共75页
第4页 / 共75页
第5页 / 共75页
第6页 / 共75页
第7页 / 共75页
第8页 / 共75页
资料共75页,剩余部分请下载后查看
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内 容: 1) 建立数学模型 即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题 所要达到的目标和各种约束条件。 2) 数学求解 数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、 非线性规划、动态规划、多目标规划等。 9.1 概 述 利用 Matlab 的优化工具箱,可以求解线性规划、非线性规划和多目标规划问 题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题, 线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具 箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型 课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1 优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1.最小化函数
9.1.3 参数设置 利用 optimset 函数,可以创建和编辑参数结构;利用 optimget 函数,可以获 得 options 优化参数。 ● optimget 函数 功能:获得 options 优化参数。 语法: 描述: val = optimget(options,'param') val = optimget(options,'param',default) val = optimget(options,'param') 返回优化参数 options 中指定的参数的 值。只需要用参数开头的字母来定义参数就行了。 val = optimget(options,'param',default) 若 options 结构参数中没有定义 指定参数,则返回缺省值。注意,这种形式的函数主要用于其它优化 函数。 举例:
1. 下面的命令行将显示优化参数 options 返回到 my_options 结构中: val = optimget(my_options,'Display') 2. 下面的命令行返回显示优化参数 options 到 my_options 结构中(就象前面 的例子一样),但如果显示参数没有定义,则返回值'final': optnew = optimget(my_options,'Display','final'); 参见: optimset ● optimset 函数 功能:创建或编辑优化选项参数结构。 语法: options = optimset('param1',value1,'param2',value2,...) optimset options = optimset options = optimset(optimfun) options = optimset(oldopts,'param1',value1,...) options = optimset(oldopts,newopts) 描述: options = optimset('param1',value1,'param2',value2,...) 创建一个称为 options 的优化选项参数,其中指定的参数具有指定值。所有未指定的 参数都设置为空矩阵[](将参数设置为[]表示当 options 传递给优化函 数时给参数赋缺省值)。赋值时只要输入参数前面的字母就行了。 optimset 函数没有输入输出变量时,将显示一张完整的带有有效值的 参数列表。
options = optimset (with no input arguments) 创建一个选项结构options, 其中所有的元素被设置为[]。 options = optimset(optimfun) 创建一个含有所有参数名和与优化函数 optimfun 相关的缺省值的选项结构 options。 options = optimset(oldopts,'param1',value1,...) 创建一个 oldopts 的拷贝, 用指定的数值修改参数。 options = optimset(oldopts,newopts) 将已经存在的选项结构 oldopts 与 新的选项结构 newopts 进行合并。newopts 参数中的所有元素将覆盖 oldopts 参数中的所有对应元素。 举例: 1.下面的语句创建一个称为 options 的优化选项结构,其中显示参 数设为'iter',TolFun 参数设置为 1e-8: options = optimset('Display','iter','TolFun',1e-8) 2.下面的语句创建一个称为 options 的优化结构的拷贝,改变 TolX 参数的值,将新值保存到 optnew 参数中: optnew = optimset(options,'TolX',1e-4); 3.下面的语句返回 options 优化结构,其中包含所有的参数名和与 fminbnd 函数相关的缺省值: options = optimset('fminbnd') 4.若只希望看到 fminbnd 函数的缺省值,只需要简单地键入下面 的语句就行了: optimset fminbnd 或者输入下面的命令,其效果与上面的相同: optimset('fminbnd') 参见:
optimget 9.1.4 模型输入时需要注意的问题 使用优化工具箱时,由于优化函数要求目标函数和约束条件满足一定的格式, 所以需要用户在进行模型输入时注意以下几个问题: 1.目标函数最小化 优化函数 fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax 和 lsqnonlin 都要求目标 函数最小化,如果优化问题要求目标函数最大化,可以通过使该目标函数的负值最小化即-f(x)最小化来实 现。近似地,对于 quadprog 函数提供-H 和-f,对于 linprog 函数提供-f。 2.约束非正 优化工具箱要求非线性不等式约束的形式为 Ci(x)≤0,通过对不等式取负可以达到使大于零的约束形 式变为小于零的不等式约束形式的目的,如 Ci(x)≥0 形式的约束等价于- Ci(x)≤0;Ci(x)≥b 形式的约束等价于 - Ci(x)+b≤0。 3.避免使用全局变量 9.1.5 @(函数句柄)函数 MATLAB6.0 中可以用@函数进行函数调用。@函数返回指定 MATLAB 函数 的句柄,其调用格式为: handle = @function 利用@函数进行函数调用有下面几点好处: ● 用句柄将一个函数传递给另一个函数; ● 减少定义函数的文件个数; ● 改进重复操作; ● 保证函数计算的可靠性。 下面的例子为 humps 函数创建一个函数句柄,并将它指定为 fhandle 变量。
fhandle = @humps; 同样传递句柄给另一个函数,也将传递所有变量。本例将刚刚创建的函数句 柄传递给 fminbnd 函数,然后在区间[0.3,1]上进行最小化。 x = fminbnd (@humps, 0.3, 1) x = 0.6370 9.2 最小化问题 9.2.1 单变量最小化 9.2.1.1 基本数学原理 本节讨论只有一个变量时的最小化问题,即一维搜索问题。该问题在某些情 况下可以直接用于求解实际问题,但大多数情况下它是作为多变量最优化方法的 基础在应用,因为进行多变量最优化要用到一维搜索法。该问题的数学模型为: 其中,x,x1,和 x2 为标量,f(x)为函数,返回标量。 该问题的搜索过程可用下式表达: 其中 xk 为本次迭代的值,d 为搜索方向,α为搜索方向上的步长参数。所以一 维搜索就是要利用本次迭代的信息来构造下次迭代的条件。 求解单变量最优化问题的方法有很多种,根据目标函数是否需要求导,可以 分为两类,即直接法和间接法。直接法不需要对目标函数进行求导,而间接法则 需要用到目标函数的导数。 1.直接法 常用的一维直接法主要有消去法和近似法两种。
(1)消去法 该法利用单峰函数具有的消去性质进行反复迭代,逐渐消去不包含极小点的区间,缩 小搜索区间,直到搜索区间缩小到给定的允许精度为止。一种典型的消去法为黄金分割法(Golden Section Search)。黄金分割法的基本思想是在单峰区间内适当插入两点,将区间分为三段,然后通过比较这两点函 数值的大小来确定是删去最左段还是最右段,或同时删去左右两段保留中间段。重复该过程使区间无限缩 小。插入点的位置放在区间的黄金分割点及其对称点上,所以该法称为黄金分割法。该法的优点是算法简 单,效率较高,稳定性好。 (2)多项式近似法 该法用于目标函数比较复杂的情况。此时寻找一个与它近似的函数代替目标函 数,并用近似函数的极小点作为原函数极小点的近似。常用的近似函数为二次和三次多项式。 二次内插涉及到形如下式的二次函数数据拟合问题: 其中步长极值为: 然后只要利用三个梯度或函数方程组就可以确定系数 a 和 b,从而可以确定α*。得到该值以后, 进行搜索区间的收缩。在缩短的新区间中,重新安排三点求出下一次的近似极小 点α*,如此迭代下去,直到满足终止准则为止。其迭代公式为: 其中 二次插值法的计算速度比黄金分割法的快,但是对于一些强烈扭曲或可能多 峰的函数,该法的收敛速度会变得很慢,甚至失败。 2.间接法 间接法需要计算目标函数的导数,优点是计算速度很快。常见的间接法包括 牛顿切线法、对分法、割线法和三次插值多项式近似法等。优化工具箱中用得较 多的是三次插值法。 三次插值的基本思想与二次插值的一致,它是用四个已知点构造一个三次多项式 P3(x),用它逼近函 数 f(x),以 P3(x)的极小点作为 f(x)的近似极小点。一般讲,三次插值法比二次插值法的收敛速度要快些, 但每次迭代需要计算两个导数值。 三次插值法的迭代公式为 其中
分享到:
收藏