数学建模算法大全

map_hacker

贡献于2013-10-17

字数:0 关键词:

数 学 建 模 主 编 司守奎 副主编 徐珂文 李日华 海军航空工程学院 ﹒i﹒ 目 录 第一章 线性规划……………………………………………………………………………1 § 1 线性规划……………………………………………………………………………1 1.1 线性规划的实例与定义 ……………………………………………………1 1.2 线性规划的 Matlab 标准形式…………………………………………………1 1.3 线性规划问题的解的概念…………………………………………………… 2 1.4 线性规划的图解法…………………………………………………………… 2 1.5 求解线性规划的 Matlab 解法…………………………………………………3 1.6 可以转化为线性规划的问题………………………………………………… 4 § 2 运输问题………………………………………………………………………… 4 § 3 指派问题………………………………………………………………………… 5 § 4 对偶理论与灵敏度分析………………………………………………………… 7 习题一……………………………………………………………………………… 9 第二章 整数规划………………………………………………………………………… 12 § 1 概论……………………………………………………………………………12 § 2 分枝定界法………………………………………………………………………12 § 3 10 − 整数规划………………………………………………………………… 14 3.1 引入 10 − 变量的实际问题………………………………………………… 15 3.2 10 − 整数规划解法之一………………………………………………… 16 § 4 蒙特卡洛法(随即取样法)……………………………………………………17 §5 整数规划的计算机解法…………………………………………………………18 习题二………………………………………………………………………………19 第三章 非线性规划………………………………………………………………………20 § 1 非线性规划………………………………………………………………………20 1.1 非线性规划实例与定义 ……………………………………………………20 1.2 线性规划与非线性规划的区别 ……………………………………………21 1.3 非线性规划的 Matlab 解法…………………………………………………21 1.4 求解非线性规划的基本迭代格式 …………………………………………22 1.5 凸函数、凸规划…………………………………………………………… 23 § 2 无约束问题……………………………………………………………………… 23 2.1 一维搜索方法……………………………………………………………… 23 2.2 二次插值法………………………………………………………………… 26 2.3 无约束极值问题的解法 ……………………………………………………26 2.4 Matlab 求无约束极值问题……………………………………………… 32 § 3 约束极值问题…………………………………………………………………32 3.1 二次规划…………………………………………………………………… 33 3.2 罚函数法…………………………………………………………………… 34 ﹒ii﹒ 3.3 Matlab求约束极值问题…………………………………………………………35 § 4 飞行管理问题…………………………………………………………………38 习题三………………………………………………………………………………………39 第四章 动态规划…………………………………………………………………………40 § 1 引言………………………………………………………………………………40 § 2 基本概念,基本方程和计算方法………………………………………………41 § 3 逆序解法的计算框图……………………………………………………………43 § 4 动态规划与静态规划的关系……………………………………………………44 § 5 若干典型问题的动态规划模型…………………………………………………46 § 6 具体的应用实例…………………………………………………………………47 习题四…………………………………………………………………………………50 第五章 图与网络模型及方法…………………………………………………………… 51 § 1 概论………………………………………………………………………………51 § 2 图与网络的基本概念……………………………………………………………52 § 3 应用—最短路问题………………………………………………………………58 § 4 树…………………………………………………………………………………60 § 5 匹配问题…………………………………………………………………………63 § 6 Euler图和 Hamilton 图………………………………………………………… 64 § 7 最大流问题………………………………………………………………………68 § 8 最小费用流及其求法……………………………………………………………73 习题五……………………………………………………………………………… 74 第六章 排队论模型……………………………………………………………………… 76 § 1 基本概念…………………………………………………………………………76 § 2 输入过程与服务时间的分布……………………………………………………78 § 3 标准的 M/M/1 模型………………………………………………………………81 § 4 产生给定分布的随机数的方法…………………………………………………82 § 5 排队模型的计算机模拟…………………………………………………………83 习题六………………………………………………………………………………… 86 第七章 对策论…………………………………………………………………………… 87 § 1 引言………………………………………………………………………………87 § 2 对策问题…………………………………………………………………………87 § 3 零和对策的混合策略……………………………………………………………90 § 4 零和对策的线性规划解法………………………………………………………92 习题七……………………………………………………………………………… 95 第八章 层次分析法……………………………………………………………………… 96 § 1 层次分析法的基本原理与步骤……………………………………………… 96 § 2 层次分析法的应用……………………………………………………………100 习题八……………………………………………………………………………… 103 第九章 插值与拟合……………………………………………………………………… 104 ﹒iii﹒ § 1 插值方法………………………………………………………………………104 1.1 拉格朗日多项式插值………………………………………………………104 1.2 牛顿插值………………………………………………………………………106 1.3 分段线性插值…………………………………………………………………108 1.4 埃尔米特(Hermite)插值………………………………………………………109 1.5 样条插值………………………………………………………………………110 1.6 二维插值………………………………………………………………………113 § 2 曲线拟合的线性最小二乘法……………………………………………………114 2.1 线性最小二乘法………………………………………………………………114 2.2 最小二乘法的 Matlab 实现…………………………………………………… 116 § 3 最小二乘优化……………………………………………………………………117 § 4 曲线拟合与函数逼近…………………………………………………………119 习题九…………………………………………………………………………………120 第十章 数据的统计描述和分析……………………………………………………122 § 1 统计的基本概念………………………………………………………………122 § 2 参数估计………………………………………………………………………128 § 3 假设检验……………………………………………………………………129 习题十…………………………………………………………………………………133 第十一章 方差分析…………………………………………………………………134 § 1 单因素方差分析………………………………………………………………134 § 2 双因素方差分析………………………………………………………………138 习题十一………………………………………………………………………………140 第十二章 回归分析…………………………………………………………………141 § 1 多元线性回归…………………………………………………………………141 § 2 非线性回归和逐步回归………………………………………………………148 习题十二………………………………………………………………………………151 第十三章 微分方程建模……………………………………………………………153 § 1 发射卫星为什么用三级火箭…………………………………………………153 § 2 人口模型………………………………………………………………………158 § 3 战争模型………………………………………………………………………160 习题十三………………………………………………………………………………165 第十四章 稳定状态模型……………………………………………………………167 § 1 微分方程稳定性理论简介……………………………………………………167 § 2 再生资源的管理和开发………………………………………………………169 § 3 Volterra 模型………………………………………………………………… 174 习题十四………………………………………………………………………………178 第十五章 常微分方程的解法………………………………………………………179 § 1 常微分方程的离散化…………………………………………………………179 § 2 欧拉(Euler)方法………………………………………………………………180 ﹒iv﹒ § 3 改进的(Euler)方法……………………………………………………………181 § 4 龙格—库塔(Runge—Kutta)方法…………………………………………… 182 § 5 线性多步法……………………………………………………………………184 § 6 一阶微分方程组与高阶微分方程的数值解法………………………………185 § 7 Matlab 解法………………………………………………………………… 186 习题十五……………………………………………………………………………………191 第十六章 差分方程模型…………………………………………………………………192 § 1 差分方程……………………………………………………………………… 192 § 2 蛛网模型……………………………………………………………………… 195 § 3 商品销售量预测……………………………………………………………… 198 § 4 遗传模型……………………………………………………………………… 200 习题十六……………………………………………………………………………………206 第十七章 马氏链模型……………………………………………………………………207 § 1 随机过程的概念……………………………………………………………… 207 § 2 马尔可夫链…………………………………………………………………… 207 § 3 马尔可夫链的应用…………………………………………………………… 216 习题十七……………………………………………………………………………………216 第十八章 动态优化模型…………………………………………………………………218 § 1 变分法简介…………………………………………………………………… 218 § 2 生产设备的最大经济效益…………………………………………………… 226 习题十八……………………………………………………………………………………229 第十九章 神经网络模型…………………………………………………………………230 § 1 神经网络简介………………………………………………………………… 230 § 2 蠓虫分类问题与多层前馈网络……………………………………………… 232 § 3 处理蠓虫分类的另一种网络方法…………………………………………… 236 习题十九……………………………………………………………………………………238 第二十章 偏微分方程的数值解…………………………………………………………240 § 1 偏微分方程的定解问题……………………………………………………… 240 § 2 偏微分方程的差分解法……………………………………………………… 242 § 3 Matlab 解法……………………………………………………………………247 习题二十……………………………………………………………………………………251 第二十一章 目标规划……………………………………………………………………253 § 1 目标规划的数学模型………………………………………………………… 253 § 2 多目标规划的 Matlab 解法…………………………………………………… 255 习题二十一…………………………………………………………………………………256 第二十二章 模糊数学模型………………………………………………………………257 § 1 模糊数学基本知识…………………………………………………………… 257 § 2 模糊分类问题………………………………………………………………… 263 § 3 最佳方案的模糊决策………………………………………………………… 268 ﹒v﹒ 第二十三章 现代优化算法简介…………………………………………………………271 § 1 现代优化算法简介…………………………………………………………… 271 § 2 模拟退火算法………………………………………………………………… 271 § 3 蚁群算法……………………………………………………………………… 277 第二十四章 时间序列模型………………………………………………………………280 § 1 确定性时间序列分析方法概述……………………………………………… 280 § 2 平稳时间序列模型…………………………………………………………… 284 § 3 ARMA 模型的特性…………………………………………………………… 285 § 4 时间序列建模的基本步骤…………………………………………………… 288 附录一 Matlab入门………………………………………………………………………291 附录二 Matlab在线性代数中的应用……………………………………………………310 附录三 运筹学的 Lingo 软件……………………………………………………………314 附录四 判别分析…………………………………………………………………………317 参考文献……………………………………………………………………………………319 -1- 前 言 今天,人类社会正处在由工业化社会向信息化社会过渡的变革。以数字化为特征的 信息社会有两个显著特点:计算机技术的迅速发展与广泛应用;数学的应用向一切领域 渗透。随着计算机技术的飞速发展,科学计算的作用越来越引起人们的广泛重视,它已 经与科学理论和科学实验并列成为人们探索和研究自然界、人类社会的三大基本方法。 为了适应这种社会的变革,培养和造就出一批又一批适应高度信息化社会具有创新能力 的高素质的工程技术和管理人才,在各高校开设“数学建模”课程,培养学生的科学计 算能力和创新能力,就成为这种新形势下的历史必然。 数学建模是对现实世界的特定对象,为了特定的目的,根据特有的内在规律,对其 进行必要的抽象、归纳、假设和简化,运用适当的数学工具建立的一个数学结构。数学 建模就是运用数学的思想方法、数学的语言去近似地刻画一个实际研究对象,构建一座 沟通现实世界与数学世界的桥梁,并以计算机为工具应用现代计算技术达到解决各种实 际问题的目的。建立一个数学模型的全过程称为数学建模。因此“数学建模”(或数学 实验)课程教学对于开发学生的创新意识,提升人的数学素养,培养学生创造性地应用 数学工具解决实际问题的能力,有着独特的功能。 数学建模过程就是一个创造性的工作过程。人的创新能力首先是创造性思维和具备 创新的思想方法。数学本身是一门理性思维科学,数学教学正是通过各个教学环节对学 生进行严格的科学思维方法的训练,从而引发人的灵感思维,达到培养学生的创造性思 维的能力。同时数学又是一门实用科学,它具有能直接用于生产和实践,解决工程实际 中提出的问题,推动生产力的发展和科学技术的进步。学生参加数学建模活动,首先就 要了解问题的实际背景,深入到具体学科领域的前沿,这就需要学生具有能迅速查阅大 量科学资料,准确获得自己所需信息的能力;同时,不但要求学生必需了解现代数学各 门学科知识和各种数学方法,把所掌握的数学工具创造性地应用于具体的实际问题,构 建其数学结构,还要求学生熟悉各种数学软件,熟练地把现代计算机技术应用于解决当 -2- 前实际问题综合能力,最后还要具有把自己的实践过程和结果叙述成文字的写作能力。 通过数学建模全过程的各个环节,学生们进行着创造性的思维活动,模拟了现代科学研 究过程。通过“数学建模”课程的教学和数学建模活动极大地开发了学生的创造性思维 的能力,培养学生在面对错综复杂的实际问题时,具有敏锐的观察力和洞察力,以及丰 富的想象力。因此,“数学建模”课程在培养学生的创新能力方面有着其它课程不可替 代的作用。 几年的“数学建模”教学实践告诉我们,进行数学建模教学,为学生提供一本内容 丰富,既理论完整又实用的“数学建模”教材,使学生少走弯路尤为重要。这也是我们 编写这本教材的初衷。本教材可以说既是我们多年教学经验的总结,也是我们心血的结 晶。本教材的特点是尽量为学生提供常用的数学方法,并将相应的 Matlab 程序提供给 学生,使学生在进行书中提供的案例的学习中,在自己动手构建数学模型的同时上机进 行数学实验,从而为学生提供数学建模全过程的训练,以便能够达到举一反三,取得事 半功倍的教学效果。司守奎同志编写了全部的 Matlab 程序,参加本书编写的还有毛凯 同志。 全书共二十四章,各章有一定的独立性,这样便于教师和学生按需要进行选择。完 成本教材的教学大约需要 60 学时,其中方法教学与上机实践的比例一般不应少于 1:1 。 一本好的教材需要经过多年的教学实践,反复锤炼。由于我们的经验和时间所限, 书中的错误和纰漏在所难免,敬请同行不吝指正。 编者 2003年 12 月 -1- 第一章 线性规划 §1 线性规划 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济 效益的问题。此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。自从 1947 年 G. B. Dantzig 提出 求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深 入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性 规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。 1.1 线性规划的实例与定义 例 1 某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。 生产甲机床需用 BA、 机器加工,加工时间分别为每台 2 小时和 1 小时;生产乙机床 需用 CBA 、、 三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时 数分别为 A 机器 10 小时、B 机器 8 小时和C 机器 7 小时,问该厂应生产甲、乙机床各 几台,才能使总利润最大? 上述问题的数学模型:设该厂生产 1x 台甲机床和 2x 乙机床时总利润最大,则 21, xx 应满足 (目标函数) 21 34max xxz += (1) s.t.(约束条件) ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≥ ≤ ≤+ ≤+ 0, 7 8 102 21 2 21 21 xx x xx xx (2) 这里变量 21, xx 称之为决策变量,(1)式被称为问题的目标函数,(2)中的几个不等式 是问题的约束条件,记为 s.t.(即 subject to)。由于上面的目标函数及约束条件均为线性 函数,故被称为线性规划问题。 总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最 小的问题。 在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往 也是困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我 们建立有效模型的关键之一。 1.2 线性规划的 Matlab 标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以 是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab 中规定线性 规划的标准形式为 xc x T min s.t. ⎪⎩ ⎪⎨ ⎧ ≤≤ =⋅ ≤ ubxlb beqxAeq bAx 其中 c 和 x 为 n 维列向量, A 、 Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向 量。 -2- 例如线性规划 bAxxc x T ≥ s.t. max 的 Matlab 标准型为 bAxxc x T −≤−− s.t. min 1.3 线性规划问题的解的概念 一般线性规划问题的(数学)标准型为 ∑ = = n j jj xcz 1 max (3) s.t. ⎪⎩ ⎪⎨ ⎧ =≥ ==∑ = njx mibxa j n j ijij ,,2,10 ,,2,1 1 L L (4) 可行解 满足约束条件(4)的 解 ),,,( 21 nxxxx L= ,称为线性规划问题的可行解, 而使目标函数(3)达到最大值的可行解叫最优解。 可行域 所有可行解构成的集合称为问题的可行域,记为 R 。 1.4 线性规划的图解法 0 2 4 6 8 10 0 1 2 3 4 5 6 7 8 9 10 x2 =7 2x1+x2=10 x1 +x2 =8 z=1 2 (2 ,6 ) 图 1 线性规划的图解示意图 图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来 求解例 1。对于每一固定的值 z ,使目标函数值等于 z 的点构成的直线称为目标函数等 位线,当 z 变动时,我们得到一族平行直线。对于例 1,显然等位线越趋于右上方,其 上的点具有越大的目标函数值。不难看出,本例的最优解为 Tx )6,2(* = ,最优目标值 26* =z 。 从上面的图解过程可以看出并不难证明以下断言: (1)可行域 R 可能会出现多种情况。R 可能是空集也可能是非空集合,当 R 非空 时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。R 既可能是有界区域, 也可能是无界区域。 (2)在 R 非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其 目标函数值无界)。 -3- (3)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域 R 的 “顶点”。 上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的 n 维 空间中,满足一线性等式 ∑ = = n i ii bxa 1 的点集被称为一个超平面,而满足一线性不等式 ∑ = ≤ n i ii bxa 1 (或 ∑ = ≥ n i ii bxa 1 )的点集被称为一个半空间(其中 ),,( 1 naa L 为一 n 维行 向量, b 为一实数)。若干个半空间的交集被称为多胞形,有界的多胞形又被称为多面 体。易见,线性规划的可行域必为多胞形(为统一起见,空集Φ 也被视为多胞形)。 在一般 n 维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点 可以看成为边界直线的交点,但这一几何概念的推广在一般 n 维空间中的几何意义并不 十分直观。为此,我们将采用另一途径来定义它。 定义 1 称 n 维空间中的区域 R 为一凸集,若 Rxx ∈∀ 21, 及 )1,0(∈∀λ ,有 Rxx ∈−+ 21 )1( λλ 。 定义 2 设 R 为 n 维空间中的一个凸集, R 中的点 x 被称为 R 的一个极点,若不 存在 Rxx ∈21、 及 )1,0(∈λ ,使得 21 )1( xxx λλ −+= 。 定义 1 说明凸集中任意两点的连线必在此凸集中;而定义 2 说明,若 x 是凸集 R 的一个极点,则 x 不能位于 R 中任意两点的连线上。不难证明,多胞形必为凸集。同 样也不难证明,二维空间中可行域 R 的顶点均为 R 的极点( R 也没有其它的极点)。 1.5 求解线性规划的 Matlab 解法 单纯形法是求解线性规划问题的最常用、最有效的算法之一。这里我们就不介绍 单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的 Matlab 解法。 Matlab 中线性规划的标准型为 xc x T min s.t. ⎪⎩ ⎪⎨ ⎧ ≤≤ =⋅ ≤ ubxlb beqxAeq bAx 基本函数形式为 linprog(c,A,b),它的返回值是向量 x 的值。还有其它的一些函数调用形 式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如: [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 这里 fval 返回目标函数的值,LB 和 UB 分别是变量 x 的下界和上界, 0x 是 x 的初始值, OPTIONS 是控制参数。 例 2 求解下列线性规划问题 321 532max xxxz −+= s.t. 7321 =++ xxx 1052 321 ≥+− xxx 123 321 ≤++ xxx 0,, 321 ≥xxx -4- 解 (i)编写 M 文件 c=[2;3;-5]; a=[-2,5,-1;1,3,1]; b=[-10;12]; aeq=[1,1,1]; beq=7; x=linprog(-c,a,b,aeq,beq,zeros(3,1)) value=c'*x (ii)将M文件存盘,并命名为example1.m。 (iii)在Matlab指令窗运行example1即可得所求结果。 例3 求解线性规划问题 321 32 min xxxz ++= ⎪⎩ ⎪⎨ ⎧ ≥ ≥+ ≥++ 0,, 623 824 321 21 321 xxx xx xxx 解 编写Matlab程序如下: c=[2;3;1]; a=[1,4,2;3,2,0]; b=[8;6]; [x,y]=linprog(c,-a,-b,[],[],zeros(3,1)) 1.6 可以转化为线性规划的问题 很多看起来不是线性规划的问题也可以通过变换变成线性规划的问题来解决。如: 例4 规划问题为 bAx xxx n ≤ +++ t.s. ||||||min 21 L 其中 T nxxx ][ 1 L= , A 和b 为相应维数的矩阵和向量。 要把上面的问题变换成线性规划问题,只要注意到事实:对任意的 ix ,存在 0, >ii vu 满足 iii vux −= , iii vux +=|| 事实上,我们只要取 2 || ii i xxu += , 2 || ii i xxv −= 就可以满足上面的条件。 这样,记 T nuuu ][ 1 L= , T nvvv ][ 1 L= ,从而我们可以把上面的问题 变成 ∑ = + n i ii vu 1 )(min ⎩ ⎨ ⎧ ≥ ≤− 0, )( t.s. vu bvuA 例 5 |}|max{min iyx ii ε 其中 iii yx −=ε 。 对于这个问题,如果我们取 ||max0 iyi x ε= ,这样,上面的问题就变换成 -5- 0min x 0011 ,, t.s. xyxxyx nn ≤−≤− L 此即我们通常的线性规划问题。 §2 运输问题(产销平衡) 例 6 某商品有 m 个产地、 n 个销地,各产地的产量分别为 maa ,,1 L ,各销地的 需求量分别为 nbb ,,1 L 。若该商品由i 产地运到 j 销地的单位运价为 ijc ,问应该如何调 运才能使总运费最省? 解:引入变量 ijx ,其取值为由i 产地运往 j 销地的该商品数量,数学模型为 ∑∑ == m i n j ijij xc 11 min s.t. ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ ≥ == == ∑ ∑ = = 0 ,,2,1, ,,1, 1 1 ij m i jij n j iij x njbx miax L L 显然是一个线性规划问题,当然可以用单纯形法求解。 对产销平衡的运输问题,由于有以下关系式存在: ∑∑∑∑∑∑ ====== =⎟ ⎠ ⎞⎜ ⎝ ⎛=⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= m i i n j n j m i ij m i n j ijj axxb 111111 其约束条件的系数矩阵相当特殊,可用比较简单的计算方法,习惯上称为表上作业法(由 康托洛维奇和希奇柯克两人独立地提出,简称康—希表上作业法)。 §3 指派问题 3.1 指派问题的数学模型 例 7 拟分配 n 人去干 n 项工作,每人干且仅干一项工作,若分配第i 人去干第 j 项工作,需花费 ijc 单位时间,问应如何分配工作才能使工人花费的总时间最少? 容易看出,要给出一个指派问题的实例,只需给出矩阵 )( ijcC = ,C 被称为指派 问题的系数矩阵。 引入变量 ijx ,若分配i 干 j 工作,则取 1=ijx ,否则取 0=ijx 。上述指派问题的 数学模型为 ∑∑ == n i n j ijij xc 11 min s.t. ∑ = = n j ijx 1 1 -6- ∑ = = n i ijx 1 1 1 0或=ijx 上述指派问题的可行解可以用一个矩阵表示,其每行每列均有且只有一个元素为 1,其余元素均为 0;可以用 n,,1 L 中的一个置换表示。 问题中的变量只能取 0 或 1,从而是一个 0-1 规划问题。一般的 0-1 规划问题求解 极为困难。但指派问题并不难解,其约束方程组的系数矩阵十分特殊(被称为全单位模 矩阵,其各阶非零子式均为 1± ),其非负可行解的分量只能取 0 或 1,故约束 10或=ijx 可改写为 0≥ijx 而不改变其解。此时,指派问题被转化为一个特殊的运输问题,其中 nm = , 1== ji ba 。 3.2 求解指派问题的匈牙利算法 由于指派问题的特殊性,又存在着由匈牙利数学家 Konig 提出的更为简便的解法 —匈牙利算法。算法主要依据以下事实:如果系数矩阵 )( ijcC = 一行(或一列)中每 一元素都加上或减去同一个数,得到一个新矩阵 )( ijbB = ,则以C 或 B 为系数矩阵的 指派问题具有相同的最优指派。 例 8 求解指派问题,其系数矩阵为 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 16221917 17182224 18192117 22191516 C 解 将第一行元素减去此行中的最小元素 15,同样,第二行元素减去 17,第三行 元素减去 17,最后一行的元素减去 16,得 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0631 0157 1240 7401 1B 再将第 3 列元素各减去 1,得 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = * * * * 2 0531 0057 1140 7301 B 以 2B 为系数矩阵的指派问题有最优指派 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ 4312 4321 由等价性,它也是例 7 的最优指派。 有时问题会稍复杂一些。 例 9 求解系数矩阵C 的指派问题 -7- ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 6107104 10661415 121412177 66698 979712 C 解:先作等价变换如下 ∨ ∨ ∨ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ → ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − − − − − 26360 40*089 57510*0 0*0032 202*05 6107104 10661415 121412177 66698 979712 4 6 7 6 7 容易看出,从变换后的矩阵中只能选出四个位于不同行不同列的零元素,但 5=n , 最优指派还无法看出。此时等价变换还可进行下去。步骤如下: (1) 对未选出 0 元素的行打 ∨ ; (2) 对 ∨ 行中 0 元素所在列打 ∨ ; (3) 对 ∨ 列中选中的 0 元素所在行打 ∨ ; 重复(2)、(3)直到无法再打 ∨ 为止。 可以证明,若用直线划没有打 ∨ 的行与打 ∨ 的列,就得到了能够覆盖住矩阵中所 有零元素的最少条数的直线集合,找出未覆盖的元素中的最小者,令 ∨ 行元素减去此 数, ∨ 列元素加上此数,则原先选中的 0 元素不变,而未覆盖元素中至少有一个已转 变为 0,且新矩阵的指派问题与原问题也等价。上述过程可反复采用,直到能选取出足 够的 0 元素为止。例如,对例 5 变换后的矩阵再变换,第三行、第五行元素减去 2,第 一列元素加上 2,得 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 04140 400811 35380 00034 20207 现在已可看出,最优指派为 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ 53142 54321 。 §4 对偶理论与灵敏度分析 4.1 原始问题和对偶问题 考虑下列一对线性规划模型: xcTmax s.t. 0, ≥≤ xbAx (P) 和 ybTmin s.t. 0, ≥≥ ycyAT (D) -8- 称(P)为原始问题,(D)为它的对偶问题。 不太严谨地说,对偶问题可被看作是原始问题的“行列转置”: (1) 原始问题中的第 j 列系数与其对偶问题中的第 j 行的系数相同; (2) 原始目标函数的各个系数行与其对偶问题右侧的各常数列相同; (3) 原始问题右侧的各常数列与其对偶目标函数的各个系数行相同; (4) 在这一对问题中,不等式方向和优化方向相反。 考虑线性规划: 0,s.t.min ≥= xbAxxcT 把其中的等式约束变成不等式约束,可得 0, s.t. min ≥⎥⎦ ⎤ ⎢⎣ ⎡ −≥⎥⎦ ⎤ ⎢⎣ ⎡ − xb bxA AxcT 它的对偶问题是 [] [ ]cy yAAy ybb TTTT ≤⎥⎦ ⎤ ⎢⎣ ⎡−⎥⎦ ⎤ ⎢⎣ ⎡− 2 1 2 1 s.t.max 其中 1y 和 2y 分别表示对应于约束 bAx ≥ 和 bAx −≥− 的对偶变量组。令 21 yyy −= , 则上式又可写成 cyAyb TT ≤ s.t. max 原问题和对偶的对偶约束之间的关系: min max ⎪⎩ ⎪⎨ ⎧ ≤ ≥ 无限制 变量 0 0 ⎪⎩ ⎪⎨ ⎧ = ≥ ≤ 0 0 0 行约束 ⎪⎩ ⎪⎨ ⎧ = ≤ ≥ 0 0 0 行约束 ⎪⎩ ⎪⎨ ⎧ ≤ ≥ 无限制 变量 0 0 4.2 对偶问题的基本性质 1o 对称性:对偶问题的对偶是原问题。 2o 弱对偶性:若 x 是原问题的可行解, y 是对偶问题的可行解。则存在 ybxc TT ≤ 。 3o 无界性:若原问题(对偶问题)为无界解,则其对偶问题(原问题)无可行解。 4o 可行解是最优解时的性质:设 xˆ 是原问题的可行解, yˆ 是对偶问题的可行解, 当 ybxc TT ˆˆ = 时, yx ˆ,ˆ 是最优解。 5o 对偶定理:若原问题有最优解,那么对偶问题也有最优解;且目标函数值相同。 6o 互补松弛性:若 yx ˆ,ˆ 分别是原问题和对偶问题的最优解,则 0)ˆ(ˆ,0)ˆ(ˆ =−=− cyAxbxAy TTT 例 10 已知线性规划问题 54321 32532min xxxxx ++++=ω s.t. 432 54321 ≥++++ xxxxx -9- 332 54321 ≥+++− xxxxx 5,,2,1,0 L=≥ jx j 已知其对偶问题的最优解为 5;5 3,5 4 * 2 * 1 === zyy 。试用对偶理论找出原问题的最优 解。 解 先写出它的对偶问题 21 34max yyz += 22 21 ≤+ yy ① 321 ≤− yy ② 532 31 ≤+ yy ③ 221 ≤+ yy ④ 33 21 ≤+ yy ⑤ 0, 21 ≥yy 将 * 2 * 1 , yy 的值代入约束条件,得②,③,④为严格不等式;由互补松弛性得 0* 4 * 3 * 2 === xxx 。因 0, * 2 * 1 >yy ;原问题的两个约束条件应取等式,故有 43 * 5 * 1 =+ xx 32 * 5 * 1 =+ xx 求解后得到 1,1 * 5 * 1 == xx ;故原问题的最优解为 5;]'10001[ ** == ωX 。 4.3 灵敏度分析 在以前讨论线性规划问题时,假定 jiij cba ,, 都是常数。但实际上这些系数往往是估 计值和预测值。如市场条件一变, jc 值就会变化; ija 往往是因工艺条件的改变而改变; ib 是根据资源投入后的经济效果决定的一种决策选择。因此提出这样两个问题:当这 些系数有一个或几个发生变化时,已求得的线性规划问题的最优解会有什么变化;或者 这些系数在什么范围内变化时,线性规划问题的最优解或最优基不变。这里我们就不讨 论了。 4.4 参数线性规划 参数线性规划是研究 jiij cba ,, 这些参数中某一参数连续变化时,使最优解发生变化 的各临界点的值。即把某一参数作为参变量,而目标函数在某区间内是这参变量的线性 函数,含这参变量的约束条件是线性等式或不等式。因此仍可用单纯形法和对偶单纯形 法进行分析参数线性规划问题。 §5 投资的收益和风险 5.1 问题提出 市场上有 n 种资产 is ( ni ,,2,1 L= )可以选择,现用数额为 M 的相当大的资金 作一个时期的投资。这 n 种资产在这一时期内购买 is 的平均收益率为 ir ,风险损失率为 iq ,投资越分散,总的风险越少,总体风险可用投资的 is 中最大的一个风险来度量。 -10- 购买 is 时要付交易费,(费率 ip ),当购买额不超过给定值 iu 时,交易费按购买 iu 计算。另外,假定同期银行存款利率是 0r ,既无交易费又无风险。( %50 =r ) 已知 4=n 时相关数据如表 1。 表 1 is ir (%) iq ip (%) iu (元) 1s 28 2.5 1 103 2s 21 1.5 2 198 3s 23 5.5 4.5 52 4s 25 2.6 6.5 40 试给该公司设计一种投资组合方案,即用给定资金 M ,有选择地购买若干种资产 或存银行生息,使净收益尽可能大,使总体风险尽可能小。 5.2 符号规定和基本假设 符号规定: is :第i 种投资项目,如股票,债券 iii qpr ,, :分别为 is 的平均收益率,交易费率,风险损失率 iu : is 的交易定额 0r :同期银行利率 ix :投资项目 is 的资金 a :投资风险度 Q :总体收益 基本假设: 1. 投资数额 M 相当大,为了便于计算,假设 1=M ; 2. 投资越分散,总的风险越小; 3. 总体风险用投资项目 is 中最大的一个风险来度量; 4. n 种资产 is 之间是相互独立的; 5. 在投资的这一时期内, iii qpr ,, , 0r 为定值,不受意外因素影响; 6. 净收益和总体风险只受 iii qpr ,, 影响,不受其它因素干扰。 5.3 模型的分析与建立 1. 总体风险用所投资的 is 中最大的一个风险来衡量,即 },,2,1|max{ nixq ii L= 2.购买 is 所付交易费是一个分段函数,即 交易费 ⎩ ⎨ ⎧ ≤ >= iiii iiii uxup uxxp , , 而题目所给定的定值 iu (单位:元)相对总投资 M 很少, iiup 更小,可以忽略不 计,这样购买 is 的净收益为 iii xpr )( − 。 3. 要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型: -11- 目标函数为 ⎪⎩ ⎪⎨ ⎧ −∑ = }max{min )(max 0 ii n i iii xq xpr 约束条件为 ⎪⎩ ⎪⎨ ⎧ =≥ =+∑ = nix Mxp i n i ii ,,1,0,0 )1( 0 L 4. 模型简化 a) 在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限 a ,使最 大的一个风险 aM xq ii ≤ ,可找到相应的投资方案。这样把多目标规划变成一个目标的线 性规划。 模型一 固定风险水平,优化收益 ∑ = − n i iii xpr 0 )(max s.t. ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =≥=+ ≤ ∑ = n i iii ii nixMxp aM xq 0 ,,1,0,0,)1( L b) 若投资者希望总盈利至少达到水平 k 以上,在风险最小的情况下寻求相应的投 资组合。 模型二 固定盈利水平,极小化风险 }}{{maxmin ii xq s.t. ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =≥=+ ≥− ∑ ∑ = = n i iii n i iii nixMxp kxpr 0 0 ,,1,0,0,)1( )( L c) 投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资 组合。因此对风险、收益分别赋予权重 s( 10 ≤< s )和 )1( s− ,s 称为投资偏好系数。 模型三 ∑ = −−− n i iiiii xprsxqs 0 )()1(}}{max{min s.t. ∑ = =≥=+ n i iii nixMxp 0 ,,2,1,0,0,)1( L 5.4 模型一的求解 模型一为: Txxxxxf ),,,,)(185.0,185.0,19.0,27.0,05.0(min 43210−−−−−= -12- s.t. ⎪⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ =≥ ≤ ≤ ≤ ≤ =++++ )4,,1,0(0 026.0 055.0 015.0 025.0 1065.1045.102.101.1 4 3 2 1 43210 Lix ax ax ax ax xxxxx i 由于 a 是任意给定的风险度,到底怎样没有一个准则,不同的投资者有不同的风险 度。我们从 0=a 开始,以步长 001.0=Δa 进行循环搜索,编制程序如下: clc,clear a=0; hold on while a<0.05 c=[-0.05,-0.27,-0.19,-0.185,-0.185]; A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])]; b=a*ones(4,1); Aeq=[1,1.01,1.02,1.045,1.065]; beq=1; LB=zeros(5,1); [x,Q]=linprog(c,A,b,Aeq,beq,LB); Q=-Q; plot(a,Q,'*r'); a=a+0.001; end xlabel('a'),ylabel('Q') 5.5 结果分析 1. 风险大,收益也大。 2.当投资越分散时,投资者承担的风险越小,这与题意一致。即: 冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资。 3.在 006.0=a 附近有一个转折点,在这一点左边,风险增加很少时,利润增长 很快。在这一点右边,风险增加很大时,利润增长很缓慢,所以对于风险和收益没有特 殊偏好的投资者来说,应该选择曲线的拐点作为最优投资组合,大约是 %6.0=a , %20=Q ,所对应投资方案为: 风险度 006.0=a ,收益 2019.0=Q , 00 =x , 24.01 =x , 4.02 =x , 1091.03 =x , 2212.04 =x 。 习 题 一 1.试将下述问题改写成线性规划问题: ⎭ ⎬ ⎫ ⎩ ⎨ ⎧ ⎟ ⎠ ⎞⎜ ⎝ ⎛ ∑∑∑ === m i iin m i ii m i iix xaxaxa i 11 2 1 1 ,,,minmax L ⎩ ⎨ ⎧ =≥ =+++ mix xxx i m ,,1,0 1st. 21 L L 2.试将下列问题改写成线性规划问题: -13- ∑ = = n j jj xcz 1 ||max ⎪⎩ ⎪⎨ ⎧ ==∑ = 取值无约束j n j ijij x mibxa 1 ),,2,1( st. L 3.线性回归是一种常用的数理统计方法,这个方法要求对图上的一系列点 ),(,),,(),,( 2211 nn yxyxyx L 选配一条合适的直线拟合。方法通常是先定直线方程为 bxay += ,然后按某种准则求定 ba, 。通常这个准则为最小二乘法,但也可用其他准 则。试根据以下准则建立这个问题的线性规划模型: ∑ = +− n i ii bxay 1 |)(|min 4.某厂生产三种产品 I,II,III。每种产品要经过 BA, 两道工序加工。设该厂有 两种规格的设备能完成 A 工序,它们以 21, AA 表示;有三种规格的设备能完成 B 工序, 它们以 321 ,, BBB 表示。产品 I 可在 BA, 任何一种规格设备上加工。产品 II 可在任何规 格的 A 设备上加工,但完成 B 工序时,只能在 1B 设备上加工;产品 III 只能在 2A 与 2B 设备上加工。已知在各种机床设备的单件工时,原材料费,产品销售价格,各种设备有 效台时以及满负荷操作时机床设备的费用如表 2,求安排最优的生产计划,使该厂利润 最大。 表 2 产 品 设备 I II III 设备有效台时 满负荷时的 设备费用(元) 1A 2A 1B 2B 3B 5 7 6 4 7 10 9 8 12 11 6000 10000 4000 7000 4000 300 321 250 783 200 原料费(元/件) 单 价(元/件) 0.25 1.25 0.35 2.00 0.50 2.80 5.有四个工人,要指派他们分别完成 4 项工作,每人做各项工作所消耗的时间如 表 3。 表 3 工作 工人 A B C D 甲 15 18 21 24 乙 19 23 22 18 丙 26 17 16 19 丁 19 21 23 17 问指派哪个人去完成哪项工作,可使总的消耗时间为最小? -14- 6.某战略轰炸机群奉命摧毁敌人军事目标。已知该目标有四个要害部位,只要摧 毁其中之一即可达到目的。为完成此项任务的汽油消耗量限制为 48000 升、重型炸弹 48 枚、轻型炸弹 32 枚。飞机携带重型炸弹时每升汽油可飞行 2 千米,带轻型炸弹时每 升汽油可飞行 3 千米。又知每架飞机每次只能装载一枚炸弹,每出发轰炸一次除来回路 程汽油消耗(空载时每升汽油可飞行 4 千米)外,起飞和降落每次各消耗 100 升。有关 数据如表 4 所示。 表 4 摧毁可能性 要害部位 离机场距离 (千米) 每枚重型弹 每枚轻型弹 1 2 3 4 450 480 540 600 0.10 0.20 0.15 0.25 0.08 0.16 0.12 0.20 为了使摧毁敌方军事目标的可能性最大,应如何确定飞机轰炸的方案,要求建立这个问 题的线性规划模型。 7.用 Matlab 求解下列线性规划问题: 3213max xxxz −−= s.t. ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≥ =+− ≥++− ≤+− 0,, 12 324 112 321 31 321 321 xxx xx xxx xxx 8.用 Matlab 求解下列规划问题: ||4||3||2||min 4321 xxxxz +++= s.t. 04321 =+−− xxxx 13 4321 =−+− xxxx 2 132 4321 −=+−− xxxx 9.一架货机有三个货舱:前舱、中仓和后舱。三个货舱所能装载的货物的最大重 量和体积有限制如表 5 所示。并且为了飞机的平衡,三个货舱装载的货物重量必须与其 最大的容许量成比例。 表 5 货舱数据 前舱 中仓 后舱 重量限制(吨) 10 16 8 体积限制(立方米) 6800 8700 5300 现有四类货物用该货机进行装运,货物的规格以及装运后获得的利润如表 6。 表 6 货物规格及利润表 重量(吨) 空间(立方米/吨) 利润(元/吨) 货物 1 18 480 3100 货物 2 15 650 3800 货物 3 23 580 3500 货物 4 12 390 2850 -15- 假设: (1)每种货物可以无限细分; (2)每种货物可以分布在一个或者多个货舱内; (3)不同的货物可以放在同一个货舱内,并且可以保证不留空隙。 问应如何装运,使货机飞行利润最大? -16- 第二章 整数规划 §1 概论 1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中, 变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适 用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。 1.2 整数规划的分类 如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类: 1o 变量全限制为整数时,称纯(完全)整数规划。 2o 变量部分限制为整数的,称混合整数规划。 1.2 整数规划特点 (i) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况: ①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。 ②整数规划无可行解。 例 1 原线性规划为 21min xxz += 0,0,542 2121 ≥≥=+ xxxx 其最优实数解为: 4 5min,4 5,0 21 === zxx 。 ③有可行解(当然就存在最优解),但最优解值变差。 例 2 原线性规划为 21min xxz += 0,0,642 2121 ≥≥=+ xxxx 其最优实数解为: 2 3min,2 3,0 21 === zxx 。 若限制整数得: 2min,1,1 21 === zxx 。 (ii) 整数规划最优解不能按照实数最优解简单取整而获得。 1.3 求解方法分类: (i)分枝定界法—可求纯或混合整数线性规划。 (ii)割平面法—可求纯或混合整数线性规划。 (iii)隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。 (iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。 (v)蒙特卡洛法—求解各种类型规划。 下面将简要介绍常用的几种求解整数规划的方法。 §2 分枝定界法 对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系 统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子 集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称 为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝, -17- 这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。 分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由 Land Doig 和 Dakin 等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解 整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂 选址问题、背包问题及分配问题等。 设有最大化的整数规划问题 A ,与它相应的线性规划为问题 B ,从解问题 B 开始, 若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A 的最优目标函数 *z 的 上界,记作 z ;而 A 的任意可行解的目标函数值将是 *z 的一个下界 z 。分枝定界法就 是将 B 的可行域分成子区域的方法。逐步减小 z 和增大 z ,最终求到 *z 。现用下例来 说明: 例 3 求解下述整数规划 21 9040Max xxz += ⎪⎩ ⎪⎨ ⎧ ≥ ≤+ ≤+ 且为整数0, 70207 5679 21 21 21 xx xx xx 解 (i)先不考虑整数限制,即解相应的线性规划 B ,得最优解为: 355.8779,8168.1,8092.4 21 === zxx 可见它不符合整数条件。这时 z 是问题 A 的最优目标函数值 *z 的上界,记作 z 。而 0,0 21 == xx 显然是问题 A 的一个整数可行解,这时 0=z ,是 *z 的一个下界,记作 z , 即 3560 * ≤≤ z 。 (ii)因 为 21, xx 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选 1x 进行分枝,把可行集分成 2 个子集: 44.8092][1 =≤x , 514.8092][1 =+≥x 因为 4 与 5 之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这 一步称为分枝。这两个子集的规划及求解如下: 问题 1B : 21 9040Max xxz += ⎪⎩ ⎪⎨ ⎧ ≥≤≤ ≤+ ≤+ 0,40 70207 5679 21 21 21 xx xx xx 最优解为: 349,1.2,0.4 121 === zxx 。 问题 2B : 21 9040Max xxz += ⎪⎩ ⎪⎨ ⎧ ≥≥ ≤+ ≤+ 0,5 70207 5679 21 21 21 xx xx xx 最优解为: 4.341,57.1,0.5 121 === zxx 。 再定界: 3490 * ≤≤ z 。 (iii)对问题 1B 再进行分枝得问题 11B 和 12B ,它们的最优解为 -18- 340,2,4: 112111 === zxxB 327.14,00.3x1.43,: 122112 === zxB 再定界: 341340 * ≤≤ z ,并将 12B 剪枝。 (iv)对问题 2B 再进行分枝得问题 21B 和 22B ,它们的最优解为 083,00.1x5.44,: 222121 === zxB 22B 无可行解。 将 2221,BB 剪枝。 于是可以断定原问题的最优解为: 340,2,4 * 21 === zxx 从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为: 开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问 题 B 。 (i)解问题 B 可能得到以下情况之一: (a) B 没有可行解,这时 A 也没有可行解,则停止. (b) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则 停止。 (c) B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z 。 (ii)用观察法找问题 A 的一个整数可行解,一般可取 njx j ,,1,0 L== ,试探, 求得其目标函数值,并记作 z 。以 *z 表示问题 A 的最优目标函数值;这时有 zzz ≤≤ * 进行迭代。 第一步:分枝,在 B 的最优解中任选一个不符合整数条件的变量 jx ,其值为 jb , 以 ][ jb 表示小于 jb 的最大整数。构造两个约束条件 ][ jj bx ≤ 和 1][ +≥ jj bx 将这两个约束条件,分别加入问题 B ,求两个后继规划问题 1B 和 2B 。不考虑整数条件 求解这两个后继问题。 定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出 最优目标函数值最大者作为新的上界 z 。从已符合整数条件的各分支中,找出目标函数 值为最大者作为新的下界 z ,若无作用 z 不变。 第二步:比较与剪枝,各分枝的最优目标函数中若有小于 z 者,则剪掉这枝,即 以后不再考虑了。若大于 z ,且不符合整数条件,则重复第一步骤。一直到最后得到 zz =* 为止。得最优整数解 njx j ,,1,* L= 。 §3 10 − 型整数规划 10 − 型整数规划是整数规划中的特殊情形,它的变量 jx 仅取值 0 或 1。这时 jx 称 为 10 − 变量,或称二进制变量。 jx 仅取值 0 或 1 这个条件可由下述约束条件: 10 ≤≤ jx ,整数 -19- 所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 10 − 变 量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们 先介绍引入 10 − 变量的实际问题,再研究解法。 3.1 引入 10 − 变量的实际问题 3.1.1 投资场所的选定——相互排斥的计划 例 4 某公司拟在市东、西、南三区建立门市部。拟议中有 7 个位置(点) )7,,2,1( L=iAi 可供选择。规定 在东区。由 321 ,, AAA 三个点中至多选两个; 在西区。由 54 , AA 两个点中至少选一个; 在南区,由 76 , AA 两个点中至少选一个。 如选用 iA 点,设备投资估计为 ib 元,每年可获利润估计为 ic 元,但投资总额不能 超过 B 元。问应选择哪几个点可使年利润为最大? 解题时先引入 10 − 变量 )7,,2,1( L=ixi 令 ⎩ ⎨ ⎧= .0 ,1 点没被选中当 点被选中当 , , iA iA ix 7,,2,1 L=i . 于是问题可列写成: i i i xcz ∑ = = 7 1 Max ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ =≥+ ≥+ ≤++ ≤∑ = 10,1 1 2 76 54 321 7 1 或i i ii xxx xx xxx Bxb 3.1.2 相互排斥的约束条件 有两个相互排斥的约束条件 2445 21 ≤+ xx 或 4537 21 ≤+ xx 。 为了统一在一个问题中,引入 10 − 变量 y ,则上述约束条件可改写为: ⎪⎩ ⎪⎨ ⎧ = −+≤+ +≤+ 10 )1(4537 2445 21 21 或y Myxx yMxx 其中 M 是充分大的数。 约束条件 01 =x 或 800500 1 ≤≤ x 可改写为 ⎩ ⎨ ⎧ = ≤≤ 10 800500 1 或y yxy -20- 如果有 m 个互相排斥的约束条件: mibxaxa inini ,,2,111 LL =≤++ 为了保证这 m 个约束条件只有一个起作用,我们引入 m 个 10 − 变量 ),,2,1( miyi L= 和一个充分大的常数 M ,而下面这一组 1+m 个约束条件 miMybxaxa iinini ,,2,111 LL =+≤++ (1) 11 −=++ myy mL (2) 就合于上述的要求。这是因为,由于(2), m 个 iy 中只有一个能取 0 值,设 0* =iy , 代入(1),就只有 *ii = 的约束条件起作用,而别的式子都是多余的。 3.1.3 关于固定费用的问题(Fixed Cost Problem) 在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并 在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线 性规划来描述,但可改变为混合整数规划来解决,见下例。 例 5 某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产 方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成 本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。 所以必须全面考虑。今设有三种方式可供选择,令 jx 表示采用第 j 种方式时的产量; jc 表示采用第 j 种方式时每件产品的变动成本; jk 表示采用第 j 种方式时的固定成本。 为了说明成本的特点,暂不考虑其它约束条件。采用各种生产方式的总成本分别为 ⎪⎩ ⎪⎨ ⎧ = >+ = 0 ,0 0, j jjjj j x xxck P 当 当 3,2,1=j . 在构成目标函数时,为了统一在一个问题中讨论,现引入 10 − 变量 jy ,令 ⎪⎩ ⎪⎨ ⎧ = = > .0 0 ,0 ,1 时种生产方式,即当不采用第 时,种生产方式,即当采用第 jxj jxj jy (3) 于是目标函数 )()()(min 333322221111 xcykxcykxcykz +++++= (3)式这个规定可表为下述 3 个线性约束条件: 3,2,1, =≤≤ jMyxy jjjε (4) 其中ε 是一个充分小的正常数,M 是个充分大的正常数。(4)式说明,当 0>jx 时 jy 必须为 1;当 0=jx 时只有 jy 为 0 时才有意义,所以(4)式完全可以代替(3)式。 3.2 10 − 型整数规划解法之一(过滤隐枚举法) 解 10 − 型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法, 即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得最优解,这就需要检查 变量取值的 n2 个组合。对于变量个数 n 较大(例如 100>n ),这几乎是不可能的。因 此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的 方法称为隐枚举法(Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对 -21- 有些问题隐枚举法并不适用,所以有时穷举法还是必要的。 下面举例说明一种解 10 − 型整数规划的隐枚举法。 例 6 321 523Max xxxz +−= ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ = ≤+ ≤+ ≤++ ≤−+ 10,, 64 3 44 22 321 32 21 321 321 或xxx xx xx xxx xxx 求解思路及改进措施: (i) 先试探性求一个可行解,易看出 )0,0,1(),,( 321 =xxx 满足约束条件,故为一 个可行解,且 3=z 。 (ii) 因为是求极大值问题,故求最优解时,凡是目标值 3x ,这个条件可以表示为 0)500( 21 =− xx (15) 同理,只有当以 8 千元/吨的价格购买 5002 =x (吨)时,才能以 6 千元/吨的价格购买 )0(3 >x ,于是 0)500( 32 =− xx (16) 此外, 321 ,, xxx 的取值范围是 500,,0 321 ≤≤ xxx (17) 由于有非线性约束(15)、(16),因而(7)~(17)构成非线性规划模型。将该模 型输入 LINGO 软件如下: model: sets: var1/1..4/:y; !这里y(1)=x11,y(2)=x21,y(3)=x12,y(4)=x22; var2/1..3/:x,c; endsets max=4.8*(y(1)+y(2))+5.6*(y(3)+y(4))-@sum(var2:c*x); y(1)+y(3)<@sum(var2:x)+500; y(2)+y(4)<1000; 0.5*(y(1)-y(2))>0; 0.4*y(3)-0.6*y(4)>0; (x(1)-500)*x(2)=0; (x(2)-500)*x(3)=0; @for(var2:@bnd(0,x,500)); data: c=10 8 6; enddata end 可以用菜单命令“LINGO|Options”在“Global Solver”选项卡上启动全局优化选 型,并运行上述程序求得全局最有解:购买 1000 吨原油 A ,与库存的 500 吨原油 A 和 1000 吨原油 B 一起,共生产 2500 吨汽油乙,利润为 5000(千元)。 (2)解法二 引入 0-1 变量将(15)和(16)转化为线性约束。 令 11 =z , 12 =z , 13 =z 分别表示以 10 千元/吨、8 千元/吨、6 千元/吨的价格采 购原油 A ,则约束(15)和(16)可以替换为 -26- 112 500500 zxz ≤≤ , (18) 223 500500 zxz ≤≤ , (19) 33 500zx ≤ , (20) 0,, 321 =zzz 或 1 (21) 式(7)~(14),式(17)~(21)构成混合整数线性规划模型,将它输入 LINGO 软 件如下: model: sets: var1/1..4/:y; !这里y(1)=x11,y(2)=x21,y(3)=x12,y(4)=x22; var2/1..3/:x,z,c; endsets max=4.8*(y(1)+y(2))+5.6*(y(3)+y(4))-@sum(var2:c*x); y(1)+y(3)<@sum(var2:x)+500; y(2)+y(4)<1000; 0.5*(y(1)-y(2))>0; 0.4*y(3)-0.6*y(4)>0; @for(var1(i)|i #lt# 3:500*z(i+1)0; 0.4*y(3)-0.6*y(4)>0; w(1)δ ,使 ),0(),()( δ∈∀<+ txftpxf , 称向量 p 是 f 在点 x 处的下降方向。 设 0, ≠∈ pRx n ,若存在 0>t ,使 Ktpx ∈+ , 称向量 p 是点 x 处关于 K 的可行方向。 一个向量 p ,若既是函数 f 在点 x 处的下降方向,又是该点关于区域 K 的可行方 向,称之为函数 f 在点 x 处关于 K 的可行下降方向。 现在,我们给出用基本迭代格式(1)求解(NP)的一般步骤如下: 0° 选取初始点 0x ,令 0:=k 。 1° 构造搜索方向,依照一定规划,构造 f 在点 kx 处关于 K 的可行下降方向作为 搜索方向 kp 。 2° 寻求搜索步长。以 kx 为起点沿搜索方向 kp 寻求适当的步长 kt ,使目标函数值 有某种意义的下降。 3° 求出下一个迭代点。按迭代格式(1)求出 k k kk ptxx +=+1 。 若 1+kx 已满足某种终止条件,停止迭代。 4° 以 1+kx 代替 kx ,回到 1°步。 1.5 凸函数、凸规划 设 )(xf 为定义在 n 维欧氏空间 )(nE 中某个凸集 R 上的函数,若对任何实数 )10( <<αα 以及 R 中的任意两点 )1(x 和 )2(x ,恒有 )()1()())1(( )2()1()2()1( xfxfxxf αααα −+≤−+ 则称 )(xf 为定义在 R 上的凸函数。 若对每一个 )10( << αα 和 Rxx ∈≠ )2()1( 恒有 )()1()())1(( )2()1()2()1( xfxfxxf αααα −+<−+ 则称 )(xf 为定义在 R 上的严格凸函数。 考虑非线性规划 ⎪⎩ ⎪⎨ ⎧ =≤= ∈ },,2,1,0)(|{ )( min ljxgxR xf j Rx L 假定其中 )(xf 为凸函数, ),,2,1)(( ljxg j L= 为凸函数,这样的非线性规划称为 凸规划。 可以证明,凸规划的可行域为凸集,其局部最优解即为全局最优解,而且其最优 解的集合形成一个凸集。当凸规划的目标函数 )(xf 为严格凸函数时,其最优解必定唯 一(假定最优解存在)。由此可见,凸规划是一类比较简单而又具有重要理论意义的非 -36- 线性规划。 §2 无约束问题 2.1 一维搜索方法 当用迭代法求函数的极小点时,常常用到一维搜索,即沿某一已知方向求目标函数 的极小点。一维搜索的方法很多,常用的有:(1)试探法(“成功—失败”,斐波那契法, 0.618 法等);(2)插值法(抛物线插值法,三次插值法等);(3)微积分中的求根法(切 线法,二分法等)。 考虑一维极小化问题 )(min tf bta ≤≤ (2) 若 )(tf 是 ],[ ba 区间上的下单峰函数,我们介绍通过不断地缩短 ],[ ba 的长度,来 搜索得(2)的近似最优解的两个方法。 为了缩短区间 ],[ ba ,逐步搜索得(2)的最优解 *t 的近似值,我们可以采用以下 途径:在 ],[ ba 中任取两个关于 ],[ ba 是对称的点 1t 和 2t (不妨设 12 tt < ,并把它们叫 做搜索点),计算 )( 1tf 和 )( 2tf 并比较它们的大小。对于单峰函数,若 )()( 12 tftf < , 则必有 ],[ 1 * tat ∈ ,因而 ],[ 1ta 是缩短了的单峰区间;若 )()( 21 tftf < ,则有 ],[ 2 * btt ∈ ,故 ],[ 2 bt 是缩短了的单峰区间;若 )()( 12 tftf = ,则 ],[ 1ta 和 ],[ 2 bt 都是 缩短了的单峰。因此通过两个搜索点处目标函数值大小的比较,总可以获得缩短了的单 峰区间。对于新的单峰区间重复上述做法,显然又可获得更短的单峰区间。如此进行, 在单峰区间缩短到充分小时,我们可以取最后的搜索点作为(2)最优解的近似值。 应该按照怎样的规则来选取探索点,使给定的单峰区间的长度能尽快地缩短? 2.1.1 Fibonacci 法 如用 nF 表示计算 n 个函数值能缩短为单位长区间的最大原区间长度,可推出 nF 满 足关系 110 == FF ,,3,2,12 L=+= −− nFFF nnn 数列 }{ nF 称为 Fibonacci 数列, nF 称为第 n 个 Fibonacci 数,相邻两个 Fibonacci 数之 比 n n F F 1− 称为 Fibonacci 分数。 当用斐波那契法以 n 个探索点来缩短某一区间时,区间长度的第一次缩短率为 n n F F 1− ,其后各次分别为 2 1 2 3 1 2 ,,, F F F F F F n n n n L − − − − 。由此,若 1t 和 )( 122 ttt < 是单峰区间 ],[ ba 中第 1 个和第 2 个探索点的话,那么应有比例关系 n n F F ab at 11 −=− − , n n F F ab at 22 −=− − 从而 )(1 1 abF Fat n n −+= − , )(2 2 abF Fat n n −+= − (3) 它们关于 ],[ ba 确是对称的点。 -37- 如果要求经过一系列探索点搜索之后,使最后的探索点和最优解之间的距离不超 过精度 0>δ ,这就要求最后区间的长度不超过δ ,即 δ≤− nF ab (4) 据此,我们应按照预先给定的精度δ ,确定使(4)成立的最小整数 n 作为搜索次数, 直到进行到第 n 个探索点时停止。 用上述不断缩短函数 )(tf 的单峰区间 ],[ ba 的办法,来求得问题(2)的近似解, 是 Kiefer(1953 年)提出的,叫做 Finbonacci 法,具体步骤如下: o1 选取初始数据,确定单峰区间 ],[ 00 ba ,给出搜索精度 0>δ ,由(4)确定搜 索次数 n 。 o2 00 ,,1 bbaak === ,计算最初两个搜索点,按(3)计算 1t 和 2t 。 o3 while 1−< nk )(),( 2211 tfftff == if 21 ff < )()( )1(;; 1122 abknF knFatttta −− −−+=== else )()( )1(;; 2211 baknF knFbttttb −− −−+=== end 1+= kk end o4 当进行至 1−= nk 时, )(2 1 21 batt +== 这就无法借比较函数值 )( 1tf 和 )( 2tf 的大小确定最终区间,为此,取 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ −++= += ))(2 1( )(2 1 1 2 abat bat ε 其中ε 为任意小的数。在 1t 和 2t 这两点中,以函数值较小者为近似极小点,相应的函数 值为近似极小值。并得最终区间 ],[ 1ta 或 ],[ 2 bt 。 由上述分析可知,斐波那契法使用对称搜索的方法,逐步缩短所考察的区间,它能 以尽量少的函数求值次数,达到预定的某一缩短率。 例 3 试用斐波那契法求函数 2)( 2 +−= tttf 的近似极小点,要求缩短后的区间 不大于区间 ]3,1[− 的 0.08 倍。 程序留作习题。 2.1.2 0.618 法 若 0>ω ,满足比例关系 -38- ω ωω −= 1 1 称之为黄金分割数,其值为 L6180339887.02 15 =−=ω 。 黄金分割数ω 和 Fibonacci 分数之间有着重要的关系 n n n F F 1lim − ∞→ =ω 。 现用不变的区间缩短率 0.618,代替斐波那契法每次不同的缩短率,就得到了黄金 分割法(0.618 法)。这个方法可以看成是斐波那契法的近似,实现起来比较容易,效果 也相当好,因而易于为人们所接受。 用 0.618 法求解,从第 2 个探索点开始每增加一个探索点作一轮迭代以后,原单 峰区间要缩短 0.618 倍。计算 n 个探索点的函数值可以把原区间 ],[ 00 ba 连续缩短 1−n 次,因为每次的缩短率均为 μ ,故最后的区间长度为 1 00 )( −− nab μ 这就是说,当已知缩短的相对精度为δ 时,可用下式计算探索点个数 n : δμ ≤−1n 当然,也可以不预先计算探索点的数目 n ,而在计算过程中逐次加以判断,看是否已满 足了提出的精度要求。 0.618 法是一种等速对称进行试探的方法,每次的探索点均取在区间长度的 0.618 倍和 0.382 倍处。 2.2 二次插值法 对极小化问题(2),当 )(tf 在 ],[ ba 上连续时,可以考虑用多项式插值来进行一 维搜索。它的基本思想是:在搜索区间中,不断用低次(通常不超过三次)多项式来近 似目标函数,并逐步用插值多项式的极小点来逼近(2)的最优解。 2.3 无约束极值问题的解法 无约束极值问题可表述为 )(),( min nExxf ∈ (5) 求解问题(5)的迭代法大体上分为两点:一是用到函数的一阶导数或二阶导数, 称为解析法。另一是仅用到函数值,称为直接法。 2.3.1 解析法 2.3.1.1 梯度法(最速下降法) 对基本迭代格式 k k kk ptxx +=+1 (6) 我们总是考虑从点 kx 出发沿哪一个方向 kp ,使目标函数 f 下降得最快。微积分的知识 告诉我们,点 kx 的负梯度方向 )( kk xfp −∇= , 是从点 kx 出发使 f 下降最快的方向。为此,称负梯度方向 )( kxf∇− 为 f 在点 kx 处的 最速下降方向。 -39- 按基本迭代格式(6),每一轮从点 kx 出发沿最速下降方向 )( kxf∇− 作一维搜索, 来建立求解无约束极值问题的方法,称之为最速下降法。 这个方法的特点是,每轮的搜索方向都是目标函数在当前点下降最快的方向。同 时,用 0)( =∇ kxf 或 ε≤∇ )( kxf 作为停止条件。其具体步骤如下: 1°选取初始数据。选取初始点 0x ,给定终止误差,令 0:=k 。 2°求梯度向量。计算 )( kxf∇ , 若 ε≤∇ )( kxf ,停止迭代,输出 kx 。否则, 进行 3°。 3° 构造负梯度方向。取 )( kk xfp −∇= . 4° 进行一维搜索。求 kt ,使得 )(min)( 0 kk t k k k tpxfptxf +=+ ≥ 令 ,1:,1 +=+=+ kkptxx k k kk 转 2°。 例 4 用最速下降法求解无约束非线性规划问题 2 2 2 1 25)(min xxxf += 其中 Txxx ),( 21= ,要求选取初始点 Tx )2,2(0 = 。 解 (i) Txxxf )50,2()( 21=∇ 编写 M 文件 detaf.m,定义函数 )(xf 及其梯度列向量如下 function [f,df]=detaf(x); f=x(1)^2+25*x(2)^2; df=[2*x(1) 50*x(2)]; (ii)编写主程序文件zuisu.m如下: clc x=[2;2]; [f0,g]=detaf(x); while norm(g)>0.000001 p=-g/norm(g); t=1.0;f=detaf(x+t*p); while f>f0 t=t/2; f=detaf(x+t*p); end x=x+t*p; [f0,g]=detaf(x); end x,f0 2.3.1.2 Newton 法 考虑目标函数 f 在点 kx 处的二次逼近式 ))(()(2 1 )()()()()( 2 kkTkkTkk xxxfxxxxxfxfxQxf −∇−+−∇+=≈ 假定 Hesse 阵 -40- ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂∂ ∂ ∂∂ ∂ ∂ ∂ =∇ 2 2 1 2 1 2 2 1 2 2 )()( )()( )( n k n k n kk k x xf xx xf xx xf x xf xf L MLM L 正定。 由于 )(2 kxf∇ 正定,函数Q 的驻点 1+kx 是 )(xQ 的极小点。为求此极小点,令 0))(()()( 121 =−∇+∇=∇ ++ kkkkk xxxfxfxQ , 即可解得 )()]([ 121 kkkk xfxfxx ∇∇−= −+ . 对照基本迭代格式(1),可知从点 kx 出发沿搜索方向。 )()]([ 12 kkk xfxfp ∇∇−= − 并取步长 1=kt 即可得 )(xQ 的最小点 1+kx 。通常,把方向 kp 叫做从点 kx 出发的 Newton 方向。从一初始点开始,每一轮从当前迭代点出发,沿 Newton 方向并取步长 为 1 的求解方法,称之为 Newton 法。其具体步骤如下: 1°选取初始数据。选取初始点 0x ,给定终止误差 0>ε ,令 0:=k 。 2°求梯度向量。计算 )( kxf∇ ,若 ε≤∇ )( kxf ,停止迭代,输出 kx 。否则, 进行 3°。 3°构造 Newton 方向。计算 12 )]([ −∇ kxf ,取 )()]([ 12 kkk xfxfp ∇∇−= − . 4° 求下一迭代点。令 1:,1 +=+=+ kkpxx kkk ,转 2°。 例 5 用 Newton 法求解, 2 2 2 1 4 2 4 1 25)(min xxxxxf ++= 选取 Tx )2,2(0 = 。 解:(i) Txxxxxxxf ]210024[)( 2 2 1 3 2 2 21 3 1 ++=∇ ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ + +=∇ 2 1 2 221 21 2 2 2 12 23004 4212 xxxx xxxxf (ii)编写 M 文件 nwfun.m 如下: function [f,df,d2f]=nwfun(x); f=x(1)^4+25*x(2)^4+x(1)^2*x(2)^2; df=[4*x(1)^3+2*x(1)*x(2)^2;100*x(2)^3+2*x(1)^2*x(2)]; d2f=[2*x(1)^2+2*x(2)^2,4*x(1)*x(2) 4*x(1)*x(2),300*x(2)^2+2*x(1)^2]; (III)编写主程序文件 example5.m 如下: clc x=[2;2]; [f0,g1,g2]=nwfun(x); while norm(g1)>0.00001 p=-inv(g2)*g1; x=x+p; -41- [f0,g1,g2]=nwfun(x); end x, f0 如果目标函数是非二次函数,一般地说,用 Newton 法通过有限轮迭代并不能保证 可求得其最优解。 为了提高计算精度,我们在迭代时可以采用变步长计算上述问题,编写主程序文件 example5_2 如下: clc,clear x=[2;2]; [f0,g1,g2]=nwfun(x); while norm(g1)>0.00001 p=-inv(g2)*g1;p=p/norm(p); t=1.0;f=nwfun(x+t*p); while f>f0 t=t/2;f=nwfun(x+t*p); end x=x+t*p; [f0,g1,g2]=nwfun(x); end x,f0 Newton 法的优点是收敛速度快;缺点是有时不好用而需采取改进措施,此外,当 维数较高时,计算 12 )]([ −∇− kxf 的工作量很大。 2.3.1.3 变尺度法 变尺度法(Variable Metric Algorithm)是近 20 多年来发展起来的,它不仅是求解 无约束极值问题非常有效的算法,而且也已被推广用来求解约束极值问题。由于它既避 免了计算二阶导数矩阵及其求逆过程,又比梯度法的收敛速度快,特别是对高维问题具 有显著的优越性,因而使变尺度法获得了很高的声誉。下面我们就来简要地介绍一种变 尺度法—DFP 法的基本原理及其计算过程。这一方法首先由 Davidon 在 1959 年提出, 后经 Fletcher 和 Powell 加以改进。 我们已经知道,牛顿法的搜索方向是 )()]([ 12 kk xfxf ∇∇− − ,为了不计算二阶 导数矩阵 )]([ 2 kxf∇ 及其逆阵,我们设法构造另一个矩阵,用它来逼近二阶导数矩阵 的逆阵 12 )]([ −∇ kxf ,这一类方法也称拟牛顿法(Quasi-Newton Method)。 下面研究如何构造这样的近似矩阵,并将它记为 )(kH 。我们要求:每一步都能以 现有的信息来确定下一个搜索方向;每做一次选代,目标函数值均有所下降;这些近似 矩阵最后应收敛于解点处的 Hesse 阵的逆阵。 当 )(xf 是二次函数时,其 Hesse 阵为常数阵 A ,任两点 kx 和 1+kx 处的梯度之差为 )()()( 11 kkkk xxAxfxf −=∇−∇ ++ 或 )]()([ 111 kkkk xfxfAxx ∇−∇=− +−+ 对于非二次函数,仿照二次函数的情形,要求其 Hesse 阵的逆阵的第 1+k 次近似 矩阵 )1( +kH 满足关系式 )]()([ 1)1(1 kkkkk xfxfHxx ∇−∇=− +++ (7) -42- 这就是常说的拟 Newton 条件。 若令 ⎩ ⎨ ⎧ −=Δ ∇−∇=Δ + + kkk kkk xxx xfxfG 1 1)( )()( (8) 则式(7)变为 )()1( kkk GHx Δ=Δ + , (9) 现假定 )(kH 已知,用下式求 )1( +kH (设 )(kH 和 )1( +kH 均为对称正定阵); )()()1( kkk HHH Δ+=+ (10) 其中 )(kHΔ 称为第 k 次校正矩阵。显然, )1( +kH 应满足拟 Newton 条件(9),即要求 )()()( )( kkkk GHHx ΔΔ+=Δ 或 )()()()( kkkkk GHxGH Δ−Δ=ΔΔ (11) 由此可以设想, )(kHΔ 的一种比较简单的形式是 TkkkTkkk WGHQxH )()( )()()()()( Δ−Δ=Δ (12) 其中 )(kQ 和 )(kW 为两个待定列向量。 将式(12)中的 )(kHΔ 代入(11),得 )()()()()()()()( )()( kkkkTkkkkTkk GHxGWGHGQx Δ−Δ=ΔΔ−ΔΔ 这说明,应使 1)()( )()()()( =Δ=Δ kTkkTk GWGQ (13) 考虑到 )(kHΔ 应为对称阵,最简单的办法就是取 ⎪⎩ ⎪⎨ ⎧ Δ= Δ= )()()( )( kk k k k k k GHW xQ ξ η (14) 由式(13)得 1)()( )()()()( =ΔΔ=ΔΔ kkTk k kTk k GHGGx ξη (15) 若 )()( kTk Gx ΔΔ 和 )()()( )( kkTk GHG ΔΔ 不等于零,则有 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ΔΔ= ΔΔ=ΔΔ= )()()( )()( )( 1 )( 1 )( 1 kkTkk kTkkTkk GHG xGGx ξ η (16) 于是,得校正矩阵 )()()( )()()()( )( )( )( )( )( )( kkTk kTkkk kTk Tkk k GHG HGGH xG xxH ΔΔ ΔΔ−ΔΔ ΔΔ=Δ (17) 从而得到 )()()( )()()()( )( )()1( )( )( )( )( kkTk kTkkk kTk Tkk kk GHG HGGH xG xxHH ΔΔ ΔΔ−ΔΔ ΔΔ+=+ (18) 上述矩阵称为尺度矩阵。通常,我们取第一个尺度矩阵 )0(H 为单位阵,以后的尺度矩 -43- 阵按式(18)逐步形成。可以证明: (i)当 kx 不是极小点且 )(kH 正定时,式(17)右端两项的分母不为零,从而可 按式(18)产生下一个尺度矩阵 )1( +kH ; (ii)若 )(kH 为对称正定阵,则由式(18)产生的 )1( +kH 也是对称正定阵; (iii)由此推出 DFP 法的搜索方向为下降方向。 现将 DFP 变尺度法的计算步骤总结如下。 1°给定初始点 0x 及梯度允许误差 0>ε 。 2°若 ε≤∇ )( 0xf ,则 0x 即为近似极小点,停止迭代,否则,转向下一步。 3°令 IH =)0( (单位矩阵), )( 0)0(0 xfHp ∇−= 在 0p 方向进行一维搜索,确定最佳步长 0λ : )()(min 0 0 000 pxfpxf λλ λ +=+ 如此可得下一个近似点 0 0 01 pxx λ+= 4°一般地,设已得到近似点 kx ,算出 )( kxf∇ ,若 ε≤∇ )( 0xf 则 kx 即为所求的近似解,停止迭代;否则,计算 )(kH : )1()1()1( )1()1()1()1( 1)1( 11 )1()( )( )( )( )( −−− −−−− −− −− − ΔΔ ΔΔ−ΔΔ ΔΔ+= kkTk kTkkk kTk Tkk kk GHG HGGH xG xxHH 并令 )()( kkk xfHp ∇−= ,在 kp 方向上进行一维搜索,得 kλ ,从而可得下一个近似点 k k kk pxx λ+=+1 5°若 1+kx 满足精度要求,则 1+kx 即为所求的近似解,否则,转回 4°,直到求 出某点满足精度要求为止。 2.3.2 直接法 在无约束非线性规划方法中,遇到问题的目标函数不可导或导函数的解析式难以 表示时,人们一般需要使用直接搜索方法。同时,由于这些方法一般都比较直观和易于 理解,因而在实际应用中常为人们所采用。下面我们介绍 Powell 方法。 这个方法主要由所谓基本搜索、加速搜索和调整搜索方向三部分组成,具体步骤 如下: 1° 选取初始数据。选取初始点 0x , n 个线性无关初始方向,组成初搜索方向组 },,,{ 110 −nppp L 。给定终止误差 0>ε ,令 0:=k 。 2°进行基本搜索。令 kxy =:0 ,依次沿 },,,{ 110 −nppp L 中的方向进行一维搜 索。对应地得到辅助迭代点 nyyy ,,, 21 L ,即 1 1 1 − − − += j j jj ptyy njtpyfptyf jj t j j j ,,1),(min)( 11 0 1 1 1 L=+=+ −− ≥ − − − -44- 3°构造加速方向。令 0yyp nn −= ,若 ε≤np ,停止迭代,输出 nk yx =+1 。 否则进行 4°。 4°确定调整方向。按下式 }1|)()(max{)()( 11 njyfyfyfyf jjmm ≤≤−=− −− 找出 m 。若 )]()([2)2()(2)( 100 mmnn yfyfyyfyfyf −<−+− − 成立,进行 5°。否则,进行 6°。 5°调整搜索方向组。令 )(min)(: 0 1 nn t n n nn n nk tpyfptyfptyx +=++= ≥ + . 同时,令 },,,,,,{:},,,{ 1110 1 110 nnmm k n pppppppp −+− + + = LLL , 1: += kk ,转 2°。 6°不调整搜索方向组。令 1:,:1 +==+ kkyx nk ,转 2°。 2.4 Matlab 求无约束极值问题 在 Matlab 工具箱中,用于求解无约束极值问题的函数有 fminunc 和 fminsearch,用 法介绍如下。 求函数的极小值 , )(min xf x 其中 x 可以为标量或向量。 Matlab 中 fminunc 的基本命令是 [X,FVAL]=FMINUNC(FUN,X0,OPTIONS,P1,P2, ...) 其中的返回值 X 是所求得的极小点,FVAL 是函数的极小值,其它返回值的含义参见相 关的帮助。FUN 是一个 M 文件,当 FUN 只有一个返回值时,它的返回值是函数 )(xf ; 当 FUN 有两个返回值时,它的第二个返回值是 )(xf 的梯度向量;当 FUN 有三个返回 值时,它的第三个返回值是 )(xf 的二阶导数阵(Hessian 阵)。X0 是向量 x 的初始值, OPTIONS 是优化参数,可以使用缺省参数。P1,P2 是可以传递给 FUN 的一些参数。 例 6 求函数 2 1 22 12 )1()(100)( xxxxf −+−= 的最小值。 解:编写 M 文件 fun2.m 如下: function [f,g]=fun2(x); f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; g=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)]; 编写主函数文件example6.m如下: options = optimset('GradObj','on'); [x,y]=fminunc('fun2',rand(1,2),options) 即可求得函数的极小值。 在求极值时,也可以利用二阶导数,编写 M 文件 fun3.m 如下: function [f,df,d2f]=fun3(x); f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; df=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)]; d2f=[-400*x(2)+1200*x(1)^2+2,-400*x(1) -400*x(1),200]; -45- 编写主函数文件example62.m如下: options = optimset('GradObj','on','Hessian','on'); [x,y]=fminunc('fun3',rand(1,2),options) 即可求得函数的极小值。 求多元函数的极值也可以使用 Matlab 的 fminsearch 命令,其使用格式为: [X,FVAL,EXITFLAG,OUTPUT]=FMINSEARCH(FUN,X0,OPTIONS,P1,P2,...) 例 7 求函数 3)sin()( += xxf 取最小值时的 x 值。 解 编写 )(xf 的 M 文件 fun4.m 如下: function f=fun4(x); f=sin(x)+3; 编写主函数文件example7.m如下: x0=2; [x,y]=fminsearch(@fun4,x0) 即求得在初值 2 附近的极小点及极小值。 §3 约束极值问题 带有约束条件的极值问题称为约束极值问题,也叫规划问题。 求解约束极值问题要比求解无约束极值问题困难得多。为了简化其优化工作,可采 用以下方法:将约束问题化为无约束问题;将非线性规划问题化为线性规划问题,以及 能将复杂问题变换为较简单问题的其它方法。 库恩—塔克条件是非线性规划领域中最重要的理论成果之一,是确定某点为最优点 的必要条件,但一般说它并不是充分条件(对于凸规划,它既是最优点存在的必要条件, 同时也是充分条件)。 3.1 二次规划 若某非线性规划的目标函数为自变量 x 的二次函数,约束条件又全是线性的,就称 这种规划为二次规划。 Matlab 中二次规划的数学模型可表述如下: ,2 1min xfHxx TT + s.t. ⎩ ⎨ ⎧ =⋅ ≤ beqxAeq bAx 这里 H 是实对称矩阵, bf , 是列向量, A 是相应维数的矩阵。 Matlab 中求解二次规划的命令是 [X,FVAL]= QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 返回值 X 是决策向量 x 的值,返回值 FVAL 是目标函数在 x 处的值。(具体细节可以参 看在 Matlab 指令中运行 help quadprog 后的帮助)。 例 8 求解二次规划 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≥ ≤+ ≤+ −−+−= 0, 94 3 36442)(min 21 21 21 21 2 221 2 1 xx xx xx xxxxxxxf 解 编写如下程序: -46- h=[4,-4;-4,8]; f=[-6;-3]; a=[1,1;4,1]; b=[3;9]; [x,value]=quadprog(h,f,a,b,[],[],zeros(2,1)) 求得 1.02501)( Min, 0500.1 9500.1 −=⎥⎦ ⎤ ⎢⎣ ⎡= xfx 。 3.2 罚函数法 利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题, 因而也称这种方法为序列无约束最小化技术,简记为 SUMT (Sequential Unconstrained Minization Technique)。 罚函数法求解非线性规划问题的思想是,利用问题中的约束函数作出适当的罚函 数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划问题。主要有 两种形式,一种叫外罚函数法,另一种叫内罚函数法,下面介绍外罚函数法。 考虑问题: )(min xf s.t. ⎪⎩ ⎪⎨ ⎧ == =≥ =≤ ,,1,0)( s,,1,,0)( ,,,1 ,0)( tmxk jxh rixg m j i L L L 取一个充分大的数 0>M ,构造函数 ∑∑∑ === +−+= t i i s i i r i i xkMxhMxgMxfMxP 111 |)(|)0),(min()0),(max()(),( (或 ||)(||0 )(minsum0 )(maxsum)(),( xKMxHMxGMxfMxP +⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛−⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛+= 这里 [])()()( 1 xgxgxG rL= , [ ])()()( 1 xhxhxH sL= , [])()()( 1 tkxkxK tL= ,Matlab 中可以直接利用 max 、min 和 sum 函数。)则以 增广目标函数 ),( MxP 为目标函数的无约束极值问题 ),(min MxP 的最优解 x 也是原问题的最优解。 例 9 求下列非线性规划 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ ≥ =+−− ≥− ++= .0, 02 0 8)(min 21 2 21 2 2 1 2 2 2 1 xx xx xx xxxf 解 (i)编写 M 文件 test.m function g=test(x); M=50000; f=x(1)^2+x(2)^2+8; g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)^2-x(2),0)+... -47- M*abs(-x(1)-x(2)^2+2); 或者是利用Matlab的求矩阵的极小值和极大值函数编写test.m如下: function g=test(x); M=50000; f=x(1)^2+x(2)^2+8; g=f-M*sum(min([x';zeros(1,2)]))-M*min(x(1)^2-x(2),0)+... M*abs(-x(1)-x(2)^2+2); 我们也可以修改罚函数的定义,编写test.m如下: function g=test(x); M=50000; f=x(1)^2+x(2)^2+8; g=f-M*min(min(x),0)-M*min(x(1)^2-x(2),0)+M*(-x(1)-x(2)^2+2)^2; (ii)在 Matlab 命令窗口输入 [x,y]=fminunc('test',rand(2,1)) 即可求得问题的解。 3.3 Matlab 求约束极值问题 在 Matlab 优化工具箱中,用于求解约束最优化问题的函数有:fminbnd、fmincon、 quadprog、fseminf、fminimax,上面我们已经介绍了函数 fmincon 和 quadprog。 3.3.1 fminbnd 函数 求单变量非线性函数在区间上的极小值 ],[ , )(min 21 xxxxf x ∈ Matlab 的命令为 [X,FVAL] = FMINBND(FUN,x1,x2,OPTIONS), 它的返回值是极小点 x 和函数的极小值。这里 fun 是用 M 文件定义的函数或 Matlab 中 的单变量数学函数。 例 10 求函数 ]5,0[ ,1)3()( 2 ∈−−= xxxf 的最小值。 解 编写 M 文件 fun5.m function f=fun5(x); f=(x-3)^2-1; 在 Matlab 的命令窗口输入 [x,y]=fminbnd('fun5',0,5) 即可求得极小点和极小值。 3.3.2 fseminf 函数 求 }0),(,0)(,0)(|)({min ≤=≤ wxPHIxCeqxCxF x ⎩ ⎨ ⎧ = ≤ BeqxAeq BxA * * s.t. 其中 ),(),(),( wxPHIxCeqxC 都是向量函数; w 是附加的向量变量, w 的每个分量都 限定在某个区间内。 上述问题的 Matlab 命令格式为 X=FSEMINF(FUN,X0,NTHETA,SEMINFCON,A,B,Aeq,Beq) 其中 FUN 用于定义目标函数 )(xF ;X0 为 x 的初始值;NTHETA 是半无穷约束 ),( wxPHI 的个数;函数 SEMINFCON 用于定义非线性不等式约束 )(xC ,非线性等 -48- 式约束 )(xCeq 和半无穷约束 ),( wxPHI 的每一个分量函数,函数 SEMINFCON 有两个 输入参量 X 和 S,S 是推荐的取样步长,也许不被使用。 例 11 求函数 2 3 2 2 2 1 )5.0()5.0()5.0()( −+−+−= xxxxf 取最小值时的 x 值, 约束为: 1)sin()50(1000 1)cos()sin(),( 331 2 1211111 ≤−−−−= xxwwxwxwwxK 1)sin()50(1000 1)cos()sin(),( 332 2 2122222 ≤−−−−= xxwwxwxwwxK 1001 1 ≤≤ w , 1001 2 ≤≤ w 解 (1)编写 M 文件 fun6.m 定义目标函数如下: function f=fun6(x,s); f=sum((x-0.5).^2); (2)编写 M 文件 fun7.m 定义约束条件如下: function [c,ceq,k1,k2,s]=fun7(x,s); c=[];ceq=[]; if isnan(s(1,1)) s=[0.2,0;0.2 0]; end %取样值 w1=1:s(1,1):100; w2=1:s(2,1):100; %半无穷约束 k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1; k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1; %画出半无穷约束的图形 plot(w1,k1,'-',w2,k2,'+'); (3)调用函数 fseminf 在 Matlab 的命令窗口输入 [x,y]=fseminf(@fun6,rand(3,1),2,@fun7) 即可。 3.3.3 fminimax 函数 求解 ⎭⎬⎫ ⎩⎨⎧ )(maxmin xF iFx ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ ≤≤ = ≤ = ≤ UBxLB xCeq xC BeqxAeq bxA 0)( 0)( * * .s.t 其中 )}(,),({)( 1 xFxFxF mL= 。 上述问题的 Matlab 命令为 X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON) -49- 例 12 求函数族 )}(),(),(),(),({ 54321 xfxfxfxfxf 取极大极小值时的 x 值。其中: ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ −+= −−= −+= −−= +−−+= 8)( )( 183)( 3)( 30440482)( 215 214 213 2 2 2 12 21 2 2 2 11 xxxf xxxf xxxf xxxf xxxxxf 解 (1)编写 M 文件 fun8.m 定义向量函数如下: function f=fun8(x); f=[2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304 -x(1)^2-3*x(2)^2 x(1)+3*x(2)-18 -x(1)-x(2) x(1)+x(2)-8]; (2)调用函数 fminimax [x,y]=fminimax(@fun8,rand(2,1)) 3.3.4 利用梯度求解约束优化问题 例 13 已知函数 )12424()( 221 2 2 2 1 1 ++++= xxxxxexf x ,且满足非线性约束: ⎩ ⎨ ⎧ −≥ −≤−− 10 5.1 21 2121 xx xxxx 求 )(min xf x 分析:当使用梯度求解上述问题时,效率更高并且结果更准确。 题目中目标函数的梯度为: ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ++ +++++ )244( )168424( 21 2121 2 2 2 1 1 1 xxe xxxxxxe x x 解 (1)编写 M 文件 fun9.m 定义目标函数及梯度函数: function [f,df]=fun9(x); f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); df=[exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+8*x(1)+6*x(2)+1);exp(x(1))*(4*x(2) +4*x(1)+2)]; (2)编写 M 文件 fun10.m 定义约束条件及约束条件的梯度函数: function [c,ceq,dc,dceq]=fun10(x); c=[x(1)*x(2)-x(1)-x(2)+1.5;-x(1)*x(2)-10]; dc=[x(2)-1,-x(2);x(1)-1,-x(1)]; ceq=[];dceq=[]; (3)调用函数 fmincon,编写主函数文件 example13.m 如下: %采用标准算法 options=optimset('largescale','off'); %采用梯度 options=optimset(options,'GradObj','on','GradConstr','on'); [x,y]=fmincon(@fun9,rand(2,1),[],[],[],[],[],[],@fun10,options) -50- 3.4 Matlab 优化工具箱的用户图形界面解法 Matlab 优化工具箱中的 optimtool 命令提供了优化问题的用户图形界面解法。 optimtool 可应用到所有优化问题的求解,计算结果可以输出到 Matlab 工作空间中。 图 1 优化问题用户图形界面解法示意图 例 14 用 optimtool 重新求解例 1。 利用例 1 已经定义好的函数 fun1 和 fun2。在 Matlab 命令窗口运行 optimtool,就 打 开图形界面,如图 1 所示,填入有关的参数,未填入的参数取值为空或者为默认值,然 后用鼠标点一下“start”按钮,就得到求解结果,再使用“file”菜单下的“Export to Workspace…”选项,把计算结果输出到 Matlab 工作空间中去。 §4 飞行管理问题 在约 10,000m 高空的某边长 160km 的正方形区域内,经常有若干架飞机作水平 飞行。区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。 当一架欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会 与区域内的飞机发生碰撞。如果会碰撞,则应计算如何调整各架(包括新进入的)飞机 飞行的方向角,以避免碰撞。现假定条件如下: 1)不碰撞的标准为任意两架飞机的距离大于 8km; 2)飞机飞行方向角调整的幅度不应超过 30 度; 3)所有飞机飞行速度均为每小时 800km; 4)进入该区域的飞机在到达区域边缘时,与区域内飞机的距离应在 60km 以上; 5)最多需考虑 6 架飞机; 6)不必考虑飞机离开此区域后的状况。 请你对这个避免碰撞的飞行管理问题建立数学模型,列出计算步骤,对以下数据进 行计算(方向角误差不超过 0.01 度),要求飞机飞行方向角调整的幅度尽量小。 设该区域 4 个顶点的座标为(0,0),(160,0),(160,160),(0,160)。记录数据见表 1。 -51- 表 1 飞行记录数据 飞机编号 横座标 x 纵座标 y 方向角(度) 1 150 140 243 2 85 85 236 3 150 155 220.5 4 145 50 159 5 130 150 230 新进入 0 0 52 注:方向角指飞行方向与 x 轴正向的夹角。 为方便以后的讨论,我们引进如下记号: D 为飞行管理区域的边长; Ω 为飞行管理区域,取直角坐标系使其为 ],0[],0[ DD × ; a 为飞机飞行速度, 800=a km/h; ),( 00 ii yx 为第i 架飞机的初始位置; ))(),(( tytx ii 为第i 架飞机在t 时刻的位置; 0 iθ 为第i 架飞机的原飞行方向角,即飞行方向与 x 轴夹角, πθ 20 0 <≤ i ; iθΔ 为第i 架飞机的方向角调整, 66 πθπ ≤Δ≤− i ; iii θθθ Δ+= 0 为第i 架飞机调整后的飞行方向角。 4.1 模型一 根据相对运动的观点在考察两架飞机i 和 j 的飞行时,可以将飞机i 视为不动而飞 机 j 以相对速度 )sinsin,coscos( ijijijij aaaavvv θθθθ −−=−= (19) 相对于飞机i 运动,对(19)式进行适当的化约可得 )2cos,2sin(2sin2 ijijijav θθθθθθ ++−−= ))22cos(),22(cos(2sin2 ijijija θθπθθπθθ ++++−= (20) 不妨设 ij θθ ≥ ,此时相对飞行方向角为 22 ji ij θθπβ ++= ,见图 2。 图 2 相对飞行方向角 由于两架飞机的初始距离为 200200 )()()0( jijiij yyxxr −+−= (21) -52- )0( 8arcsin0 ij ij r=α (22) 则只要当相对飞行方向角 ijβ 满足 00 2 ijijij απβα −<< (23) 时,两架飞机不可能碰撞(见图 2)。 记 0 ijβ 为调整前第 j 架飞机相对于第i 架飞机的相对速度(矢量)与这两架飞机连 线(从 j 指向i 的矢量)的夹角(以连线矢量为基准,逆时针方向为正,顺时针方向为 负)。则由式(23)知,两架飞机不碰撞的条件为 00 )(2 1 ijjiij αθθβ >Δ+Δ+ (24) 其中 0 mnβ =相对速度 mnv 的幅角-从 n 指向 m 的连线矢量的幅角 )()(arg nnmm ii iyxiyx ee mn +−+ −= θθ (注意 0 mnβ 表达式中的i 表示虚数单位)这里我们利用复数的幅角,可以很方便地计算 角度 0 mnβ ( 6,,2,1, L=nm )。 本问题中的优化目标函数可以有不同的形式:如使所有飞机的最大调整量最小; 所有飞机的调整量绝对值之和最小等。这里以所有飞机的调整量绝对值之和最小为目标 函数,可以得到如下的数学规划模型: ∑ = Δ 6 1 min i iθ s.t. 00 )(2 1 ijjiij αθθβ >Δ+Δ+ , 6,,2,1, L=ji , ji ≠ o30≤Δ iθ , 6,,2,1 L=i 利用如下的程序: clc,clear x0=[150 85 150 145 130 0]; y0=[140 85 155 50 150 0]; q=[243 236 220.5 159 230 52]; xy0=[x0; y0]; d0=dist(xy0); %求矩阵各个列向量之间的距离 d0(find(d0==0))=inf; a0=asind(8./d0) %以度为单位的反函数 xy1=x0+i*y0 xy2=exp(i*q*pi/180) for m=1:6 for n=1:6 if n~=m b0(m,n)=angle((xy2(n)-xy2(m))/(xy1(m)-xy1(n))); end -53- end end b0=b0*180/pi; dlmwrite('txt1.txt',a0,'delimiter', '\t','newline','PC'); fid=fopen('txt1.txt','a'); fwrite(fid,'~','char'); %往纯文本文件中写 LINGO 数据的分割符 dlmwrite('txt1.txt',b0,'delimiter', '\t','newline','PC','-append','roffset', 1) 求得 0 ijα 的值如表 2 所示。 表 2 0 ijα 的值 1 2 3 4 5 6 1 0 5.39119 32.23095 5.091816 20.96336 2.234507 2 5.39119 0 4.804024 6.61346 5.807866 3.815925 3 32.23095 4.804024 0 4.364672 22.83365 2.125539 4 5.091816 6.61346 4.364672 0 4.537692 2.989819 5 20.96336 5.807866 22.83365 4.537692 0 2.309841 6 2.234507 3.815925 2.125539 2.989819 2.309841 0 求得 0 ijβ 的值如表 3 所示。 表 3 0 ijβ 的值 1 2 3 4 5 6 1 0 109.26 -128.25 24.18 173.07 14.475 2 109.26 0 -88.871 -42.244 -92.305 9 3 -128.25 -88.871 0 12.476 -58.786 0.31081 4 24.18 -42.244 12.476 0 5.9692 -3.5256 5 173.07 -92.305 -58.786 5.9692 0 1.9144 6 14.475 9 0.31081 -3.5256 1.9144 0 上述飞行管理的数学规划模型可如下输入 LINGO 求解: model: sets: plane/1..6/:delta; link(plane,plane):alpha,beta; endsets data: alpha=@file('txt1.txt'); !需要在alpha的数据后面加上分隔符"~"; beta=@file('txt1.txt'); enddata min=@sum(plane:@abs(delta)); @for(plane:@bnd(-30,delta,30)); @for(link(i,j)|i#ne#j:@abs(beta(i,j)+0.5*delta(i)+0.5*delta(j))>a lpha(i,j)); end 求得的最优解为 o83858.23 =Δθ , o0138.215 −=Δθ , o7908.06 =Δθ ,其它调整 角度为 0。 4.2 模型二 -54- 两架飞机 ji, 不发生碰撞的条件为 64))()(())()(( 22 >−+− tytytxtx jiji (25) 51 ≤≤ i , 61 ≤≤+ ji , },min{0 ji TTt ≤≤ 其中 ji TT , 分别表示第 ji, 架飞机飞出正方形区域边界的时刻。这里 iii atxtx θcos)( 0 += , iii atyty θsin)( 0 += , ni ,,2,1 L= ; iii θθθ Δ+= 0 , 6|| πθ ≤Δ i , ni ,,2,1 L= ; 下面我们把约束条件(25)加强为对所有的时间t 都成立,记 ),(~),(~),(~64))()(())()(( 222 , jictjibtjiatytytxtxl jijiji ++=−−+−= 其中 2sin4),(~ 22 jiajia θθ −= , )]sin))(sin0()0(()cos))(cos0()0([(2),(~ jijijiji yyxxajib θθθθ −−+−−= 64))0()0(())0()0((),(~ 22 −−+−= jiji yyxxjic 则两架 ji, 飞机不碰撞的条件是 0),(~),(~4),(~),( 2 <−=Δ jicjiajibji (26) 这样我们建立如下的非线性规划模型 ∑ = Δ 6 1 2)( i iθ s.t. 0),( <Δ ji , 51 ≤≤ i , 61 ≤≤+ ji 6 πθ ≤Δ i , 6,,2,1 L=i 习 题 三 1. 用最速下降法(梯度法)求函数: 2 221 2 121 22264)( xxxxxxxf −−−+= 的极大点。给定初始点 Tx )1,1(0 = 。 2. 试用牛顿法求解: 2 1)(min 2 2 2 1 ++−= xxxf 取初始点 Tx )0,4()0( = ,并将采用变步长和采用固定步长 0.1=λ 时的情形做比较。 3. 某工厂向用户提供发动机,按合同规定,其交货数量和日期是:第一季度末交 40 台,第二季末交 60 台,第三季末交 80 台。工厂的最大生产能力为每季 100 台,每 季的生产费用是 22.050)( xxxf += (元),此处 x 为该季生产发动机的台数。若工厂 生产的多,多余的发动机可移到下季向用户交货,这样,工厂就需支付存贮费,每台发 动机每季的存贮费为 4 元。问该厂每季应生产多少台发动机,才能既满足交货合同,又 使工厂所花费的费用最少(假定第一季度开始时发动机无存货)。 4. 用 Matlab 的非线性规划命令 fmincon 求解飞行管理问题的模型二。 5. 用罚函数法求解飞行管理问题的模型二。 -55- 6. 求下列问题的解 3 2 22 2 11 332)(max xxxxxxf ++++= s.t. 1022 3 2 22 2 11 ≤++++ xxxxx 503 2 22 2 11 ≤−+++ xxxxx 4022 32 2 11 ≤+++ xxxx 23 2 1 =+ xx 12 21 ≥+ xx 不约束321 ,,0 xxx ≥ 7. 图 3 影院剖面示意图 图 3 为影院的剖面示意图,座位的满意程度主要取决于视角α 和仰角 β 。视 角 α 是 观众眼睛到屏幕上、下边缘视线的夹角,α 越大越好;仰角 β 是观众眼睛到屏幕上边缘 视线与水平线的夹角,β 太大使人的头部过分上仰,引起不舒服感,一般要求 β 不超过 o30 。 记影院屏幕高 h ,上边缘距地面高 H ,地板线倾角θ ,第一排和最后一排座位与屏 幕水平距离分别为 d 和 D ,观众平均座高为 c(指眼睛到地面的距离)。已知参数 8.1=h , 5=H , 5.4=d , 19=D , 1.1=c (单位:m)。 (1)地板线倾角 o10=θ ,问最佳座位在什么地方? (2)求地板线倾角(一般不超过 o20 ),使所有观众的平均满意程度最大。 (3)地板线设计成什么形状可以进一步提高观众的满意程度。 -56- 第四章 动态规划 §1 引言 1.1 动态规划的发展及研究内容 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20 世纪 50 年代初 R. E. Bellman 等人在研究多阶段决策过 程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程 优化问题的新方法—动态规划。1957 年出版了他的名著《Dynamic Programming》,这 是该领域的第一本著作。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广 泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动 态规划方法比用其它方法求解更为方便。 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时 间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为 多阶段决策过程,也可以用动态规划方法方便地求解。 应指出,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是 一种特殊算法(如线性规划是一种算法)。因而,它不象线性规划那样有一个标准的数 学表达式和明确定义的一组规则,而必须对具体问题进行具体分析处理。因此,在学习 时,除了要对基本概念和方法正确理解外,应以丰富的想象力去建立模型,用创造性的 技巧去求解。 例 1 最短路线问题 图 1 是一个线路网,连线上的数字表示两点之间的距离(或费用)。试寻求一条由 A 到G 距离最短(或费用最省)的路线。 图 1 最短路线问题 例 2 生产计划问题 工厂生产某种产品,每单位(千件)的成本为 1(千元),每次开工的固定成本为 3 (千元),工厂每季度的最大生产能力为 6(千件)。经调查,市场对该产品的需求量第 一、二、三、四季度分别为 2,3,2,4(千件)。如果工厂在第一、二季度将全年的需 求都生产出来,自然可以降低成本(少付固定成本费),但是对于第三、四季度才能上 市的产品需付存储费,每季每千件的存储费为 0.5(千元)。还规定年初和年末这种产品 均无库存。试制定一个生产计划,即安排每个季度的产量,使一年的总费用(生产成本 和存储费)最少。 1.2 决策过程的分类 根据过程的时间变量是离散的还是连续的,分为离散时间决策过程(discrete-time -57- decision process)和连续时间决策过程(continuous-time decision process);根据过程的 演变是确定的还是随机的,分为确定性决策过程(deterministic decision process)和随 机性决策过程(stochastic decision process),其中应用最广的是确定性多阶段决策过程。 §2 基本概念、基本方程和计算方法 2.1 动态规划的基本概念和基本方程 一个多阶段决策过程最优化问题的动态规划模型通常包含以下要素。 2.1.1 阶段 阶段(step)是对整个过程的自然划分。通常根据时间顺序或空间顺序特征来划分阶 段,以便按阶段的次序解优化问题。阶段变量一般用 nk ,,2,1 L= 表示。在例 1 中由 A 出发为 1=k ,由 )2,1( =iBi 出发为 2=k ,依此下去从 )2,1( =iFi 出发为 6=k ,共 6=n 个阶段。在例 2 中按照第一、二、三、四季度分为 4,3,2,1=k ,共四个阶段。 2.1.2 状态 状态(state)表示每个阶段开始时过程所处的自然状况。它应能描述过程的特征并 且无后效性,即当某阶段的状态变量给定时,这个阶段以后过程的演变与该阶段以前各 阶段的状态无关。通常还要求状态是直接或间接可以观测的。 描述状态的变量称状态变量(state variable)。变量允许取值的范围称允许状态集合 (set of admissible states)。用 kx 表示第 k 阶段的状态变量,它可以是一个数或一个向量。 用 kX 表示第 k 阶段的允许状态集合。在例 1 中 2x 可取 21,BB ,或将 iB 定义为 )2,1( =ii ,则 12 =x 或 2 ,而 }2,1{2 =X 。 n 个阶段的决策过程有 1+n 个状态变量, 1+nx 表示 nx 演变的结果。在例 1 中 7x 取 G ,或定义为1,即 17 =x 。 根据过程演变的具体情况,状态变量可以是离散的或连续的。为了计算的方便有时 将连续变量离散化;为了分析的方便有时又将离散变量视为连续的。 状态变量简称为状态。 2.1.3 决策 当一个阶段的状态确定后,可以作出各种选择从而演变到下一阶段的某个状态,这 种选择手段称为决策(decision),在最优控制问题中也称为控制(control)。 描述决策的变量称决策变量(decision variable),变量允许取值的范围称允许决策 集合(set of admissible decisions)。用 )( kk xu 表示第 k 阶段处于状态 kx 时的决策变量, 它是 kx 的函数,用 )( kk xU 表示 kx 的允许决策集合。在例 1 中 )( 12 Bu 可取 21,CC 或 3C , 可记作 3,2,1)1(2 =u ,而 }3,2,1{)1(2 =U 。 决策变量简称决策。 2.1.4 策略 决策组成的序列称为策略(policy)。由初始状态 1x 开始的全过程的策略记作 )( 11 xp n ,即 )}(,),(),({)( 221111 nnn xuxuxuxp L= . 由第 k 阶段的状态 kx 开始到终止状态的后部子过程的策略记作 )( kkn xp ,即 )}(,),({)( nnkkkkn xuxuxp L= , 1,,2,1 −= nk L . 类似地,由第 k 到第 j 阶段的子过程的策略记作 -58- )}(,),({)( jjkkkkj xuxuxp L= . 可供选择的策略有一定的范围,称为允许策略集合(set of admissible policies),用 )(),(),( 11 kkjkknn xPxPxP 表示。 2.1.5. 状态转移方程 在确定性过程中,一旦某阶段的状态和决策为已知,下阶段的状态便完全确定。用 状态转移方程(equation of state transition)表示这种演变规律,写作 .,,2,1),,(1 nkuxTx kkkk L==+ (1) 在例 1 中状态转移方程为 )(1 kkk xux =+ 。 2.1.6. 指标函数和最优值函数 指标函数(objective function)是衡量过程优劣的数量指标,它是定义在全过程和所有 后部子过程上的数量函数,用 ),,,,( 11, ++ nkkknk xxuxV L 表示, nk ,,2,1 L= 。指标函 数应具有可分离性,即 nkV , 可表为 nkkk Vux ,1,, + 的函数,记为 )),,,(,,(),,,,( 111,111, ++++++ = nkknkkkknkkknk xuxVuxxxuxV LL ϕ 并且函数 kϕ 对于变量 nkV ,1+ 是严格单调的。 过程在第 j 阶段的阶段指标取决于状态 jx 和决策 ju ,用 ),( jjj uxv 表示。指标函 数由 ),,2,1( njv j L= 组成,常见的形式有: 阶段指标之和,即 ∑ = ++ = n kj jjjnkkknk uxvxxuxV ),(),,,,( 11, L , 阶段指标之积,即 ∏ = ++ = n kj jjjnkkknk uxvxxuxV ),(),,,,( 11, L , 阶段指标之极大(或极小),即 ),((min)max),,,,( 11, jjjnjknkkknk uxvxxuxV ≤≤++ =L . 这些形式下第 k 到第 j 阶段子过程的指标函数为 ),,,( 1, +jkkjk xuxV L 。 根据状态转移方程指标函数 nkV , 还可以表示为状态 kx 和策略 knp 的函数,即 ),(, knknk pxV 。在 kx 给定时指标函数 nkV , 对 knp 的最优值称为最优值函数(optimal value function),记为 )( kk xf ,即 ),(opt)( , )( knknk xPp kk pxVxf kknkn∈ = , 其中 opt 可根据具体情况取 max 或 min 。 2.1.7 最优策略和最优轨线 使指标函数 nkV , 达到最优值的策略是从 k 开始的后部子过程的最优策略,记作 },,{ *** nkkn uup L= 。 * 1np 是全过程的最优策略,简称最优策略(optimal policy)。从初始 状态 )( * 11 xx = 出发,过程按照 * 1np 和状态转移方程演变所经历的状态序列 },,,{ * 1 * 2 * 1 +nxxx L 称最优轨线(optimal trajectory)。 -59- 2.1.8 递归方程 如下方程称为递归方程 ⎪⎩ ⎪⎨ ⎧ =⊗= = ++ ∈ ++ 1,,)},(),({opt)( 10)( 11 )( 11 Lnkxfuxvxf xf kkkkk xUu kk nn kkk 或 (2) 在上述方程中,当⊗ 为加法时取 0)( 11 =++ nn xf ;当 ⊗ 为乘法时,取 1)( 11 =++ nn xf 。动 态规划递归方程是动态规划的最优性原理的基础,即:最优策略的子策略,构成最优子 策略。用状态转移方程(1)和递归方程(2)求解动态规划的过程,是由 1+= nk 逆 推至 1=k ,故这种解法称为逆序解法。当然,对某些动态规划问题,也可采用顺序解 法。这时,状态转移方程和递归方程分别为: nkuxTx kk r kk ,,1),,( 1 L== + , ⎪⎩ ⎪⎨ ⎧ =⊗= = −+ ∈ + ++ nkxfuxvxf xf kkkkk xUu kk k r kk ,,1)},(),({opt)( 10( 11 )( 1 10 11 L 或) 例 3 用 lingo 求解例 1 最短路线问题。 model: Title Dynamic Programming; sets: vertex/A,B1,B2,C1,C2,C3,C4,D1,D2,D3,E1,E2,E3,F1,F2,G/:L; road(vertex,vertex)/A B1,A B2,B1 C1,B1 C2,B1 c3,B2 C2,B2 C3,B2 C4, C1 D1,C1 D2,C2 D1,C2 D2,C3 D2,C3 D3,C4 D2,C4 D3, D1 E1,D1 E2,D2 E2,D2 E3,D3 E2,D3 E3, E1 F1,E1 F2,E2 F1,E2 F2,E3 F1,E3 F2,F1 G,F2 G/:D; endsets data: D=5 3 1 3 6 8 7 6 6 8 3 5 3 3 8 4 2 2 1 2 3 3 3 5 5 2 6 6 4 3; L=0,,,,,,,,,,,,,,,; enddata @for(vertex(i)|i#GT#1:L(i)=@min(road(j,i):L(j)+D(j,i))); end 纵上所述,如果一个问题能用动态规划方法求解,那么,我们可以按下列步骤,首 先建立起动态规划的数学模型: (i)将过程划分成恰当的阶段。 (ii)正确选择状态变量 kx ,使它既能描述过程的状态,又满足无后效性,同时确 定允许状态集合 kX 。 (iii)选择决策变量 ku ,确定允许决策集合 )( kk xU 。 (iv)写出状态转移方程。 (v)确定阶段指标 ),( kkk uxv 及指标函数 knV 的形式(阶段指标之和,阶段指标之 积,阶段指标之极大或极小等)。 (vi)写出基本方程即最优值函数满足的递归方程,以及端点条件。 §3 逆序解法的计算框图 -60- 以自由终端、固定始端、指标函数取和的形式的逆序解法为例给出计算框图,其它 情况容易在这个基础上修改得到。 一般化的自由终端条件为 1,1,11 ,,2,1),()( ++++ == nininn nixxf Lϕ (3) 其中ϕ 为已知。固定始端条件可表示为 }{}{ * 111 xxX == 。 如果状态 kx 和决策 ku 是连续变量,用数值方法求解时需按照精度要求进行离散 化。设状态 kx 的允许集合为 nkninixX kkkik ,,2,1,,,2,1},,,2,1|{ LLL ==== . 决策 )( kiki xu 的允许集合为 nkninjuU kki j kiki ,,2,1,,,2,1},,,2,1|{ )( LLL ==== . 状态转移方程和阶段指标应对 kx 的每个取值 kix 和 kiu 的每个取值 )( j kiu 计算,即 ),( )( j kikikk uxTT = , ),( )( j kikik uxvv = 。最优值函数应对 kx 的每个取值 kix 计算。基本方 程可以表为 .1,2,,,,,2,1,,,2,1 ),(opt)( )),,((),()( )( )( 1 )()( LLL nkninj xfxf uxTfuxvxf kki ki j k j kik j kikikk j kikikki j k === = += + (4) 图 2 解法框图 -61- 按照(3),(4)逆向计算出 )( * 11 xf ,为全过程的最优值。记状态 kix 的最优决策为 )(* kiki xu ,由 * 1x 和 )(* kiki xu 按照状态转移方程计算出最优状态,记作 * kx 。并得到相应的 最优决策,记作 )( ** kk xu 。于是最优策略为 )}(,),(),({ *** 2 * 2 * 1 * 1 nn xuxuxu L 。 算法程序的框图如图 2 所示。 图的左边部分是函数序列的递推计算,可输出全过程最优值 )( * 11 xf ,如果需要还 可以输出后部子过程最优值函数序列 )( kik xf 和最优决策序列 )(* kik xu 。计算过程中存 )( kik xf 是备计算 1−kf 之用,在 1−kf 算完后可用 1−kf 将 kf 替换掉;存 )(* kik xu 是备右边 部分读 )( ** kk xu 之用。 图的右边部分是最优状态和最优决策序列的正向计算,可输出最优策略 )}(,),(),({ *** 2 * 2 * 1 * 1 nn xuxuxu L 和最优轨线 },,,{ ** 2 * 1 nxxx L 。 §4 动态规划与静态规划的关系 动态规划与静态规划(线性和非线性规划等)研究的对象本质上都是在若干约束条 件下的函数极值问题。两种规划在很多情况下原则上可以相互转换。 动态规划可以看作求决策 nuuu ,,, 21 L 使指标函数 ),,,( 2111 nn uuuxV L, 达到最优 (最大或最小)的极值问题,状态转移方程、端点条件以及允许状态集、允许决策集等 是约束条件,原则上可以用非线性规划方法求解。 一些静态规划只要适当引入阶段变量、状态、决策等就可以用动态规划方法求解。 下面用例子说明。 例 4 用动态规划解下列非线性规划 ∑ = n k kk ug 1 )(max ; s.t. ∑ = ≥= n k kk uau 1 0, . 其中 )( kk ug 为任意的已知函数。 解 按变量 ku 的序号划分阶段,看作 n 段决策过程。设状态为 121 ,,, +nxxx L ,取 问题中的变量 nuuu ,,, 21 L 为决策。状态转移方程为 .,,2,1,, 11 nkuxxax kkk L=−== + 取 )( kk ug 为阶段指标,最优值函数的基本方程为(注意到 01 =+nx ) )]()([max)( 110 ++≤≤ += kkkkxukk xfxgxf kk ; 1,2,,1,,0 L−=≤≤ nnkaxk ; 0)0(1 =+nf . 按照逆序解法求出对应于 kx 每个取值的最优决策 )(* kk xu ,计算至 )(1 af 后即可利 用状态转移方程得到最优状态序列 }{ * kx 和最优决策序列 )}({ ** kk xu 。 与静态规划相比,动态规划的优越性在于: (i)能够得到全局最优解。由于约束条件确定的约束集合往往很复杂,即使指标 函数较简单,用非线性规划方法也很难求出全局最优解。而动态规划方法把全过程化为 -62- 一系列结构相似的子问题,每个子问题的变量个数大大减少,约束集合也简单得多,易 于得到全局最优解。特别是对于约束集合、状态转移和指标函数不能用分析形式给出的 优化问题,可以对每个子过程用枚举法求解,而约束条件越多,决策的搜索范围越小, 求解也越容易。对于这类问题,动态规划通常是求全局最优解的唯一方法。 (ii)可以得到一族最优解。与非线性规划只能得到全过程的一个最优解不同,动 态规划得到的是全过程及所有后部子过程的各个状态的一族最优解。有些实际问题需要 这样的解族,即使不需要,它们在分析最优策略和最优值对于状态的稳定性时也是很有 用的。当最优策略由于某些原因不能实现时,这样的解族可以用来寻找次优策略。 (iii)能够利用经验提高求解效率。如果实际问题本身就是动态的,由于动态规划 方法反映了过程逐段演变的前后联系和动态特征,在计算中可以利用实际知识和经验提 高求解效率。如在策略迭代法中,实际经验能够帮助选择较好的初始策略,提高收敛速 度。 动态规划的主要缺点是: (i)没有统一的标准模型,也没有构造模型的通用方法,甚至还没有判断一个问 题能否构造动态规划模型的准则。这样就只能对每类问题进行具体分析,构造具体的模 型。对于较复杂的问题在选择状态、决策、确定状态转移规律等方面需要丰富的想象力 和灵活的技巧性,这就带来了应用上的局限性。 (ii)用数值方法求解时存在维数灾(curse of dimensionality)。若一维状态变量有 m 个取值,那么对于 n 维问题,状态 kx 就有 nm 个值,对于每个状态值都要计算、存储函 数 )( kk xf ,对于 n 稍大的实际问题的计算往往是不现实的。目前还没有克服维数灾的 有效的一般方法。 §5 若干典型问题的动态规划模型 5.1 最短路线问题 对于例 1 一类最短路线问题(shortest Path Problem),阶段按过程的演变划分,状 态由各段的初始位置确定,决策为从各个状态出发的走向,即有 )(1 kkk xux =+ ,阶段 指标为相邻两段状态间的距离 ))(,( kkkk xuxd ,指标函数为阶段指标之和,最优值函数 )( kk xf 是由 kx 出发到终点的最短距离(或最小费用),基本方程为 ;1,,)],())(,([min)( 11)( Lnkxfxuxdxf kkkkkkxukk kk =+= ++ .0)( 11 =++ nn xf 利用这个模型可以算出例 l 的最短路线为 GFEDCAB 22121 ,相应的最短距离为 18。 5.2 生产计划问题 对于例 2一类生产计划问题(Production planning problem),阶段按计划时间自然 划分,状态定义为每阶段开始时的储存量 kx ,决策为每个阶段的产量 ku ,记每个阶段 的需求量(已知量)为 kd ,则状态转移方程为 .,,2,1,0,1 nkxduxx kkkkk L=≥−+=+ (5) 设每阶段开工的固定成本费为 a ,生产单位数量产品的成本费为b ,每阶段单位数量产 品的储存费为 c ,阶段指标为阶段的生产成本和储存费之和,即 ⎩ ⎨ ⎧ >++= 0 0,),( kk kkkk ubuacxuxv (6) -63- 指标函数 knV 为 kv 之和。最优值函数 )( kk xf 为从第 k 段的状态 kx 出发到过程终结的最 小费用,满足 .1,,)],(),([min)( 11 Lnkxfuxvxf kkkkkUukk kk =+= ++∈ 其中允许决策集合 kU 由每阶段的最大生产能力决定。若设过程终结时允许存储量为 0 1+nx ,则终端条件是 .0)( 0 11 =++ nn xf (7) (5)~(7)构成该问题的动态规划模型。 5.3 资源分配问题 一种或几种资源(包括资金)分配给若干用户,或投资于几家企业,以获得最大的 效益。资源分配问题(resource allocating Problem)可以是多阶段决策过程,也可以是 静态规划问题,都能构造动态规划模型求解。下面举例说明。 例 5 机器可以在高、低两种负荷下生产。u 台机器在高负荷下的年产量是 )(ug , 在低负荷下的年产量是 )(uh ,高、低负荷下机器的年损耗率分别是 1a 和 1b ( 10 11 <<< ab )。现有 m 台机器,要安排一个 n 年的负荷分配计划,即每年初决定 多少台机器投入高、低负荷运行,使 n 年的总产量最大。如果进一步假设 uug α=)( , uuh β=)( ( 0>> βα ),即高、低负荷下每台机器的年产量分别为α 和 β ,结果将 有什么特点。 解 年度为阶段变量 nk ,,2,1 L= 。状态 kx 为第 k 年初完好的机器数,决策 ku 为 第 k 年投入高负荷运行的台数。当 kx 或 ku 不是整数时,将小数部分理解为一年中正常 工作时间或投入高负荷运行时间的比例。 机器在高、低负荷下的年完好率分别记为 a 和 b ,则 11 aa −= , 11 bb −= ,有 ba < 。因为第 k 年投入低负荷运行的机器台数为 kk ux − ,所以状态转移方程是 )(1 kkkk uxbaux −+=+ (8) 阶段指标 kv 是第 k 年的产量,有 )()(),( kkkkkk uxhuguxv −+= (9) 指标函数是阶段指标之和,最优值函数 )( kk xf 满足 .1,2,,,0 )],(),([max)( 110 Lnkmx xfuxvxf k kkkkkxukk kk =≤≤ += ++≤≤ (10) 及自由终端条件 .0,0)( 111 mxxf nnn ≤≤= +++ (11) 当 kv 中的 hg, 用较简单的函数表达式给出时,对于每个 k 可以用解析方法求解极 值问题。特别,若 uug α=)( , uuh β=)( ,(10)中 的 )](),([ 1 kkkkk xfuxv ++ 将是 ku 的线性函数,最大值点必在区间 kk xu ≤≤0 的左端点 0=ku 或右端点 kk xu = 取得, 即每年初将完好的机器全部投入低负荷或高负荷运行。 §6 具体的应用实例 例 6 设某工厂有 1000 台机器,生产两种产品 BA、 ,若投入 x 台机器生产 A 产 -64- 品,则纯收入为 x5 ,若投入 y 台机器生产 B 种产品,则纯收入为 y4 ,又知:生产 A 种 产品机器的年折损率为 20%,生产 B 产品机器的年折损率为 10%,问在 5 年内如何安 排各年度的生产计划,才能使总收入最高? 解 年度为阶段变量 5,4,3,2,1=k 。 令 kx 表示第 k 年初完好机器数, ku 表示第 k 年安排生产 A 种产品的机器数,则 kk ux − 为第 k 年安排生产 B 种产品的机器数,且 kk xu ≤≤0 。 则第 1+k 年初完好的机器数 kkkkkk uxuxux 1.09.0))(1.01()2.01(1 −=−−+−=+ (12) 令 ),( kkk uxv 表示第 k 年的纯收入, )( kk xf 表示第 k 年初往后各年的最大利润之 和。 显然 0)( 66 =xf (13) 则 )}(),({max)( 110 ++≤≤ += kkkkkxukk xfuxvxf kk )}(4{max)}()(45{max 110110 ++≤≤++≤≤ ++=+−+= kkkkxukkkkkxu xfxuxfuxu kkkk (14) (1) 5=k 时,由(13)、(14)式得 }4{max)( 55055 55 xuxf xu += ≤≤ 55 4xu + 关于 5u 求导,知其导数大于零,所以 55 4xu + 在 5u 等于 5x 处取得最大值, 即 55 xu = 时, 555 5)( xxf = 。 (2) 4=k 时,由(12)、(14)式得 }54{max)( 544044 44 xxuxf xu ++= ≤≤ }5.85.0{max)}1.09.0(54{max 44044440 4444 xuuxxu xuxu +=−++= ≤≤≤≤ 当 44 xu = 时, 444 9)( xxf = (3) 3=k 时, }94{max)( 433033 33 xxuxf xu ++= ≤≤ }1.121.0{max)}1.09.0(94{max 33033330 3333 xuuxxu xuxu +=−++= ≤≤≤≤ 当 33 xu = 时, 333 2.12)( xxf = (4) 2=k 时, }98.1422.0{max}2.124{max)( 220322022 2222 xuxxuxf xuxu +−=++= ≤≤≤≤ 当 02 =u 时, 222 98.14)( xxf = 。 (5) 1=k 时, }482.17498.0{max}98.144{max)( 110211011 1111 xuxxuxf xuxu +−=++= ≤≤≤≤ 当 01 =u 时, 111 482.17)( xxf = 。因为 10001 =x (台) -65- 所以由(12)式,进行回代得 9001.09.0 112 =−= uxx (台) 8101.09.0 223 =−= uxx (台) 6481.09.0 334 =−= uxx (台) 4.5181.09.0 445 =−= uxx (台) 注: 4.5185 =x 台中的 0.4 台应理解为有一台机器只能使用 0.4 年将报废。 例 7 求解下面问题 3 2 21max uuuz = ⎩ ⎨ ⎧ =≥ >=++ 3,2,10 )0(321 iu ccuuu i 解: 按问题的变量个数划分阶段,把它看作为一个三阶段决策问题。设状态变量 为 4321 ,,, xxxx ,并 记 cx =1 ;取问题中的变量 321 ,, uuu 为决策变量;各阶段指标函数 按乘积方式结合。令最优值函数 )( kk xf 表示第 k 阶段的初始状态为 kx ,从 k 阶段到 3 阶段所得到的最大值。 设 33 ux = , 223 xux =+ , cxux ==+ 112 则有 33 xu = , 220 xu ≤≤ , 110 xu ≤≤ 用逆推解法,从后向前依次有 3333 }{max)( 33 xuxf xu == = 及最优解 3 * 3 xu = ),(max)}({max)}({max)( 222022 2 2033 2 2022 222222 xuhuxuxfuxf xuxuxu ≤≤≤≤≤≤ =−== 由 032 2 222 2 2 =−= uxudu dh ,得 22 3 2 xu = 和 02 =u (舍去) 又 222 2 2 2 62 uxdu hd −= ,而 02 2 3 22 2 2 2 22 <−= = x du hd xu ,故 22 3 2 xu = 为极大值点。 所以 3 222 27 4)( xxf = 及最优解 2 * 2 3 2 xu = 。 })(27 4{max)}({max)( 3 1110221011 1111 uxuxfuxf xuxu −== ≤≤≤≤ 同样利用微分法易知 4 111 64 1)( xxf = ,最优解 1 * 1 4 1 xu = 。 由于 1x 已知,因而按计算的顺序反推算,可得各阶段的最优决策和最优值。即 cu 4 1* 1 = , 4 11 64 1)( cxf = 由 cccuxx 4 3 4 1* 112 =−=−= -66- 所以 cxu 2 1 3 2 2 * 2 == , 3 22 16 1)( cxf = 由 cccuxx 4 1 2 1 4 3* 223 =−=−= 所以 cu 4 1* 3 = , cxf 4 1)( 33 = 因此得到最优解为: cu 4 1* 1 = , cu 2 1* 2 = , cu 4 1* 3 = ; 最大值为: 4 1 64 1)(max ccfz == 。 习 题 四 1. 用 Matlab 编程求例 6 的解。 2. 有四个工人,要指派他们分别完成 4 项工作,每人做各项工作所消耗的时间如 表 1 所示。 表 1 工作 工人 A B C D 甲 15 18 21 24 乙 19 23 22 18 丙 26 17 16 19 丁 19 21 23 17 问指派哪个人去完成哪项工作,可使总的消耗时间为最小?试对此问题用动态规划 方法求解。 3. 为保证某一设备的正常运转,需备有三种不同的零件 321 ,, EEE 。若增加备用零 件的数量,可提高设备正常运转的可靠性,但增加了费用,而投资额仅为 8000 元。已 知备用零件数与它的可靠性和费用的关系如表 2 所示。 表 2 增加的可靠性 设备的费用(千元) 备件数 1E 2E 3E 1E 2E 3E 1 2 3 0.3 0.4 0.5 0.2 0.5 0.9 0.1 0.2 0.7 1 2 3 3 5 6 2 3 4 现要求在既不超出投资额的限制,又能尽量提高设备运转的可靠性的条件下,问 各种零件的备件数量应是多少为好? 4. 某工厂购进 100 台机器,准备生产 I、II 两种产品,若生产产品 I,每台机器每 年可收入 45 万元,损坏率为 65%;若生产产品 II,每台机器每年收入为 35 万元,损 坏率为 35%,估计三年后将有新型机器出现,旧的机器将全部淘汰。试问每年应如何 -67- 安排生产,使在三年内收入最多? 5.3 名商人各带 1 名随从乘船渡河,一只小船只能容纳 2 人,由他们自己划行。 随从们密约,在河的任一岸,一旦随从人数比商人多,就杀商人。此密约被商人知道, 如何乘船渡河的大权掌握在商人们手中,商人们怎样安排每次乘船方案,才能安全渡河 呢? 6.某一印刷厂有六项加工任务,对印刷车间和装订车间所需时间(单位:天)如 表 3 所示,试求最优的加工顺序和总加工天数。 表 3 任务 车间 1 2 3 4 5 6 印刷车间 装订车间 3 8 10 12 5 9 2 6 9 5 11 2 -68- 第五章 图与网络模型及方法 §1 概论 图论起源于 18 世纪。第一篇图论论文是瑞士数学家欧拉于 1736 年发表的“哥尼 斯堡的七座桥”。1847 年,克希霍夫为了给出电网络方程而引进了“树”的概念。1857 年,凯莱在计数烷 22 +nn HC 的同分异构物时,也发现了“树”。哈密尔顿于 1859 年提 出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈、近几十年 来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和 方法已经渗透到物理、化学、通讯科学、建筑学、运筹学,生物遗传学、心理学、经济 学、社会学等学科中。 图论中所谓的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示 这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到 了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了 一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问 题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结 起来,问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。 图 1 哥尼斯堡七桥问题 当然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解 决这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座 桥用连接相应两点的一条线来代替,从而得到一个有四个“点”,七条“线”的“图”。 问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特 点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将 这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问 题,而且开创了图论研究的先河。 图与网络是运筹学(Operations Research)中的一个经典和重要的分支,所研究的 问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等 诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都 是图与网络的基本问题。 我们首先通过一些例子来了解网络优化问题。 例 1 最短路问题(SPP-shortest path problem) 一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。从甲地到乙地的 公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?假设货柜车的运 行速度是恒定的,那么这一问题相当于需要找到一条从甲地到乙地的最短路。 例 2 公路连接问题 某一地区有若干个主要城市,现准备修建高速公路把这些城市连接起来,使得从其 -69- 中任何一个城市都可以经高速公路直接或间接到达另一个城市。假定已经知道了任意两 个城市之间修建高速公路的成本,那么应如何决定在哪些城市间修建高速公路,使得总 成本最小? 例 3 指派问题(assignment problem) 一家公司经理准备安排 N 名员工去完成 N 项任务,每人一项。由于各员工的特点 不同,不同的员工去完成同一项任务时所获得的回报是不同的。如何分配工作方案可以 使总回报最大? 例 4 中国邮递员问题(CPP-chinese postman problem) 一名邮递员负责投递某个街区的邮件。如何为他(她)设计一条最短的投递路线(从 邮局出发,经过投递区内每条街道至少一次,最后返回邮局)?由于这一问题是我国管 梅谷教授 1960 年首先提出的,所以国际上称之为中国邮递员问题。 例 5 旅行商问题(TSP-traveling salesman problem) 一名推销员准备前往若干城市推销产品。如何为他(她)设计一条最短的旅行路线 (从驻地出发,经过每个城市恰好一次,最后返回驻地)?这一问题的研究历史十分悠 久,通常称之为旅行商问题。 例 6 运输问题(transportation problem) 某种原材料有 M 个产地,现在需要将原材料从产地运往 N 个使用这些原材料的工 厂。假定 M 个产地的产量和 N 家工厂的需要量已知,单位产品从任一产地到任一工厂 的运费已知,那么如何安排运输方案可以使总运输成本最低? 上述问题有两个共同的特点:一是它们的目的都是从若干可能的安排或方案中寻求 某种意义下的最优安排或方案,数学上把这种问题称为最优化或优化(optimization) 问题;二是它们都易于用图形的形式直观地描述和表达,数学上把这种与图相关的结构 称为网络(network)。与图和网络相关的最优化问题就是网络最优化或称网络优化 (netwok optimization)问题。所以上面例子中介绍的问题都是网络优化问题。由于多 数网络优化问题是以网络上的流(flow)为研究的对象,因此网络优化又常常被称为网 络流(network flows)或网络流规划等。 下面首先简要介绍图与网络的一些基本概念。 §2 图与网络的基本概念 2.1 无向图 一个无向图(undirected graph)G 是由一个非空有限集合 )(GV 和 )(GV 中某些元素 的无序对集合 )(GE 构成的二元组,记为 ))(),(( GEGVG = 。其中 },,,{)( 21 nvvvGV L= 称为图G 的顶点集(vertex set)或节点集(node set), )(GV 中 的每一个元素 ),,2,1( nivi L= 称为该图的一个顶点(vertex)或节点(node); },,,{)( 21 meeeGE L= 称为图G 的边集(edge set), )(GE 中的每一个元素 ke (即 )(GV 中某两个元素 ji vv , 的无序对) 记为 ),( jik vve = 或 ijjik vvvve == ),,2,1( mk L= , 被称为该图的一条从 iv 到 jv 的边(edge)。 当边 jik vve = 时,称 ji vv , 为边 ke 的端点,并称 jv 与 iv 相邻(adjacent);边 ke 称 为与顶点 ji vv , 关联(incident)。如果某两条边至少有一个公共端点,则称这两条边在 图G 中相邻。 边上赋权的无向图称为赋权无向图或无向网络(undirected network)。我们对图和 网络不作严格区分,因为任何图总是可以赋权的。 -70- 一个图称为有限图,如果它的顶点集和边集都有限。图G 的顶点数用符号 ||V 或 )(Gν 表示,边数用 || E 或 )(Gε 表示。 当讨论的图只有一个时,总是用G 来表示这个图。从而在图论符号中我们常略去 字母G ,例如,分别用 ν,,EV 和ε 代替 )(),(),( GGEGV ν 和 )(Gε 。 端点重合为一点的边称为环(loop)。 一个图称为简单图(simple graph),如果它既没有环也没有两条边连接同一对顶点。 2.2 有向图 定义 一个有向图(directed graph 或 digraph)G 是由一个非空有限集合V 和V 中 某些元素的有序对集合 A 构成的二元组,记为 ),( AVG = 。其中 },,,{ 21 nvvvV L= 称 为图G 的顶点集或节点集, V 中的每一个元素 ),,2,1( nivi L= 称为该图的一个顶点 或节点; },,,{ 21 maaaA L= 称为图G 的弧集(arc set),A 中的每一个元素 ka (即V 中 某两个元素 ji vv , 的有序对) 记为 ),( jik vva = 或 ),,2,1( nkvva jik L== ,被称为该图 的一条从 iv 到 jv 的弧(arc)。 当弧 jik vva = 时,称 iv 为 ka 的尾(tail), jv 为 ka 的头(head),并称弧 ka 为 iv 的 出弧(outgoing arc),为 jv 的入弧(incoming arc)。 对应于每个有向图 D ,可以在相同顶点集上作一个图G ,使得对于 D 的每条弧, G 有一条有相同端点的边与之相对应。这个图称为 D 的基础图。反之,给定任意图G , 对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这 样的有向图称为G 的一个定向图。 以下若未指明“有向图”三字,“图”字皆指无向图。 2.3 完全图、二分图 每一对不同的顶点都有一条边相连的简单图称为完全图(complete graph)。n 个顶点 的完全图记为 nK 。 若 YXGV U=)( , Φ=YX I , 0|||| ≠YX (这里 || X 表示集合 X 中的元素个 数), X 中无相邻顶点对,Y 中亦然,则称G 为二分图(bipartite graph);特别地,若 YyXx ∈∀∈∀ , ,则 )(GExy ∈ ,则称G 为完全二分图,记成 |||,| YXK 。 2.4 子图 图 H 叫做图G 的 子图(subgraph ),记作 GH ⊂ ,如果 )()( GVHV ⊂ , )()( GEHE ⊂ 。若 H 是G 的子图,则G 称为 H 的母图。 G 的支撑子图(spanning subgraph,又成生成子图)是指满足 )()( GVHV = 的子 图 H 。 2.5 顶点的度 设 )(GVv ∈ ,G 中与 v 关联的边数(每个环算作两条边)称为 v 的度(degree),记 作 )(vd 。若 )(vd 是奇数,称 v 是奇顶点(odd point); )(vd 是偶数,称 v 是偶顶点(even point)。关于顶点的度,我们有如下结果: (i) ∑ ∈ = Vv vd ε2)( (ii) 任意一个图的奇顶点的个数是偶数。 2.6 图与网络的数据结构 -71- 网络优化研究的是网络上的各种优化模型与算法。为了在计算机上实现网络优化的 算法,首先我们必须有一种方法(即数据结构)在计算机上来描述图与网络。一般来说, 算法的好坏与网络的具体表示方法,以及中间结果的操作方案是有关系的。这里我们介 绍计算机上用来描述图与网络的 5 种常用表示方法:邻接矩阵表示法、关联矩阵表示法、 弧表表示法、邻接表表示法和星形表示法。在下面数据结构的讨论中,我们首先假设 ),( AVG = 是一个简单有向图, mAnV == ||,|| ,并假设V 中的顶点用自然数 n,,2,1 L 表示或编号, A 中的弧用自然数 m,,2,1 L 表示或编号。对于有多重边或无向网络的情 况,我们只是在讨论完简单有向图的表示方法之后,给出一些说明。 (i)邻接矩阵表示法 邻接矩阵表示法是将图以邻接矩阵(adjacency matrix)的形式存储在计算机中。图 ),( AVG = 的邻接矩阵是如下定义的:C 是一个 nn × 的 10 − 矩阵,即 nn nnijcC × × ∈= }1,0{)( , ⎩ ⎨ ⎧ ∉ ∈= .),(,0 ,),(,1 Aji Ajicij 也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为 1;否则为 0。 可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有 2n 个元素中,只有 m 个为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络 中查找弧的时间。 图 2 有向图 例 7 对于图 2 所示的有向图,可以用邻接矩阵表示为 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 01100 10100 00010 01000 00110 同样,对于网络中的权,也可以用类似邻接矩阵的 nn × 矩阵表示。只是此时一条 弧所对应的元素不再是 1,而是相应的权而已。如果网络中每条弧赋有多种权,则可以 用多个矩阵表示这些权。 (ii)关联矩阵表示法 关联矩阵表示法是将图以关联矩阵(incidence matrix)的形式存储在计算机中.图 ),( AVG = 的关联矩阵 B 是如下定义的: B 是一个 mn × 的矩阵,即 mn mnikbB × × −∈= }1,0,1{)( , -72- ⎪⎩ ⎪⎨ ⎧ ∈=∈∃− ∈=∈∃ = .,0 ,),(, ,1 ,),(,,1 其它 AijkVj AjikVj bik 也就是说,在关联矩阵中,每行对应于图的一个节点,每列对应于图的一条弧。如 果一个节点是一条弧的起点,则关联矩阵中对应的元素为 1;如果一个节点是一条弧的 终点,则关联矩阵中对应的元素为 1− ;如果一个节点与一条弧不关联,则关联矩阵中 对应的元素为 0。对于简单图,关联矩阵每列只含有两个非零元(一个 1+ ,一个 1− )。 可以看出,这种表示法也非常简单、直接。但是,在关联矩阵的所有 nm 个元素中,只 有 m2 个为非零元。如果网络比较稀疏,这种表示法也会浪费大量的存储空间。但由于 关联矩阵有许多特别重要的理论性质,因此它在网络优化中是非常重要的概念。 例 8 对于例 7 所示的图,如果关联矩阵中每列对应弧的顺序为(1,2),(1,3),(2,4), (3,2),(4,3),(4,5),(5,3)和(5,4),则关联矩阵表示为 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − −− −−− −− 11100000 10110100 01011010 00001101 00000011 同样,对于网络中的权,也可以通过对关联矩阵的扩展来表示。例如,如果网络中 每条弧有一个权,我们可以把关联矩阵增加一行,把每一条弧所对应的权存储在增加的 行中。如果网络中每条弧赋有多个权,我们可以把关联矩阵增加相应的行数,把每一条 弧所对应的权存储在增加的行中。 (iii)弧表表示法 弧表表示法将图以弧表(arc list)的形式存储在计算机中。所谓图的弧表,也就是 图的弧集合中的所有有序对。弧表表示法直接列出所有弧的起点和终点,共需 m2 个存 储单元,因此当网络比较稀疏时比较方便。此外,对于网络图中每条弧上的权,也要对 应地用额外的存储单元表示。例如,例 7 所示的图,假设弧(1,2),(1,3),(2,4),(3,2), (4,3),(4,5),(5,3)和(5,4)上的权分别为 8,9,6,4,0,3,6 和 7,则弧表表示如表 1 所示。 表 1 起点 1 1 2 3 4 4 5 5 终点 2 3 4 2 3 5 3 4 权 8 9 6 4 0 3 6 7 为了便于检索,一般按照起点、终点的字典序顺序存储弧表,如上面的弧表就是按 照这样的顺序存储的。 (iv)邻接表表示法 邻接表表示法将图以邻接表(adjacency lists)的形式存储在计算机中。所谓图的 邻接表,也就是图的所有节点的邻接表的集合;而对每个节点,它的邻接表就是它的所 有出弧。邻接表表示法就是对图的每个节点,用一个单向链表列出从该节点出发的所有 弧,链表中每个单元对应于一条出弧。为了记录弧上的权,链表中每个单元除列出弧的 另一个端点外,还可以包含弧上的权等作为数据域。图的整个邻接表可以用一个指针数 组表示。例如,例 7 所示的图,邻接表表示为 -73- 这是一个 5 维指针数组,每一维(上面表示法中的每一行)对应于一个节点的邻接 表,如第 1 行对应于第 1 个节点的邻接表(即第 1 个节点的所有出弧)。每个指针单元 的第 1 个数据域表示弧的另一个端点(弧的头),后面的数据域表示对应弧上的权。如 第 1 行中的“2”表示弧的另一个端点为 2(即弧为(1,2)),“8”表示对应弧(1,2)上的 权为 8;“3”表示弧的另一个端点为 3(即弧为(1,3)),“9”表示对应弧(1,3)上的权 为 9。又如,第 5 行说明节点 5 出发的弧有(5,3)、(5,4),他们对应的权分别为 6 和 7。 对于有向图 ),( AVG = ,一般用 )(iA 表示节点i 的邻接表,即节点i 的所有出弧构 成的集合或链表(实际上只需要列出弧的另一个端点,即弧的头)。例如上面例子, }3,2{)1( =A , }4,3{)5( =A 等。 (v)星形表示法 星形(star)表示法的思想与邻接表表示法的思想有一定的相似之处。对每个节点, 它也是记录从该节点出发的所有弧,但它不是采用单向链表而是采用一个单一的数组表 示。也就是说,在该数组中首先存放从节点 1 出发的所有弧,然后接着存放从节点 2 出发的所有孤,依此类推,最后存放从节点 n 出发的所有孤。对每条弧,要依次存放其 起点、终点、权的数值等有关信息。这实际上相当于对所有弧给出了一个顺序和编号, 只是从同一节点出发的弧的顺序可以任意排列。此外,为了能够快速检索从每个节点出 发的所有弧,我们一般还用一个数组记录每个节点出发的弧的起始地址(即弧的编号)。 在这种表示法中,可以快速检索从每个节点出发的所有弧,这种星形表示法称为前向星 形(forward star)表示法。 例如,在例 7 所示的图中,仍然假设弧(1,2),(l,3),(2,4),(3,2),(4,3),(4,5), (5,3)和(5,4)上的权分别为 8,9,6,4,0,3,6 和 7。此时该网络图可以用前向 星形表示法表示为表 2 和表 3 。 表 2 节点对应的出弧的起始地址编号数组 节点号 i 1 2 3 4 5 6 起始地址 )(ipoint 1 3 4 5 7 9 表 3 记录弧信息的数组 弧编号 1 2 3 4 5 6 7 8 起点 1 1 2 3 4 4 5 5 终点 2 3 4 2 3 5 3 4 权 8 9 6 4 0 3 6 7 在数组 point 中,其元素个数比图的节点数多 1(即 1+n ),且一定有 1)1( =point , 1)1( +=+ mnpoint 。对于节点i ,其对应的出弧存放在弧信息数组的位置区间为 ]1)1(),([ −+ipointipoint , 如果 )1()( += ipointipoint ,则节点i 没有出弧。这种表示法与弧表表示法也非常相 -74- 似,“记录弧信息的数组”实际上相当于有序存放的“弧表”。只是在前向星形表示法中, 弧被编号后有序存放,并增加一个数组( point )记录每个节点出发的弧的起始编号。 前向星形表示法有利于快速检索每个节点的所有出弧,但不能快速检索每个节点的 所有入弧。为了能够快速检索每个节点的所有入孤,可以采用反向星形(reverse star) 表示法:首先存放进入节点 1 的所有孤,然后接着存放进入节点 2 的所有弧,依此类推, 最后存放进入节点 n 的所有孤。对每条弧,仍然依次存放其起点、终点、权的数值等有 关信息。同样,为了能够快速检索从每个节点的所有入弧,我们一般还用一个数组记录 每个节点的入孤的起始地址(即弧的编号)。例如,例 7 所示的图,可以用反向星形表 示法表示为表 4 和表 5。 表 4 节点对应的入弧的起始地址编号数组 节点号 i 1 2 3 4 5 6 起始地址 )(irpoint 1 1 3 6 8 9 表 5 记录弧信息的数组 弧编号 1 2 3 4 5 6 7 8 终点 2 2 3 3 3 4 4 5 起点 3 1 1 4 5 5 2 4 权 4 8 9 0 6 7 6 3 如果既希望快速检索每个节点的所有出弧,也希望快速检索每个节点的所有入弧, 则可以综合采用前向和反向星形表示法。当然,将孤信息存放两次是没有必要的,可以 只用一个数组(trace)记录一条弧在两种表示法中的对应关系即可。例如,可以在采用 前向星形表示法的基础上,加上上面介绍的 rpoint 数组和如下的trace 数组即可。这相 当于一种紧凑的双向星形表示法,如表 6 所示。 表 6 两种表示法中的弧的对应关系 反向法中弧编号 j 1 2 3 4 5 6 7 8 正向法中弧编号 )( jtrace 4 1 2 5 7 8 3 6 对于网络图的表示法,我们作如下说明: ① 星形表示法和邻接表表示法在实际算法实现中都是经常采用的。星形表示法的 优点是占用的存储空间较少,并且对那些不提供指针类型的语言(如 FORTRAN 语言 等)也容易实现。邻接表表示法对那些提供指针类型的语言(如 C 语言等)是方便的, 且增加或删除一条弧所需的计算工作量很少,而这一操作在星形表示法中所需的计算工 作量较大(需要花费 )(mO 的计算时间)。有关“计算时间”的观念是网络优化中需要 考虑的一个关键因素。 ② 当网络不是简单图,而是具有平行弧(即多重弧)时,显然此时邻接矩阵表示 法是不能采用的。其他方法则可以很方便地推广到可以处理平行弧的情形。 ③ 上述方法可以很方便地推广到可以处理无向图的情形,但由于无向图中边没有 方向,因此可能需要做一些自然的修改。例如,可以在计算机中只存储邻接矩阵的一半 信息(如上三角部分),因为此时邻接矩阵是对称矩阵。无向图的关联矩阵只含有元素 0 和 1+ ,而不含有 1− ,因为此时不区分边的起点和终点。又如,在邻接表和星形表示 法中,每条边会被存储两次,而且反向星形表示显然是没有必要的,等等。 2.7 轨与连通 kk veevevW L2110= ,其 中 )(GEei ∈ , ki ≤≤1 , )(GVv j ∈ , kj ≤≤0 , ie 与 -75- ii vv ,1− 关联,称W 是图G 的一条道路(walk),k 为路长,顶点 0v 和 kv 分别称为W 的起 点和终点,而 121 ,,, −kvvv L 称为它的内部顶点。 若道路W 的边互不相同,则W 称为迹(trail)。若道路W 的顶点互不相同,则W 称 为轨(path)。 称一条道路是闭的,如果它有正的长且起点和终点相同。起点和终点重合的轨叫做 圈(cycle)。 若图G 的两个顶点 vu, 间存在道路,则称u 和 v 连通(connected)。 vu, 间的最短轨 的长叫做 vu, 间的距离。记作 ),( vud 。若图G 的任二顶点均连通,则称G 是连通图。 显然有: (i) 图 P 是一条轨的充要条件是 P 是连通的,且有两个一度的顶点,其余顶点的度 为 2; (ii) 图C 是一个圈的充要条件是C 是各顶点的度均为 2 的连通图。 §3 应用—最短路问题 3.1 两个指定顶点之间的最短路径 问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间, 找一条最短铁路线。 以各城镇为图G 的顶点,两城镇间的直通铁路为图G 相应两顶点间的边,得图G 。 对G 的每一边 e ,赋以一个实数 )(ew —直通铁路的长度,称为 e 的权,得到赋权图G 。 G 的子图的权是指子图的各边的权和。问题就是求赋权图G 中指定的两个顶点 00 ,vu 间的具最小权的轨。这条轨叫做 00 ,vu 间的最短路,它的权叫做 00 ,vu 间的距离,亦记 作 ),( 00 vud 。 求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距 0u 从 近到远为顺序,依次求得 0u 到G 的各顶点的最短路和距离,直至 0v (或直至G 的所有 顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该 算法。 (i) 令 0)( 0 =ul ,对 0uv ≠ ,令 ∞=)(vl , }{ 00 uS = , 0=i 。 (ii) 对每个 iSv ∈ ( ii SVS \= ),用 )}()(),({min uvwulvl iSu + ∈ 代替 )(vl 。计算 )}({min vl iSv∈ ,把达到这个最小值的一个顶点记为 1+iu ,令 }{ 11 ++ = iii uSS U 。 (iii). 若 1|| −= Vi ,停止;若 1|| −< Vi ,用 1+i 代替i ,转(ii)。 算法结束时,从 0u 到各顶点 v 的距离由 v 的最后一次的标号 )(vl 给出。在 v 进入 iS 之前的标号 )(vl 叫 T 标号, v 进入 iS 时的标号 )(vl 叫 P 标号。算法就是不断修改各顶 点的 T 标号,直至获得 P 标号。若在算法运行过程中,将每一顶点获得 P 标号所由来 的边在图上标明,则算法结束时, 0u 至各项点的最短路也在图上标示出来了。 例 9 某公司在六个城市 621 ,,, ccc L 中有分公司,从 ic 到 jc 的直接航程票价记在 下述矩阵的 ),( ji 位置上。( ∞ 表示无直接航路),请帮助该公司设计一张城市 1c 到其它 -76- 城市间的票价最便宜的路线图。 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ∞ ∞ ∞∞ ∞ ∞ 055252510 550102025 25100102040 2010015 252015050 102540500 用矩阵 nna × ( n 为顶点个数)存放各边权的邻接矩阵,行向量 pb 、 1index 、 2index 、 d 分别用来存放 P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分 量 ⎩ ⎨ ⎧= 顶点未标号当第 顶点已标号当第 i iipb 0 1)( ; )(2 iindex 存放始点到第i 点最短通路中第i 顶点前一顶点的序号; )(id 存放由始点到第i 点最短通路的值。 求第一个城市到其它城市的最短路径的 Matlab 程序如下: clc,clear a=zeros(6); a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10; a(2,3)=15;a(2,4)=20;a(2,6)=25; a(3,4)=10;a(3,5)=20; a(4,5)=10;a(4,6)=25; a(5,6)=55; a=a+a'; a(find(a==0))=inf; pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a)); d(1:length(a))=inf;d(1)=0;temp=1; while sum(pb)a(i,k)+a(k,j) a(i,j)=a(i,k)+a(k,j); path(i,j)=k; end end end end a, path 我们使用LINGO9.0编写的FLOYD算法如下: model: sets: -80- nodes/c1..c6/; link(nodes,nodes):w,path; !path标志最短路径上走过的顶点; endsets data: path=0; w=0; @text(mydata1.txt)=@writefor(nodes(i):@writefor(nodes(j): @format(w(i,j),' 10.0f')),@newline(1)); @text(mydata1.txt)=@write(@newline(1)); @text(mydata1.txt)=@writefor(nodes(i):@writefor(nodes(j): @format(path(i,j),' 10.0f')),@newline(1)); enddata calc: w(1,2)=50;w(1,4)=40;w(1,5)=25;w(1,6)=10; w(2,3)=15;w(2,4)=20;w(2,6)=25; w(3,4)=10;w(3,5)=20; w(4,5)=10;w(4,6)=25;w(5,6)=55; @for(link(i,j):w(i,j)=w(i,j)+w(j,i)); @for(link(i,j) |i#ne#j:w(i,j)=@if(w(i,j)#eq#0,10000,w(i,j))); @for(nodes(k):@for(nodes(i):@for(nodes(j): tm=@smin(w(i,j),w(i,k)+w(k,j)); path(i,j)=@if(w(i,j)#gt# tm,k,path(i,j));w(i,j)=tm))); endcalc end §4 树 4.1 基本概念 连通的无圈图叫做树,记之为T 。若图G 满足 )()( TVGV = , )()( GETE ⊂ , 则称T 是G 的生成树。图G 连通的充分必要条件为G 有生成树。一个连通图的生成树 的个数很多,用 )(Gτ 表示G 的生成树的个数,则有公式 公式 (Caylay) 2)( −= n n nKτ 。 公式 )()()( eGeGG ⋅+−= τττ 。 其中 eG − 表示从G 上删除边 e , eG ⋅ 表示把 e 的长度收缩为零得到的图。 树有下面常用的五个充要条件。 定理 1 (i)G 是树当且仅当G 中任二顶点之间有且仅有一条轨道。 (ii)G 是树当且仅当G 无圈,且 1−=νε 。 (iii)G 是树当且仅当G 连通,且 1−=νε 。 (iv)G 是树当且仅当G 连通,且 )(GEe∈∀ , eG − 不连通。 (v)G 是树当且仅当G 无圈, )(GEe∉∀ , eG + 恰有一个圈。 4.2 应用—连线问题 欲修筑连接 n 个城市的铁路,已知i 城与 j 城之间的铁路造价为 ijC ,设计一个线 路图,使总造价最低。 连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具最小权的生 成树叫做最小生成树。 下面介绍构造最小生成树的两种常用算法。 4.2.1 prim 算法构造最小生成树 设置两个集合 P 和Q ,其中 P 用于存放G 的最小生成树中的顶点,集合Q 存放G -81- 的最小生成树中的边。令集合 P 的初值为 }{ 1vP = (假设构造最小生成树时,从顶点 1v 出发),集合Q 的初值为 Φ=Q 。prim 算法的思想是,从所有 Pp ∈ , PVv −∈ 的边 中,选取具有最小权值的边 pv ,将顶点 v 加入集合 P 中,将边 pv 加入集合Q 中,如 此不断重复,直到 VP = 时,最小生成树构造完毕,这时集合Q 中包含了最小生成树 的所有边。 prim 算法如下: (i) }{ 1vP = , Φ=Q ; (ii)while VP =~ 找最小边 pv ,其中 PVvPp −∈∈ , }{vPP += }{pvQQ += end 图 5 最小生成树问题 例 13 用 prim 算法求图 5 的最小生成树。 我们用 nresult ×3 的第一、二、三行分别表示生成树边的起点、终点、权集合。Matlab 程序如下: clc;clear; a=zeros(7); a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40; a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30;a(4,7)=42; a(5,6)=70; a=a+a';a(find(a==0))=inf; result=[];p=1;tb=2:length(a); while length(result)~=length(a)-1 temp=a(p,tb);temp=temp(:); d=min(temp); [jb,kb]=find(a(p,tb)==d); j=p(jb(1));k=tb(kb(1)); result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[]; end result 4.2.1 Kruskal 算法构造最小生成树 科茹斯克尔(Kruskal)算法是一个好算法。Kruskal 算法如下: (i)选 )(1 GEe ∈ ,使得 min)( 1 =ew 。 -82- (ii)若 ieee ,,, 21 L 已选好,则从 },,,{)( 21 ieeeGE L− 中选取 1+ie ,使得 ① }],,,,[{ 121 +ii eeeeG L 中无圈,且 ② min)( 1 =+iew 。 (iii)直到选得 1−νe 为止。 例 14 用 Kruskal 算法构造例 3 的最小生成树。 我们用 nindex ×2 存放各边端点的信息,当选中某一边之后,就将此边对应的顶点序 号中较大序号u 改记为此边的另一序号 v ,同时把后面边中所有序号为u 的改记为 v 。 此方法的几何意义是:将序号u 的这个顶点收缩到 v 顶点,u 顶点不复存在。后面继续 寻查时,发现某边的两个顶点序号相同时,认为已被收缩掉,失去了被选取的资格。 Matlab 程序如下: clc;clear; a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40; a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30; a(4,7)=42; a(5,6)=70; [i,j,b]=find(a); data=[i';j';b'];index=data(1:2,:); loop=max(size(a))-1; result=[]; while length(result) 的对集 'M ,则 M 称为最大对集;若G 中有一轨,其边交替地在对集 M 内外出现,则 称此轨为 M 的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。 若把可增广轨上在 M 外的边纳入对集,把 M 内的边从对集中删除,则被许配的 顶点数增加 2,对集中的“对儿”增加一个。 1957 年,贝尔热(Berge)得到最大对集的充要条件: 定理 2 M 是图G 中的最大对集当且仅当G 中无 M 可增广轨。 1935 年,霍尔(Hall)得到下面的许配定理: 定理 3 G 为二分图, X 与Y 是顶点集的划分,G 中存在把 X 中顶点皆许配的 -83- 对集的充要条件是, XS ⊂∀ ,则 |||)(| SSN ≥ ,其中 )(SN 是 S 中顶点的邻集。 由上述定理可以得出: 推论 1:若G 是 k 次( )0>k 正则 2 分图,则G 有完美对集。 所谓 k 次正则图,即每顶点皆 k 度的图。 由此推论得出下面的婚配定理: 定理 4 每个姑娘都结识 )1( ≥kk 位小伙子,每个小伙子都结识 k 位姑娘,则每位 姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。 人员分派问题等实际问题可以化成对集来解决。 人员分派问题:工作人员 nxxx ,,, 21 L 去做 n 件工作 nyyy ,,, 21 L ,每人适合做其 中一件或几件,问能否每人都有一份适合的工作?如果不能,最多几人可以有适合的工 作? 这个问题的数学模型是:G 是二分图,顶点集划分为 YXGV U=)( , },,{ 1 nxxX L= , },,{ 1 nyyY L= ,当且仅当 ix 适合做工作 jy 时, )(GEyx ji ∈ ,求 G 中的最大对集。 解决这个问题可以利用 1965 年埃德门兹(Edmonds)提出的匈牙利算法。 匈牙利算法: (i)从G 中任意取定一个初始对集 M 。 (ii)若 M 把 X 中的顶点皆许配,停止,M 即完美对集;否则取 X 中未被 M 许 配的一顶点u ,记 }{uS = , Φ=T 。 (iii)若 TSN =)( ,停止,无完美对集;否则取 TSNy −∈ )( 。 (iv)若 y 是被 M 许配的,设 Myz ∈ , }{zSS U= , }{yTT U= ,转(iii); 否则,取可增广轨 ),( yuP ,令 ))(())(( MPEPEMM −−= U ,转(ii)。 把以上算法稍加修改就能够用来求二分图的最大完美对集。 最优分派问题:在人员分派问题中,工作人员适合做的各项工作当中,效益未必一 致,我们需要制定一个分派方案,使公司总效益最大。 这个问题的数学模型是:在人员分派问题的模型中,图G 的每边加了权 0)( ≥ji yxw ,表示 ix 干 jy 工作的效益,求加权图G 上的权最大的完美对集。 解决这个问题可以用库恩—曼克莱斯(Kuhn-Munkres)算法。为此,我们要引入 可行顶点标号与相等子图的概念。 定义 若映射 RGVl →)(: ,满足 YyXx ∈∈∀ , , ),()()( yxwylxl ≥+ , 则称l 是二分图G 的可行顶点标号。令 )}()()(),(|{ xywylxlGExyxyEl =+∈= , 称以 lE 为边集的G 的生成子图为相等子图,记作 lG 。 可行顶点标号是存在的。例如 ;),(max)( Xxxywxl Yy ∈= ∈ Yyyl ∈= ,0)( 。 定理 5 lG 的完美对集即为G 的权最大的完美对集。 Kuhn-Munkres 算法 -84- (i)选定初始可行顶点标号l ,确定 lG ,在 lG 中选取一个对集 M 。 (ii)若 X 中顶点皆被 M 许配,停止,M 即G 的权最大的完美对集;否则,取 lG 中未被 M 许配的顶点u ,令 }{uS = , Φ=T 。 (iii)若 TSN lG ⊃)( ,转(iv);若 TSN lG =)( ,取 )}()()({min , xywylxl TySxl −+= ∉∈ α , ⎪⎩ ⎪⎨ ⎧ ∈+ ∈− = 其它),( ,)( ,)( )( vl Tvvl Svvl vl l l α α , ll = , ll GG = 。 (iv)选 TSN lG −)( 中一顶点 y ,若 y 已被 M 许配,且 Myz ∈ ,则 }{zSS U= , }{yTT U= ,转(iii);否则,取 lG 中一个 M 可增广轨 ),( yuP ,令 ))(())(( MPEPEMM −−= U , 转(ii)。 其中 )(SN lG 是 lG 中 S 的相邻顶点集。 §6 Euler 图和 Hamilton 图 6.1 基本概念 定义 经过G 的每条边的迹叫做G 的 Euler 迹;闭的 Euler 迹叫做 Euler 回路或 E 回路;含 Euler 回路的图叫做 Euler 图。 直观地讲,Euler 图就是从一顶点出发每边恰通过一次能回到出发点的那种图,即 不重复地行遍所有的边再回到出发点。 定理 6 (i)G 是 Euler 图的充分必要条件是G 连通且每顶点皆偶次。 ( ii ) G 是 Euler 图的充分必要条件是G 连通且 U d i iCG 1= = , iC 是圈, )()()( jiCECE ji ≠Φ=I 。 (iii)G 中有 Euler 迹的充要条件是G 连通且至多有两个奇次点。 定义 包含G 的每个顶点的轨叫做 Hamilton(哈密顿)轨;闭的 Hamilton 轨叫做 Hamilton 圈或 H 圈;含 Hamilton 圈的图叫做 Hamilton 图。 直观地讲,Hamilton 图就是从一顶点出发每顶点恰通过一次能回到出发点的那种 图,即不重复地行遍所有的顶点再回到出发点。 6.2 Euler 回路的 Fleury 算法 1921 年,Fleury 给出下面的求 Euler 回路的算法。 Fleury 算法: 1o. )(0 GVv ∈∀ ,令 00 vW = 。 2o. 假设迹 iii vevevW L110= 已经选定,那么按下述方法从 },,{ 1 ieeE L− 中选取 边 1+ie : (i) 1+ie 和 iv 相关联; -85- (ii)除非没有别的边可选择,否则 1+ie 不是 },,{ 1 ii eeGG L−= 的割边(cut edge)。 (所谓割边是一条删除后使连通图不再连通的边)。 3o. 当第 2 步不能再执行时,算法停止。 6.3 应用 6.3.1 邮递员问题 中国邮递员问题 一位邮递员从邮局选好邮件去投递,然后返回邮局,当然他必须经过他负责投递的 每条街道至少一次,为他设计一条投递路线,使得他行程最短。 上述中国邮递员问题的数学模型是:在一个赋权连通图上求一个含所有边的回路, 且使此回路的权最小。 显然,若此连通赋权图是 Euler 图,则可用 Fleury 算法求 Euler 回路,此回路即为 所求。 对于非 Euler 图,1973 年,Edmonds 和 Johnson 给出下面的解法: 设G 是连通赋权图。 (i)求 )}2(mod1)(),(|{0 =∈= vdGVvvV 。 (ii)对每对顶点 0, Vvu ∈ ,求 ),( vud ( ),( vud 是u 与 v 的距离,可用 Floyd 算法 求得)。 (iii)构造完全赋权图 || 0VK ,以 0V 为顶点集,以 ),( vud 为边uv 的权。 (iv)求 || 0VK 中权之和最小的完美对集 M 。 (v)求 M 中边的端点之间的在G 中的最短轨。 (vi)在(v)中求得的每条最短轨上每条边添加一条等权的所谓“倍边”(即共端 点共权的边)。 (vii)在(vi)中得的图 'G 上求 Euler 回路即为中国邮递员问题的解。 多邮递员问题: 邮局有 )2( ≥kk 位投递员,同时投递信件,全城街道都要投递,完成任务返回邮 局,如何分配投递路线,使得完成投递任务的时间最早?我们把这一问题记成 kPP。 kPP 的数学模型如下: ),( EVG 是连通图, )(0 GVv ∈ ,求G 的回路 kCC ,,1 L ,使得 (i) )(0 iCVv ∈ , ki ,,2,1 L= , (ii) min)(max )(1 =∑ ∈≤≤ iCEeki ew , (iii)U k i i GECE 1 )()( = = 6.3.2 旅行商(TSP)问题 一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条 最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这个问题称 为旅行商问题。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的 Hamilton 圈。称这种圈为最优圈。与最短路问题及连线问题相反,目前还没有求解旅行 商问题的有效算法。所以希望有一个方法以获得相当好(但不一定最优)的解。 一个可行的办法是首先求一个 Hamilton 圈C ,然后适当修改C 以得到具有较小权 的另一个 Hamilton 圈。修改的方法叫做改良圈算法。设初始圈 121 vvvvC nL= 。 -86- (i)对于 nji <<+< 11 ,构造新的 Hamilton 圈: 12112121 vvvvvvvvvvvC njjijjjiij LLL +++−−= , 它是由C 中删去边 1+iivv 和 1+jjvv ,添加边 jivv 和 11 ++ ji vv 而得到的。若 )()()()( 1111 ++++ +<+ jjiijiji vvwvvwvvwvvw ,则 以 ijC 代替C , ijC 叫做C 的改良圈。 (ii)转(i),直至无法改进,停止。 用改良圈算法得到的结果几乎可以肯定不是最优的。为了得到更高的精确度,可以 选择不同的初始圈,重复进行几次算法,以求得较精确的结果。 这个算法的优劣程度有时能用 Kruskal 算法加以说明。假设C 是G 中的最优圈。 则对于任何顶点 v , vC − 是在 vG − 中的 Hamilton 轨,因而也是 vG − 的生成树。由 此推知:若T 是 vG − 中的最优树,同时 e 和 f 是和 v 关联的两条边,并使得 )()( fwew + 尽可能小,则 )()()( fwewTw ++ 将是 )(Cw 的一个上界。 这里介绍的方法已被进一步发展。圈的修改过程一次替换三条边比一次仅替换两条 边更为有效;然而,有点奇怪的是,进一步推广这一想法,就不对了。 例 15 从北京(Pe)乘飞机到东京(T)、纽约(N)、墨西哥城(M)、伦敦(L)、巴黎(Pa) 五城市做旅游,每城市恰去一次再回北京,应如何安排旅游线,使旅程最短?各城市之 间的航线距离如表 7。 表 7 六城市间的距离 L M N Pa Pe T L 56 35 21 51 60 M 56 21 57 78 70 N 35 21 36 68 68 Pa 21 57 36 51 61 Pe 51 78 68 51 13 T 60 70 68 61 13 解:编写程序如下: function main clc,clear global a a=zeros(6); a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60; a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70; a(3,4)=36;a(3,5)=68;a(3,6)=68; a(4,5)=51;a(4,6)=61; a(5,6)=13; a=a+a'; L=size(a,1); c1=[5 1:4 6]; [circle,long]=modifycircle(c1,L); c2=[5 6 1:4];%改变初始圈,该算法的最后一个顶点不动 [circle2,long2]=modifycircle(c2,L); if long20 flag=0; for m=1:L-3 for n=m+2:L-1 if a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<... a(c1(m),c1(m+1))+a(c1(n),c1(n+1)) flag=1; c1(m+1:n)=c1(n:-1:m+1); end end end end long=a(c1(1),c1(L)); for i=1:L-1 long=long+a(c1(i),c1(i+1)); end circle=c1; 6.3.3 旅行商问题的数学表达式 设城市的个数为 n , ijd 是两个城市i 与 j 之间的距离, 0=ijx 或 1(1 表示走过城 市i 到城市 j 的路,0 表示没有选择走这条路)。则有 ∑ ≠ ji ijij xdmin s.t. 1 1 =∑ = n j ijx , ni ,,2,1 L= ,(每个点只有一条边出去) 1 1 =∑ = n i ijx , nj ,,2,1 L= ,(每个点只有一条边进去) 1|| , −≤∑ ∈ sx sji ij , 1||2 −≤≤ ns , },,2,1{ ns L⊂ (除起点和终点外,各边不构成圈) }1,0{∈ijx , nji ,,2,1, L= , ji ≠ 。 其中 || s 表示集合 s 中元素个数。 将旅行商问题写成数学规划的具体形式还需要一定的技巧,下面的例子我们引用 LINGO 帮助中的一个程序。 例 16 已知 SV 地区各城镇之间距离见表 8,某公司计划在 SV 地区做广告宣传, 推销员从城市 1 出发,经过各个城镇,再回到城市 1。为节约开支,公司希望推销员走 过这 10 个城镇的总距离最少。 表 8 城镇之间的距离 2 3 4 5 6 7 8 9 10 1 8 5 9 12 14 12 16 17 22 2 9 15 17 8 11 18 14 22 3 7 9 11 7 12 12 17 4 3 17 10 7 15 18 -88- 5 8 10 6 15 15 6 9 14 8 16 7 8 6 11 8 11 11 9 10 解 编写 LINGO 程序如下: MODEL: SETS: CITY / 1.. 10/: U; ! U( I) = sequence no. of city; LINK( CITY, CITY): DIST, ! The distance matrix; X; ! X( I, J) = 1 if we use link I, J; ENDSETS DATA: !Distance matrix, it need not be symmetric; DIST =0 8 5 9 12 14 12 16 17 22 8 0 9 15 17 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 18 12 17 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10 22 22 17 18 15 16 11 11 10 0; ENDDATA !The model:Ref. Desrochers & Laporte, OR Letters, Feb. 91; N = @SIZE( CITY); MIN = @SUM( LINK: DIST * X); @FOR( CITY( K): ! It must be entered; @SUM( CITY( I)| I #NE# K: X( I, K)) = 1; ! It must be departed; @SUM( CITY( J)| J #NE# K: X( K, J)) = 1; ! Weak form of the subtour breaking constraints; ! These are not very powerful for large problems; @FOR( CITY( J)| J #GT# 1 #AND# J #NE# K: U( J) >= U( K) + X ( K, J) - ( N - 2) * ( 1 - X( K, J)) + ( N - 3) * X( J, K))); ! Make the X's 0/1; @FOR( LINK: @BIN( X)); ! For the first and last stop we know...; @FOR( CITY( K)| K #GT# 1: U( K) <= N - 1 - ( N - 2) * X( 1, K); U( K) >= 1 + ( N - 2) * X( K, 1)); END §7 最大流问题 7.1 最大流问题的数学描述 7.1.1 网络中的流 定义 在以V 为节点集, A 为弧集的有向图 ),( AVG = 上定义如下的权函数: -89- (i) RAL →: 为孤上的权函数,弧 Aji ∈),( 对应的权 ),( jiL 记为 ijl ,称为孤 ),( ji 的容量下界(lower bound); (ii) RAU →: 为弧上的权函数,弧 Aji ∈),( 对应的权 ),( jiU 记为 iju ,称为孤 ),( ji 的容量上界,或直接称为容量(capacity); (iii) RVD →: 为顶点上的权函数,节点 Vi ∈ 对应的权 )(iD 记为 id ,称为顶 点i 的供需量(supply/demand); 此时所构成的网络称为流网络,可以记为 ),,,,( DULAVN = 。 由于我们只讨论 AV, 为有限集合的情况,所以对于弧上的权函数 UL, 和顶点上的 权函数 D ,可以直接用所有孤上对应的权和顶点上的权组成的有限维向量表示,因此 DUL ,, 有时直接称为权向量,或简称权。由于给定有向图 ),( AVG = 后,我们总是可 以在它的弧集合和顶点集合上定义各种权函数,所以流网络一般也直接简称为网络。 在流网络中,弧 ),( ji 的容量下界 ijl 和容量上界 iju 表示的物理意义分别是:通过该 弧发送某种“物质”时,必须发送的最小数量为 ijl ,而发送的最大数量为 iju 。顶点 Vi ∈ 对应的供需量 id 则表示该顶点从网络外部获得的“物质”数量( 0>id 时),或从该顶 点发送到网络外部的“物质”数量( 0id 时,表示有 id 个单位的流量从网络外部流入该顶点,因此顶点i 称 为供应点(supply node)或源(source),有时也形象地称为起始点或发点等;当 0ijf ,则称这条轨 P 为从 s 到t 的关于 f 的可增广轨。 令 ⎩ ⎨ ⎧ − = 为后向弧当 为前向弧当 ( ( ),, ),, jif jifu ij ijij ijδ , }min{ ijδδ = 则在这条可增广轨上每条前向弧的流都可以增加一个量δ ,而相应的后向弧的流可减 少δ ,这样就可使得网络的流量获得增加,同时可以使每条弧的流量不超过它的容量, 而且保持为正,也不影响其它弧的流量。总之,网络中 f 可增广轨的存在是有意义的, 因为这意味着 f 不是最大流。 7.3 最大流的一种算法—标号法 标号法是由 Ford 和 Fulkerson 在 1957 年提出的。用标号法寻求网络中最大流的基 本思想是寻找可增广轨,使网络的流量得到增加,直到最大为止。即首先给出一个初始 流,这样的流是存在的,例如零流。如果存在关于它的可增广轨,那么调整该轨上每条 弧上的流量,就可以得到新的流。对于新的流,如果仍存在可增广轨,则用同样的方法 使流的值增大,继续这个过程,直到网络中不存在关于新得到流的可增广轨为止,则该 流就是所求的最大流。 这种方法分为以下两个过程: A.标号过程:通过标号过程寻找一条可增广轨。 B.增流过程:沿着可增广轨增加网络的流量。 这两个过程的步骤分述如下。 -92- (A)标号过程: (i)给发点标号为 ),( ∞+s 。 (ii)若顶点 x 已经标号,则对 x 的所有未标号的邻接顶点 y 按以下规则标号: ① 若 Ayx ∈),( ,且 xyxy uf < 时,令 },min{ xxyxyy fu δδ −= , 则给顶点 y 标号为 ),( yx δ+ ,若 xyxy uf = ,则不给顶点 y 标号。 ② Axy ∈),( ,且 0>yxf ,令 },min{ xyxy f δδ = ,则给 y 标号为 ),( yx δ− ,若 0=yxf ,则不给 y 标号。 (iii)不断地重复步骤(ii)直到收点t 被标号,或不再有顶点可以标号为止。当t 被标号时,表明存在一条从 s 到t 的可增广轨,则转向增流过程(B)。如若t 点不能被 标号,且不存在其它可以标号的顶点时,表明不存在从 s 到t 的可增广轨,算法结束, 此时所获得的流就是最大流。 (B)增流过程 (i)令 tu = 。 (ii)若u 的标号为 tv δ,( + ),则 tvuvu ff δ+= ;若u 的标号为 ),( tv δ− ,则 tuvuv ff δ−= 。 (iii)若 su = ,把全部标号去掉,并回到标号过程(A)。否则,令 vu = ,并回 到增流过程(ii)。 求网络 ),,,,( UAVtsN = 中的最大流 x 的算法的程序设计具体步骤如下: 对每个节点 j ,其标号包括两部分信息 f(j))max),(pred( j 该节点在可能的增广路中的前一个节点 )(pred j ,以及沿该可能的增广路到该节点为止 可以增广的最大流量 )(fmax j 。 STEP0 置初始可行流 x (如零流);对节点t 标号,即令 )(fmax t =任意正值(如 1)。 STEP1 若 0)(fmax >t ,继续下一步;否则停止,已经得到最大流,结束。 STEP2 取消所有节点 Vj ∈ 的标号,即令 0)(fmax =j , 0)(pred =j ;令 LIST={ s },对节点 s 标号,即令 =)(fmax s 充分大的正值。 STEP3 如果 LIST Φ≠ 且 0)(fmax =t ,继续下一步;否则:(3a)如果t 已经有 标号(即 0)(fmax >t ),则找到了一条增广路,沿该增广路对流 x 进行增广(增广的 流量为 )(fmax t ,增广路可以根据 pred 回溯方便地得到),转 STEP1。 (3b)如果t 没有标号(即 LIST= Φ 且 0)(fmax =t ),则停止,已得到最大流。 STEP4 从 LIST 中移走一个节点i ;寻找从节点i 出发的所有可能的增广弧:(4a) 对非饱和前向弧 ),( ji ,若节点 j 没有标号(即 0)(pred =j ),对 j 进行标号,即令 },)f(min{max)(fmax ijij xuij −= , ij =)(pred , 并将 j 加入 LIST 中。 (4b)对非空后向弧 ),( ij ,若节点 j 没有标号(即 0)(pred =j ),对 j 进行标号, 即令 },)f(min{max)(fmax ijxij = , ij −=)(pred , -93- 并将 j 加入 LIST 中。 例 17 用 Ford-Fulkerson 算法计算如图 6 网络中的最大流,每条弧上的两个数字分 别表示容量和当前流量。 图 6 最大流问题 解 编写程序如下: clc,clear u(1,2)=1;u(1,3)=1;u(1,4)=2;u(2,3)=1;u(2,5)=2; u(3,5)=1;u(4,3)=3;u(4,5)=3; f(1,2)=1;f(1,3)=0;f(1,4)=1;f(2,3)=0;f(2,5)=1; f(3,5)=1;f(4,3)=1;f(4,5)=0; n=length(u);list=[];maxf(n)=1; while maxf(n)>0 maxf=zeros(1,n);pred=zeros(1,n); list=1;record=list;maxf(1)=inf; %list是未检查邻接点的标号点,record是已标号点 while (~isempty(list))&(maxf(n)==0) flag=list(1);list(1)=[]; label1= find(u(flag,:)-f(flag,:)); label1=setdiff(label1,record); list=union(list,label1); pred(label1)=flag; maxf(label1)=min(maxf(flag),u(flag,label1)... -f(flag,label1)); record=union(record,label1); label2=find(f(:,flag)); label2=label2'; label2=setdiff(label2,record); list=union(list,label2); pred(label2)=-flag; maxf(label2)=min(maxf(flag),f(label2,flag)); record=union(record,label2); end if maxf(n)>0 v2=n; v1=pred(v2); while v2~=1 if v1>0 f(v1,v2)=f(v1,v2)+maxf(n); else v1=abs(v1); f(v2,v1)=f(v2,v1)-maxf(n); end v2=v1; v1=pred(v2); end end end f -94- 例18 现需要将城市 s 的石油通过管道运送到城市t ,中间有4个中转站 321 ,, vvv 和 4v ,城市与中转站的连接以及管道的容量如图7所示,求从城市 s 到城市t 的最大流。 图7 最大流问题 解 使用最大流的数学规划表达式,编写LINGO程序如下: model: sets: nodes/s,1,2,3,4,t/; arcs(nodes,nodes)/s 1,s 3,1 2,1 3,2 3,2 t,3 4,4 2,4 t/:c,f; endsets data: c=8 7 9 5 2 5 9 6 10; enddata n=@size(nodes); !顶点的个数; max=flow; @for(nodes(i)|i #ne#1 #and# i #ne# n: @sum(arcs(i,j):f(i,j))=@sum(arcs(j,i):f(j,i))); @sum(arcs(i,j)|i #eq# 1:f(i,j))=flow; @sum(arcs(i,j)|j #eq# n:f(i,j))=flow; @for(arcs:@bnd(0,f,c)); end 在上面的程序中,采用了稀疏集的编写方法。下面介绍的程序编写方法是利用赋权邻 接矩阵,这样可以不使用稀疏集的编写方法,更便于推广到复杂网络。 model: sets: nodes/s,1,2,3,4,t/; arcs(nodes,nodes):c,f; endsets data: c=0; @text('fdata.txt')=f; enddata calc: c(1,2)=8;c(1,4)=7; c(2,3)=9;c(2,4)=5; c(3,4)=2;c(3,6)=5; c(4,5)=9;c(5,3)=6;c(5,6)=10; endcalc n=@size(nodes); !顶点的个数; max=flow; @for(nodes(i)|i #ne#1 #and# i #ne# n: @sum(nodes(j):f(i,j))=@sum(nodes(j):f(j,i))); @sum(nodes(i):f(1,i))=flow; @sum(nodes(i):f(i,n))=flow; @for(arcs:@bnd(0,f,c)); end -95- §8 最小费用流及其求法 8.1 最小费用流 上面我们介绍了一个网络上最短路以及最大流的算法,但是还没有考虑到网络上流 的费用问题,在许多实际问题中,费用的因素很重要。例如,在运输问题中,人们总是 希望在完成运输任务的同时,寻求一个使总的运输费用最小的运输方案。这就是下面要 介绍的最小费用流问题。 在运输网络 ),,,,( UAVtsN = 中,设 ijc 是定义在 A 上的非负函数,它表示通过弧 ),( ji 单位流的费用。所谓最小费用流问题就是从发点到收点怎样以最小费用输送一已 知量为 )( fv 的总流量。 最小费用流问题可以用如下的线性规划问题描述: ∑ ∈Aji ijij fc ),( min s.t. ∑∑ ∈∈ =− Aijj iji Ajij ij dff ),(:),(: , Ajiuf ijij ∈∀≤≤ ),(,0 . 其中 ⎪⎩ ⎪⎨ ⎧ ≠ =− = = tsi tifv sifv di ,,0 ),( ),( 显然,如果 =)( fv 最大流 )( maxfv ,则本问题就是最小费用最大流问题。如果 )()( maxfvfv > ,则本问题无解。 例 19(最小费用最大流问题)(续例 18)由于输油管道的长短不一或地质等原因, 使每条管道上运输费用也不相同,因此,除考虑输油管道的最大流外,还需要考虑输油 管道输送最大流的最小费用。图 8 所示是带有运费的网络,其中第 1 个数字是网络的容 量,第 2 个数字是网络的单位运费。 图 8 最小费用最大流问题 解 按照最小费用流的数学规划写出相应的 LINGO 程序如下: model: sets: nodes/s,1,2,3,4,t/:d; arcs(nodes,nodes)/s 1,s 3,1 2,1 3,2 3,2 t,3 4,4 2,4 t/:c,u,f; endsets data: d=14 0 0 0 0 -14; !最大流为14; c=2 8 2 5 1 6 3 4 7; u=8 7 9 5 2 5 9 6 10; enddata min=@sum(arcs:c*f); -96- @for(nodes(i):@sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=d(i)); @for(arcs:@bnd(0,f,u)); end 求得最大流的最小费用是 205,而原最大流的费用为 210 单位,原方案并不是最优 的。 类似地,可以利用赋权邻接矩阵编程求得最小费用最大流。LINGO 程序如下: model: sets: nodes/s,1,2,3,4,t/:d; arcs(nodes,nodes):c,u,f; endsets data: d=14 0 0 0 0 -14; c=0; u=0; enddata calc: c(1,2)=2;c(1,4)=8; c(2,3)=2;c(2,4)=5; c(3,4)=1;c(3,6)=6; c(4,5)=3;c(5,3)=4;c(5,6)=7; u(1,2)=8;u(1,4)=7; u(2,3)=9;u(2,4)=5; u(3,4)=2;u(3,6)=5; u(4,5)=9;u(5,3)=6;u(5,6)=10; endcalc min=@sum(arcs:c*f); @for(nodes(i):@sum(nodes(j):f(i,j))-@sum(nodes(j):f(j,i))=d(i)); @for(arcs:@bnd(0,f,u)); end 8.2 求最小费用流的一种方法—迭代法 这里所介绍的求最小费用流的方法叫做迭代法。这个方法是由 Busacker 和 Gowan 在 1961 年提出的。其主要步骤如下: (i)求出从发点到收点的最小费用通路 ),( tsμ 。 (ii)对该通路 ),( tsμ 分配最大可能的流量: }{min ),(),( ijtsji uf μ∈ = 并让通路上的所有边的容量相应减少 f 。这时,对于通路上的饱和边,其单位流费用 相应改为 ∞ 。 (iii)作该通路 ),( tsμ 上所有边 ),( ji 的反向边 ),( ij 。令 fu ji = , ijji cc −= (iv)在这样构成的新网络中,重复上述步骤(i),(ii),(iii),直到从发点到收点的全 部流量等于 )( fv 为止(或者再也找不到从 s 到t 的最小费用道路)。 下面我们编写了最小费用最大流函数 mincostmaxflow,其中调用了利用 Floyd 算法 求最短路的函数 floydpath。 求解例 19 具体程序如下(下面的全部程序放在一个文件中): function mainexample19 clear;clc; -97- global M num c=zeros(6);u=zeros(6); c(1,2)=2;c(1,4)=8;c(2,3)=2;c(2,4)=5; c(3,4)=1;c(3,6)=6;c(4,5)=3;c(5,3)=4;c(5,6)=7; u(1,2)=8;u(1,4)=7;u(2,3)=9;u(2,4)=5; u(3,4)=2;u(3,6)=5;u(4,5)=9;u(5,3)=6;u(5,6)=10; num=size(u,1);M=sum(sum(u))*num^2; [f,val]=mincostmaxflow(u,c) %求最短路径函数 function path=floydpath(w); global M num w=w+((w==0)-eye(num))*M; p=zeros(num); for k=1:num for i=1:num for j=1:num if w(i,j)>w(i,k)+w(k,j) w(i,j)=w(i,k)+w(k,j); p(i,j)=k; end end end end if w(1,num) ==M path=[]; else path=zeros(num); s=1;t=num;m=p(s,t); while ~isempty(m) if m(1) s=[s,m(1)];t=[t,t(1)];t(1)=m(1); m(1)=[];m=[p(s(1),t(1)),m,p(s(end),t(end))]; else path(s(1),t(1))=1;s(1)=[];m(1)=[];t(1)=[]; end end end %最小费用最大流函数 function [flow,val]=mincostmaxflow(rongliang,cost,flowvalue); %第一个参数:容量矩阵;第二个参数:费用矩阵; %前两个参数必须在不通路处置零 %第三个参数:指定容量值(可以不写,表示求最小费用最大流) %返回值 flow 为可行流矩阵,val 为最小费用值 global M flow=zeros(size(rongliang));allflow=sum(flow(1,:)); if nargin<3 flowvalue=M; end -98- while allflow0).*cost)'; path=floydpath(w);%调用 floydpath 函数 if isempty(path) val=sum(sum(flow.*cost)); return; end theta=min(min(path.*(rongliang-flow)+(path.*(rongliang-flow)==0).*M)); theta=min([min(path'.*flow+(path'.*flow==0).*M),theta]); flow=flow+(rongliang>0).*(path-path').*theta; allflow=sum(flow(1,:)); end val=sum(sum(flow.*cost)); §9 计划评审方法和关键路线法 计划评审方法(program evaluation and review technique, PERT)和关键路线法 (critical path method, CPM)是网络分析的重要组成部分,它广泛地用于系统分析和项 目管理。计划评审与关键路线方法是在 20 世纪 50 年代提出并发展起来的,1956 年, 美国杜邦公司为了协调企业不同业务部门的系统规划,提出了关键路线法。1958 年, 美国海军武装部在研制“北极星”导弹计划时,由于导弹的研制系统过于庞大、复杂, 为找到一种有效的管理方法,设计了计划评审方法。由于 PERT 与 CPM 既有着相同的 目标应用,又有很多相同的术语,这两种方法已合并为一种方法,在国外称为 PERT/CPM,在国内称为统筹方法(scheduling method)。 9.1 计划网络图 例 20 某项目工程由 11 项作业组成(分别用代号 KJBA ,,,, L 表示),其计划完 成时间及作业间相互关系如表 9 所示,求完成该项目的最短时间。 表 9 作业流程数据 作业 计划完成时间(天) 紧前作业 作业 计划完成时间(天) 紧前作业 A 5 - B 10 - C 11 - D 4 B E 4 A F 15 DC, G 21 EB, H 35 EB, I 25 EB, J 15 IGF ,, K 20 GF, 例 20 就是计划评审方法或关键路线法需要解决的问题。 9.1.1 计划网络图的概念 定义 称任何消耗时间或资源的行动称为作业。称作业的开始或结束为事件,事 件本身不消耗资源。 在计划网络图中通常用圆圈表示事件,用箭线表示工作,如图 9 所示,1,2,3 表 示事件, BA, 表示作业。由这种方法画出的网络图称为计划网络图。 图 9 计划网络图的基本画法 -99- 虚工作用虚箭线“……→”表示。它表示工时为零,不消耗任何资源的虚构工作。 其作用只是为了正确表示工作的前行后继关系。 定义 在计划网络图中,称从初始事件到最终事件的由各项工作连贯组成的一条 路为路线。具有累计作业时间最长的路线称为关键路线。 由此看来,例 20 就是求相应的计划网络图中的关键路线。 9.1.2 建立计划网络图应注意的问题 (1)任何作业在网络中用唯一的箭线表示,任何作业其终点事件的编号必须大于 其起点事件。 (2)两个事件之间只能画一条箭线,表示一项作业。对于具有相同开始和结束事 件的两项以上的作业,要引进虚事件和虚作业。 (3)任何计划网络图应有唯一的最初事件和唯一的最终事件。 (4)计划网络图不允许出现回路。 (5)计划网络图的画法一般是从左到右,从上到下,尽量作到清晰美观,避免箭 头交叉。 9.2 时间参数 9.2.1 事件时间参数 (1)事件的最早时间 事件 j 的最早时间用 )( jtE 表示,它表明以它为始点的各工作最早可能开始的时 间,也表示以它为终点的各工作的最早可能完成时间,它等于从始点事件到该事件的最 长路线上所有工作的工时总和。事件最早时间可用下列递推公式,按照事件编号从小到 大的顺序逐个计算。 设事件编号为 n,,2,1 L ,则 ⎪⎩ ⎪⎨ ⎧ += = )},()({max)( 0)1( jititjt t EiE E (6) 其中 )(itE 是与事件 j 相邻的各紧前事件的最早时间, ),( jit 是作业 ),( ji 所需的工时。 终点事件的最早时间显然就是整个工程的总最早完工期,即 =)(ntE 总最早完工期 (7) (2)事件的最迟时间 事件i 的最迟时间用 )(itL 表示,它表明在不影响任务总工期条件下,以它为始点 的工作的最迟必须开始时间,或以它为终点的各工作的最迟必须完成时间。由于一般情 况下,我们都把任务的最早完工时间作为任务的总工期,所以事件最迟时间的计算公式 为: ⎪⎩ ⎪⎨ ⎧ −= = )},()({min)( )()( jitjtit ntnt LjL EL )总工期(或 (8) 其中 )( jtL 是与事件i 相邻的各紧后事件的最迟时间。 公式(8)也是递推公式,但与(6)相反,是从终点事件开始,按编号由大至小的 顺序逐个由后向前计算。 9.2.2 工作的时间参数 (1)工作的最早可能开工时间与工作的最早可能完工时间 一个工作 ),( ji 的最早可能开工时间用 ),( jitES 表示。任何一件工作都必须在其所 -100- 有紧前工作全部完工后才能开始。工作 ),( ji 的最早可能完工时间用 ),( jitEF 表示。它 表示工作按最早开工时间开始所能达到的完工时间。它们的计算公式为: ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ += += = ),(),(),( )},(),({max),( 0),1( jitjitjit iktiktjit jt ESEF ESkES ES (9) 这组公式也是递推公式。即所有从总开工事件出发的工作 ),1( j ,其最早可能开工 时间为零;任一工作 ),( ji 的最早开工时间要由它的所有紧前工作 ),( ik 的最早开工时间 决定;工作 ),( ji 的最早完工时间显然等于其最早开工时间与工时之和。 (2)工作的最迟必须开工时间与工作的最迟必须完工时间 一个工作 ),( ji 的最迟开工时间用 ),( jitLS 表示。它表示工作 ),( ji 在不影响整个任 务如期完成的前提下,必须开始的最晚时间。 工作 ),( ji 的最迟必须完工时间用 ),( jitLF 表示。它表示工作 ),( ji 按最迟时间开 工,所能达到的完工时间。它们的计算公式为: ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ += −= = ),(),(),( )},(),({min),( ),(),( jitjitjit jitkjtjit nitnit LSLF LSkLS EFLF )总完工期(或 (10) 这组公式是按工作的最迟必须开工时间由终点向始点逐个递推的公式。凡是进入 总完工事件 n 的工作 ),( ni ,其最迟完工时间必须等于预定总工期或等于这个工作的最 早可能完工时间。任一工作 ),( ji 的最迟必须开工时间由它的所有紧后工作 ),( kj 的最 迟开工时间确定。而工作 ),( ji 的最迟完工时间显然等于本工作的最迟开工时间与工时 的和。 由于任一个事件i (除去始点事件和终点事件),既表示某些工作的开始又表示某 些工作的结束。所以从事件与工作的关系考虑,用公式(9),公式(10)求得的有关工 作的时间参数也可以通过事件的时间参数公式(6),公式(8)来计算。如工作 ),( ji 的 最早可能开工时间 ),( jitES 就等于事件i 的最早时间 )(itE 。工作 ),( ji 的最迟必须完工 时间等于事件 j 的最迟时间。 9.2.3 时差 工作的时差又叫工作的机动时间或富裕时间,常用的时差有两种。 (1)工作的总时差 在不影响任务总工期的条件下,某工作 ),( ji 可以延迟其开工时间的最大幅度,叫 做该工作的总时差,用 ),( jiR 表示。其计算公式为: ),(),(),( jitjitjiR EFLF −= (11) 即工作 ),( ji 的总时差等于它的最迟完工时间与最早完工时间的差。显然 ),( jiR 也等于 该工作的最迟开工时间与最早开工时间之差。 (2)工作的单时差 工作的单时差是指在不影响紧后工作的最早开工时间条件下,此工作可以延迟其 开工时间的最大幅度,用 ),( jir 表示。其计算公式为: -101- ),(),(),( jitkjtjir EFES −= (12) 即单时差等于其紧后工作的最早开工时间与本工作的最早完工时间之差。 9.3 计划网络图的计算 以例 20 的求解过程为例介绍计划网络图的计算方法。 9.3.1 建立计划网络图 首先建立计划网络图。按照上述规则,建立例 20 的计划网络图,如图 10 所示。 图 10 例 20 的计划网络图 9.3.2 写出相应的规划问题 设 ix 是事件i 的开始时间,1为最初事件, n 为最终事件。希望总的工期最短,即 极小化 1xxn − 。设 ijt 是作业 ),( ji 的计划时间,因此,对于事件i 与事件 j 有不等式 ijij txx +≥ 由此得到相应的数学规划问题 1min xxn − s.t. ijij txx +≥ , Aji ∈),( , Vji ∈, 0≥ix , Vi ∈ 其中V 是所有的事件集合, A 是所有的作业集合。 9.3.3 问题求解 用 LINGO 软件求解例 20。 解 编写 LINGO 程序如下: model: sets: events/1..8/:x; operate(events,events)/1 2,1 3,1 4,2 5,3 4,3 5,4 6,5 6, 5 7,5 8,6 7,6 8,7 8/:t; endsets data: t=5 10 11 4 4 0 15 21 25 35 0 20 15; enddata min=x(8)-x(1); @for(operate(i,j):x(j)>x(i)+t(i,j)); end 计算结果给出了各个项目的开工时间,如 01 =x ,则作业 CBA ,, 的开工时间均是 第 0 天; 52 =x ,作业 E 的开工时间是第 5 天; 103 =x ,则作业 D 的开工时间是第 10 天;等等。每个作业只要按规定的时间开工,整个项目的最短工期为 51 天。 尽管上述 LINGO 程序给出相应的开工时间和整个项目的最短工期,但统筹方法中 -102- 许多有用的信息并没有得到,如项目的关键路径、每个作业的最早开工时间、最迟开工 时间等。 例 21(续例 20)求例 20 中每个作业的最早开工时间、最迟开工时间和作业的关 键路径。 解 为了得到每个作业的最早开工时间、作业的关键路线等,将目标函数改为 ∑ ∈Vi ix ,即作业的开始时间尽量早,这样就可以得到作业的最早开工时间。再引进作业 对应弧上的松弛变量 ijs ,且 ijijij txxs −−= , Aji ∈),( ,这样就可以得到作业的最迟 开工时间,记 iy 表示事件i 的最迟开工时间。当最早开工时间与最迟开工时间相同时, 就得到项目的关键路径。 编写 LINGO 程序如下: model: sets: events/1..8/:x,z; operate(events,events)/1 2,1 3,1 4,2 5,3 4,3 5,4 6,5 6, 5 7,5 8,6 7,6 8,7 8/:s,t,m,c,y; endsets data: t=5 10 11 4 4 0 15 21 25 35 0 20 15; m=5 8 8 3 4 0 15 16 22 30 0 16 12; c=0 700 400 450 0 0 0 600 300 500 0 500 400; d=49; @text(txt2.txt)=x,z; enddata min=mincost+sumx; mincost=@sum(operate:c*y); sumx=@sum(events:x); @for(operate(i,j):s(i,j)=x(j)-x(i)+y(i,j)-t(i,j)); n=@size(events); x(1)=0; x(n)ijs 时,说明还有剩余时间,对 应作业的工期可以推迟 ijs 。例如, 178 =s ,作业(7,8)( J )的开工时间可以推迟 1 天,即开工时间为 36。再如 246 =s ,作业(4,6)( F )可以推迟 2 天开始, 314 =s , 作业(1,4)(C )可以推迟 3 天开始,但由于作业(4,6)( F )已能够推迟 2 天, 所以,作业(1,4)(C )最多可推迟 5 天。 由此,可以得到所有作业的最早开工时间和最迟开工时间,如下表所示,方括号 中第 1 个数字是最早开工时间,第 2 个数字是最迟开工时间。 表 10 作业数据 作业 ),( ji 开工时间 计划完成时间(天) 作业 ),( ji 开工时间 计划完成时间(天) )2,1(A [0,1] 5 )6,5(G [10,10] 21 -103- )3,1(B [0,0] 10 )4,1(C [0,5] 11 )4,3(D [10,12] 4 )5,2(E [5,6] 4 )6,4(F [14,16] 15 )8,5(H [10,16] 35 )7,5(I [10,11] 25 )8,7(J [35,36] 15 )8,6(K [31,31] 20 从上表可以看出,当最早开工时间与最迟开工时间相同时,对应的作业在关键路 线上,因此可以画出计划网络图中的关键路线,如图 11 粗线所示。关键路线为 1→3→ 5→6→8。 图 11 带有关键路线的计划网络图 9.3.4 将关键路线看成最长路 如果将关键路线看成最长路,则可以按照求最短路的方法(将求极小改为求极大) 求出关键路线。 设 ijx 为 0-1 变量,当作业 ),( ji 位于关键路线上取 1,否则取 0。数学规划问题写 成: ∑ ∈Aji ijij xt ),( max s.t. ⎪⎩ ⎪⎨ ⎧ ≠ =− = =− ∑∑ ∈ = ∈ = ni ni i xx n Aij j ji n Aji j ij ,1,0 ,1 1,1 ),( 1 ),( 1 0=ijx 或 1, Aji ∈),( 例 22 用最长路的方法,求解例 20。 解 按上述数学规划问题写出相应的 LINGO 程序。 model: sets: events/1..8/:d; operate(events,events)/1 2,1 3,1 4,2 5,3 4,3 5,4 6,5 6, 5 7,5 8,6 7,6 8,7 8/:t,x; endsets data: t=5 10 11 4 4 0 15 21 25 35 0 20 15; d=1 0 0 0 0 0 0 -1; enddata max=@sum(operate:t*x); @for(events(i):@sum(operate(i,j):x(i,j))-@sum(operate(j,i):x(j,i))=d(i)); end -104- 求得工期需要 51 天,关键路线为 1→3→5→6→8。 9.4 关键路线与计划网络的优化 例 23(关键路线与计划网络的优化) 假设例 20 中所列的工程要求在 49 天内完成。 为提前完成工程,有些作业需要加快进度,缩短工期,而加快进度需要额外增加费用。 下表列出例 20 中可缩短工期的所有作业和缩短一天工期额外增加的费用。现在的问题 是,如何安排作业才能使额外增加的总费用最少。 表 11 工程作业数据 作业 计划完成 最短完成 缩短 1 天增加 ),( ji 时间(天) 时间(天) 的费用(元) 作业 计划完成 最短完成 缩短 1 天增加 ),( ji 时间(天) 时间(天) 的费用(元) )3,1(B 10 8 700 )4,1(C 11 8 400 )5,2(E 4 3 450 )6,5(G 21 16 600 )8,5(H 35 30 500 )7,5(I 25 22 300 )8,7(J 15 12 400 )8,6(K 20 16 500 例 23 所涉及的问题就是计划网络的优化问题,这时需要压缩关键路径来减少最短 工期。 9.4.1 计划网络优化的数学表达式 设 ix 是事件i 的开始时间, ijt 是作业 ),( ji 的计划时间, ijm 是完成作业 ),( ji 的最 短时间, ijy 是作业 ),( ji 可能减少的时间, ijc 是作业 ),( ji 缩短一天增加的费用,因此 有 ijijij ytxx −≥− 且 ijijij mty −≤≤0 设 d 是要求完成的天数,1 为最初事件,n 为最终事件,所以有 dxxn ≤− 1 。而问题的 总目标是使额外增加的费用最小,即目标函数为 ∑ ∈Aji ijij yc ),( min 。由此得到相应的数学 规划问题: ∑ ∈Aji ijij yc ),( min s.t. ijijij tyxx ≥+− , Aji ∈),( , Vji ∈, dxxn ≤− 1 ijijij mty −≤≤0 , Aji ∈),( , Vji ∈, 9.4.2 计划网络优化的求解 用 LINGO 软件求解例 23,程序如下: model: sets: events/1..8/:x; operate(events,events)/1 2,1 3,1 4,2 5,3 4,3 5,4 6,5 6, 5 7,5 8,6 7,6 8,7 8/:t,m,c,y; endsets data: t=5 10 11 4 4 0 15 21 25 35 0 20 15; -105- m=5 8 8 3 4 0 15 16 22 30 0 16 12; c=0 700 400 450 0 0 0 600 300 500 0 500 400; d=49; enddata min=@sum(operate:c*y); @for(operate(i,j):x(j)-x(i)+y(i,j)>t(i,j)); n=@size(events); x(n)-x(1)= 500*f(i)); @for(need(j):[con3] @sum(supply(i):x(i,j))=y(j)+z(j)); @for(need(j)|j#NE#15:[con4] z(j)+y(j+1)=b(j)); y(1)=0; z(15)=0; @for(supply: @bin(f)); @for(need: @gin(y)); end 10.3 管道为树形图时的模型 当管道为树形图时,建立与上面类似的非线性规划模型 )(05.0min 2 21 1)( 7 1 21 1 jkjk jEjk ij ij ij yyxc ++ ∑∑∑∑ =∈== (27) s.t. ∑ = ≤≤ 21 1 500 j iiiji fsxf , 7,,2,1 L=i (28) ∑∑ =∈ = 7 1)(i jk Ejk ij yx , 21,,2,1 L=j (29) 0,, ≥=+ jkijjkkjjk yxlyy (30) 其中( jk )是连接 jA , kA 的边, E 是树形图的边集, jkl 是从 jA 到 kA 的长度, jky 是由 jA 沿( jk )铺设的钢管数量。 用 Lingo 求解得最小费用为 140.6631 亿元。Lingo 程序如下: model: sets: ! nodes 表示节点集合; nodes /S1,S2,S3,S4,S5,S6,S7,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A 17,A18,A19,A20,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12/; !c1(i,j)表示节点 i 到 j 铁路运输的最小单位运价(万元),c2(i,j)表示节点 i 到 j 公路运输 的邻接权重矩阵,c(i,j)表示节点 i 到 j 的最小单位运价,path 标志最短路径上走过的顶 点; link(nodes, nodes): w, c1,c2,c,path1,path; supply/S1..S7/:s,p,f; need/A1..A21/:b,y,z;!y 表示每一点往节点编号小的方向铺设量,z 表示往节点编号大的 方向铺设量; linkf(supply, need):cf,x; -114- special/1..3/:sx; ! 铺设节点 9,11,17 往最大编号节点方向的铺设量; endsets data: s=800 800 1000 2000 2000 2000 3000; p=160 155 155 160 155 150 160; b=104,301,750,606,194,205,201,680,480,300,220,210,420,500,42,10,130,190,260,100,0; path1=0; path=0; w=0; c2=0; ! 以下是格式化输出计算的中间结果和最终结果; @text(MiddleCost.txt)=@writefor(supply(i): @writefor(need(j): @format(cf(i,j),' 6.1f' )), @newline(1)); @text(Train_path.txt)=@writefor(nodes(i):@writefor(nodes(j):@format(path1(i,j),'5.0f')), @newline(1)); @text(Final_path.txt)=@writefor(nodes(i):@writefor(nodes(j):@format(path(i,j),'5.0f')), @newline(1)); @text(FinalResult.txt)=@writefor(supply(i):@writefor(need(j):@format(x(i,j),'5.0f')), @newline(1) ); @text(FinalResult.txt)=@write(@newline(1)); @text(FinalResult.txt)=@writefor(need:@format(y,'5.0f')); @text(FinalResult.txt)=@write(@newline(2)); @text(FinalResult.txt)=@writefor(need:@format(z,'5.0f')); enddata calc: !输入铁路距离邻接矩阵的上三角元素; w(28,30)=450;w(29,30)=80;w(30,32)=1150;w(31,33)=306;w(33,34)=195;w(1,34)=20; w(1,35)=202;w(32,35)=1100;w(2,35)=1200;w(23,35)=720;w(3,23)=690;w(23,36)=520; w(36,37)=170;w(4,37)=690;w(5,24)=462;w(24,37)=88;w(25,37)=160;w(25,26)=70; w(25,27)=320;w(27,38)=160;w(6,38)=70;w(38,39)=290;w(7,39)=30; @for(link(i,j): w(i,j) = w(i, j)+w(j,i) );!输入铁路距离邻接矩阵的下三角元素; @for(link(i,j)|i#ne#j: w(i,j)=@if(w(i,j) #eq# 0, 20000,w(i,j))); ! 无铁路连接,元素为充分 大的数; !以下就是最短路计算公式(Floyd-Warshall 算法); @for(nodes(k):@for(nodes(i):@for(nodes(j):tm=@smin(w(i,j),w(i,k)+w(k,j)); path1(i,j)=@if(w(i,j)#gt# tm,k,path1(i,j));w(i,j)=tm))); !以下就是按最短路 w 查找相应运费 C1 的计算公式; @for(link|w#eq#0: C1=0); @for(link|w#gt#0 #and# w#le#300: C1=20); @for(link|w#gt#300 #and# w#le#350: C1=23); @for(link|w#gt#350 #and# w#le#400: C1=26); @for(link|w#gt#400 #and# w#le#450: C1=29); @for(link|w#gt#450 #and# w#le#500: C1=32); @for(link|w#gt#500 #and# w#le#600: C1=37); @for(link|w#gt#600 #and# w#le#700: C1=44); @for(link|w#gt#700 #and# w#le#800: C1=50); @for(link|w#gt#800 #and# w#le#900: C1=55); @for(link|w#gt#900 #and# w#le#1000: C1=60); @for(link|w#gt#1000: C1= 60+5*@floor(w/100-10)+@if(@mod(w,100)#eq#0,0,5) ); !输入公路距离邻接矩阵的上三角元素; c2(8,9)=104;c2(9,10)=301;c2(10,11)=750;c2(11,12)=606;c2(12,13)=194;c2(13,14)=205; c2(14,15)=201;c2(15,16)=680;c2(16,17)=480;c2(16,23)=42;c2(17,18)=300;c2(18,19)=220; -115- c2(18,24)=10;c2(19,20)=210;c2(20,21)=420;c2(21,22)=500;c2(24,25)=130;c2(24,26)=190; c2(26,27)=260;c2(6,27)=100;c2(9,28)=3;c2(10,29)=2;c2(11,32)=600;c2(12,31)=10; c2(13,33)=5;c2(14,34)=10;c2(1,14)=31;c2(15,35)=12;c2(17,36)=70;c2(19,26)=10; c2(20,27)=62;c2(6,21)=110;c2(21,38)=30;c2(22,39)=20;c2(7,22)=20; @for(link(i,j): c2(i,j) = c2(i,j)+c2(j,i)); !输入公路距离邻接矩阵的下三角元素; @for(link(i,j):c2(i,j)=0.1*c2(i,j)); ! 距离转化成费用; @for(link(i,j)|i#ne#j: c2(i,j) =@if(c2(i,j)#eq#0,10000,c2(i,j) )); ! 距离转化成费用; @for(link: C= @if(C1#le#C2,C1,C2)); !邻接矩阵的对角线元素变为 0; @for(nodes(k):@for(nodes(i):@for(nodes(j):tm=@smin(C(i,j),C(i,k)+C(k,j)); path(i,j)=@if(C(i,j)#gt# tm,k,path(i,j));C(i,j)=tm))); @for(link(i,j)|i #le# 7 #and# j#ge#8 #and# j#le# 27:cf(i,j-7)=c(i,j)); !提取下面二次规划模 型需要的 7×21 矩阵; @for(supply(i):cf(i,21)=c(i,6)); endcalc [obj]min=@sum(linkf(i,j):(cf(i,j)+p(i))*x(i,j))+0.05*@sum(need(j):y(j)^2+y(j)+z(j)^2+z(j))+ 0.05*@sum(special:sx^2+sx); ! 约束; @for(supply(i):[con1]@sum(need(j):x(i,j))<= s(i)*f(i)); @for(supply(i):[con2]@sum(need(j):x(i,j)) >= 500*f(i)); @for(need(j)|j#ne#9 #and# j#ne#11 #and# j#ne#17:[con3] @sum(supply(i):x(i,j))=y(j)+z(j)); y(9)+z(9)+sx(1)=@sum(supply(i):x(i,9)); y(11)+z(11)+sx(2)=@sum(supply(i):x(i,11)); y(17)+z(17)+sx(3)=@sum(supply(i):x(i,17)); @for(need(j)|j #le# 14:(z(j)+y(j+1))=b(j)); @for(need(j)|j#ge#19 #and# j#le#20:z(j)+y(j+1)=b(j)); sx(1)+y(16)=42; sx(2)+y(17)=10; sx(3)+y(19)=190; z(17)+y(18)=130; y(1)+z(15)+z(16)+z(18)+z(21)=0; @for(supply: @bin(f)); @for(need: @gin(y)); end 习 题 五 1. 一只狼、一头山羊和一箩卷心菜在河的同侧。一个摆渡人要将它们运过河去, 但由于船小,他一次只能运三者之一过河。显然,不管是狼和山羊,还是山羊和卷心菜, 都不能在无人监视的情况下留在一起。问摆渡人应怎样把它们运过河去? 2. 北京(Pe)、东京(T)、纽约(N)、墨西哥城(M)、伦敦(L)、巴黎(Pa)各城市之间的 航线距离如表 16。 表 16 六城市间的航线距离 L M N Pa Pe T L 56 35 21 51 60 M 56 21 57 78 70 N 35 21 36 68 68 Pa 21 57 36 51 61 Pe 51 78 68 51 13 T 60 70 68 61 13 由上述交通网络的数据确定最小生成树。 3. 某台机器可连续工作 4 年,也可于每年末卖掉,换一台新的。已知于各年初购 置一台新机器的价格及不同役龄机器年末的的处理价如表 17 所示。又新机器第一年运 行及维修费为 0.3 万元,使用 1-3 年后机器每年的运行及维修费用分别为 0.8,1.5,2.0 万元。试确定该机器的最优更新策略,使 4 年内用于更换、购买及运行维修的总费用为 -116- 最省。 表 17 j 第一年 第二年 第三年 第四年 年初购置价 使用了 j 年的机器处理价 2.5 2.0 2.6 1.6 2.8 1.3 3.1 1.1 4. 某产品从仓库运往市场销售。已知各仓库的可供量、各市场需求量及从i 仓库 至 j 市场的路径的运输能力如表 18 所示(表中数字 0 代表无路可通),试求从仓库可运 往市场的最大流量,各市场需求能否满足? 表 18 市场 j 仓库 i 1 2 3 4 可供量 A B C 30 0 20 10 0 10 0 10 40 40 50 5 20 20 100 需求量 20 20 60 20 5. 某单位招收懂俄、英、日、德、法文的翻译各一人,有 5 人应聘。已知乙懂俄 文,甲、乙、丙、丁懂英文,甲、丙、丁懂日文,乙、戊懂德文,戊懂法文,问这 5 个人是否都能得到聘书?最多几个得到聘书,招聘后每人从事哪一方面翻译工作? 6. 表 19 给出某运输问题的产销平衡表与单位运价表。将此问题转化为最小费用最 大流问题,画出网络图并求数值解。 表 19 产地 销地 1 2 3 产量 A B 20 30 24 22 5 20 8 7 销量 4 5 6 7. 求图 16 所示网络的最小费用最大流,弧旁数字为 ),( ijij uc 。 图 16 最小费用最大流 8. 某公司计划推出一种新型产品,需要完成的作业由表 20 所示。 表 20 作业 名称 计划完成时间(周) 紧前作业 最短完成时间(周) 缩短 1 周的费用(元) A 设计产品 6 - 4 800 B 市场调查 5 - 3 600 C 原材料订货 3 A 1 300 -117- D 原材料收购 2 C 1 600 E 建立产品设计规范 3 DA, 1 400 F 产品广告宣传 2 B 1 300 G 建立产品生产基地 4 E 2 200 H 产品运输到库 2 FG, 2 200 (1)画出产品的计划网络图; (2)求完成新产品的最短时间,列出各项作业的最早开始时间、最迟开始时间和 计划网络的关键路线; (3)假定公司计划在 17 周内推出该产品,各项作业的最短时间和缩短 1 周的费 用如上表所示,求产品在 17 周内上市的最小费用; (4)如果各项作业的完成时间并不能完全确定,而是根据以往的经验估计出来的, 其估计值如表 21 所示。试计算出产品在 21 周内上市的概率和以 95%的概率完成新产 品上市所需的周数。 表 21 作业 A B C D E F G H 最乐观的估计 2 4 2 1 1 3 2 1 最可能的估计 6 5 3 2 3 4 4 2 最悲观的估计 10 6 4 3 5 5 6 4 9.已知下列网络图有关数据如表 22,设间接费用为 15 元/天,求最低成本日程。 表 22 正常时间 特急时间 工作代号 工时(d) 费用(元) 工时(d) 费用(元) ①→② 6 100 4 120 ②→③ 9 200 5 280 ②→④ 3 80 2 110 ③→④ 0 0 0 0 ③→⑤ 7 150 5 180 ④→⑥ 8 250 3 375 ④→⑦ 2 120 1 170 ⑤→⑧ 1 100 1 100 ⑥→⑧ 4 180 3 200 ⑦→⑧ 5 130 2 220 -118- 第六章 排队论模型 排队论起源于 1909 年丹麦电话工程师 A. K.爱尔朗的工作,他对电话通话拥挤问 题进行了研究。1917 年,爱尔朗发表了他的著名的文章—“自动电话交换中的概率理 论的几个问题的解决”。排队论已广泛应用于解决军事、运输、维修、生产、服务、库 存、医疗卫生、教育、水利灌溉之类的排队系统的问题,显示了强大的生命力。 排队是在日常生活中经常遇到的现象,如顾客到商店购买物品、病人到医院看病常 常要排队。此时要求服务的数量超过服务机构(服务台、服务员等)的容量。也就是说, 到达的顾客不能立即得到服务,因而出现了排队现象。这种现象不仅在个人日常生活中 出现,电话局的占线问题,车站、码头等交通枢纽的车船堵塞和疏导,故障机器的停机 待修,水库的存贮调节等都是有形或无形的排队现象。由于顾客到达和服务时间的随机 性。可以说排队现象几乎是不可避免的。 排队论(Queuing Theory)也称随机服务系统理论,就是为解决上述问题而发展 的一门学科。它研究的内容有下列三部分: (i)性态问题,即研究各种排队系统的概率规律性,主要是研究队长分布、等待 时间分布和忙期分布等,包括了瞬态和稳态两种情形。 (ii)最优化问题,又分静态最优和动态最优,前者指最优设计。后者指现有排队 系统的最优运营。 (iii)排队系统的统计推断,即判断一个给定的排队系统符合于哪种模型,以便 根据排队理论进行分析研究。 这里将介绍排队论的一些基本知识,分析几个常见的排队模型。 §1 基本概念 1.1 排队过程的一般表示 下图是排队论的一般模型。 图 1 排队模型 图中虚线所包含的部分为排队系统。各个顾客从顾客源出发,随机地来到服务机构,按 一定的排队规则等待服务,直到按一定的服务规则接受完服务后离开排队系统。 凡要求服务的对象统称为顾客,为顾客服务的人或物称为服务员,由顾客和服务员 组成服务系统。对于一个服务系统来说,如果服务机构过小,以致不能满足要求服务的 众多顾客的需要,那么就会产生拥挤现象而使服务质量降低。 因此,顾客总希望服务 机构越大越好,但是,如果服务机构过大,人力和物力方面的开支也就相应增加,从而 会造成浪费,因此研究排队模型的目的就是要在顾客需要和服务机构的规模之间进行权 衡决策,使其达到合理的平衡。 1.2 排队系统的组成和特征 一般的排队过程都由输入过程、排队规则、服务过程三部分组成,现分述如下: 1.2.1 输入过程 输入过程是指顾客到来时间的规律性,可能有下列不同情况: (i)顾客的组成可能是有限的,也可能是无限的。 -119- (ii)顾客到达的方式可能是一个—个的,也可能是成批的。 (iii)顾客到达可以是相互独立的,即以前的到达情况对以后的到达没有影响; 否则是相关的。 (iv)输入过程可以是平稳的,即相继到达的间隔时间分布及其数学期望、方差等 数字特征都与时间无关,否则是非平稳的。 1.2.2 排队规则 排队规则指到达排队系统的顾客按怎样的规则排队等待,可分为损失制,等待制和 混合制三种。 (i)损失制(消失制)。当顾客到达时,所有的服务台均被占用,顾客随即离去。 (ii)等待制。当顾客到达时,所有的服务台均被占用,顾客就排队等待,直到接 受完服务才离去。例如出故障的机器排队等待维修就是这种情况。 (iii)混合制。介于损失制和等待制之间的是混合制,即既有等待又有损失。有 队列长度有限和排队等待时间有限两种情况,在限度以内就排队等待,超过一定限度就 离去。 排队方式还分为单列、多列和循环队列。 1.2.3 服务过程 (i)服务机构。主要有以下几种类型:单服务台;多服务台并联(每个服务台同 时为不同顾客服务);多服务台串联(多服务台依次为同一顾客服务);混合型。 (ii)服务规则。按为顾客服务的次序采用以下几种规则: ①先到先服务,这是通常的情形。 ②后到先服务,如情报系统中,最后到的情报信息往往最有价值,因而常被优先处 理。 ③随机服务,服务台从等待的顾客中随机地取其一进行服务,而不管到达的先后。 ④优先服务,如医疗系统对病情严重的病人给予优先治疗。 1.3 排队模型的符号表示 排队模型用六个符号表示,在符号之间用斜线隔开,即 CBAZYX ///// 。第一 个符号 X 表示顾客到达流或顾客到达间隔时间的分布;第二个符号Y 表示服务时间的 分布;第三个符号 Z 表示服务台数目;第四个符号 A 是系统容量限制;第五个符号 B 是 顾客源数目;第六个符号C 是服务规则,如先到先服务 FCFS,后到先服务 LCFS 等。并 约定,如略去后三项,即指 FCFS///// ∞∞ZYX 的情形。我们只讨论先到先服务 FCFS 的情形,所以略去第六项。 表示顾客到达间隔时间和服务时间的分布的约定符号为: M —指数分布( M 是 Markov 的字头,因为指数分布具有无记忆性,即 Markov 性); D —确定型(Deterministic); kE — k 阶爱尔朗(Erlang)分布; G —一般(general)服务时间的分布; GI —一般相互独立(General Independent)的时间间隔的分布。 例如, 1// MM 表示相继到达间隔时间为指数分布、服务时间为指数分布、单服 务台、等待制系统。 cMD // 表示确定的到达时间、服务时间为指数分布、 c 个平行 服务台(但顾客是一队)的模型。 1.4 排队系统的运行指标 为了研究排队系统运行的效率,估计其服务质量,确定系统的最优参数,评价系统 的结构是否合理并研究其改进的措施,必须确定用以判断系统运行优劣的基本数量指 -120- 标,这些数量指标通常是: (i)平均队长:指系统内顾客数(包括正被服务的顾客与排队等待服务的顾客)的 数学期望,记作 sL 。 (ii)平均排队长:指系统内等待服务的顾客数的数学期望,记作 qL 。 (iii)平均逗留时间:顾客在系统内逗留时间(包括排队等待的时间和接受服务的 时间)的数学期望,记作 sW 。 (iv)平均等待时间:指一个顾客在排队系统中排队等待时间的数学期望,记作 qW 。 (v)平均忙期:指服务机构连续繁忙时间(顾客到达空闲服务机构起,到服务机 构再次空闲止的时间)长度的数学期望,记为 bT 。 还有由于顾客被拒绝而使企业受到损失的损失率以及以后经常遇到的服务强度等, 这些都是很重要的指标。 计算这些指标的基础是表达系统状态的概率。所谓系统的状态即指系统中顾客数, 如果系统中有 n 个顾客就说系统的状态是 n ,它的可能值是 (i)队长没有限制时, L,2,1,0=n , (ii)队长有限制,最大数为 N 时, Nn ,,1,0 L= , (iii)损失制,服务台个数是 c 时, cn ,,1,0 L= 。 这些状态的概率一般是随时刻 t 而变化,所以在时刻 t 、系统状态为 n 的概率用 )(tPn 表示。稳态时系统状态为 n 的概率用 nP 表示。 §2 输入过程与服务时间的分布 排队系统中的事件流包括顾客到达流和服务时间流。由于顾客到达的间隔时间和服 务时间不可能是负值,因此,它的分布是非负随机变量的分布。最常用的分布有泊松分 布、确定型分布,指数分布和爱尔朗分布。 2.1 泊松流与指数分布 设 )(tN 表示在时间区间 ),0[ t 内到达的顾客数( 0>t ),令 ),( 21 ttPn 表示在时间区 间 ))(,[ 1221 tttt > 内有 )0(≥n 个顾客到达的概率,即 )0,(})()({),( 121221 ≥>=−= nttntNtNPttPn 当 ),( 21 ttPn 合于下列三个条件时,我们说顾客的到达形成泊松流。这三个条件是: 1o 在不相重叠的时间区间内顾客到达数是相互独立的,我们称这性质为无后效 性。 2o 对充分小的 tΔ ,在时间区间 ),[ ttt Δ+ 内有一个顾客到达的概率与 t 无关,而 约与区间长 tΔ 成正比,即 )(),(1 tottttP Δ+Δ=Δ+ λ (1) 其中 )( to Δ ,当 0→Δt 时,是关于 tΔ 的高阶无穷小。 0>λ 是常数,它表示单位时间 有一个顾客到达的概率,称为概率强度。 3o 对于充分小的 tΔ ,在时间区间 ),[ ttt Δ+ 内有两个或两个以上顾客到达的概率 极小,以致可以忽略,即 ∑ ∞ = Δ=Δ+ 2 )(),( n n totttP (2) -121- 在上述条件下,我们研究顾客到达数 n 的概率分布。 由条件 2o,我们总可以取时间由 0 算起,并简记 )(),0( tPtP nn = 。 由条件 1o 和2o,有 )()()( 000 tPtPttP Δ=Δ+ ∑ = − =Δ=Δ+ n k kknn ntPtPttP 0 ,2,1),()()( L 由条件 2o 和3o 得 )(1)(0 tottP Δ+Δ−=Δ λ 因而有 t totPt tPttP Δ Δ+−=Δ −Δ+ )()()()( 0 00 λ , t totPtPt tPttP nn nn Δ Δ++−=Δ −Δ+ − )()()()()( 1λλ . 在以上两式中,取 tΔ 趋于零的极限,当假设所涉及的函数可导时,得到以下微分方程 组: )()( 0 0 tPdt tdP λ−= , L,2,1),()()( 1 =+−= − ntPtPdt tdP nn n λλ . 取初值 1)0(0 =P , ),2,1(0)0( L== nPn ,容易解出 tetP λ−=)(0 ;再令 t nn etUtP λ−= )()( ,可以得到 )(0 tU 及其它 )(tUn 所满足的微分方程组,即 ,,2,1),()( 1 L== − ntUdt tdU n n λ 1)(0 =tU , 0)( =tU n . 由此容易解得 L,2,1,! )()( == − nen ttP t n n λλ . 正如在概率论中所学过的,我们说随机变量 )}()()({ sNtsNtN −+= 服从泊松分 布。它的数学期望和方差分别是 ttNE λ=)]([ ; ttN λ=)](Var[ 。 当输入过程是泊松流时,那么顾客相继到达的时间间隔T 必服从指数分布。这是 由于 ),0{[}{ tPtTP => 内呼叫次数为零 tetP λ−== )(} 0 那么,以 )(tF 表示T 的分布函数,则有 ⎩ ⎨ ⎧ < ≥−==≤ − 0,0 0,1)(}{ t tetFtTP tλ 而分布密度函数为 0,)( >= − tetf tλλ . -122- 对于泊松流, λ 表示单位时间平均到达的顾客数,所以 λ 1 就表示相继顾客到达平均 间隔时间,而这正和 ET 的意义相符。 对一顾客的服务时间也就是在忙期相继离开系统的两顾客的间隔时间,有时也服从 指数分布。这时设它的分布函数和密度函数分别是 tetG μ−−= 1)( , tetg μμ −=)( 我们得到 μ=>Δ Δ+≤<=Δ >Δ+≤ →Δ→Δ }{ }{lim}|{lim 00 tTtP ttTtP t tTttTP tt 这表明,在任何小的时间间隔 ),[ ttt Δ+ 内一个顾客被服务完了(离去)的概率是 )( tot Δ+Δμ 。 μ 表示单位时间能被服务完成的顾客数,称为平均服务率,而 μ 1 表示 一个顾客的平均服务时间。 2.2 常用的几种概率分布及其产生 2.2.1 常用的连续型概率分布 我们只给出这些分布的参数、记号和通常的应用范围,更详细的内容参看专门的概 率论书籍。 (i)均匀分布 区间 ),( ba 内的均匀分布记作 ),( baU 。服从 )1,0(U 分布的随机变量又称为随机 数,它是产生其它随机变量的基础。如若 X 为 )1,0(U 分布,则 XabaY )( −+= 服从 ),( baU 。 (ii)正态分布 以 μ 为期望, 2σ 为方差的正态分布记作 ),( 2σμN 。正态分布的应用十分广泛。 正态分布还可以作为二项分布一定条件下的近似。 (iii)指数分布 指数分布是单参数 λ 的非对称分布,记作 )(Exp λ ,概率密度函数为: ⎩ ⎨ ⎧ < ≥= − 0,0 0,)( t tetf tλλ 它的数学期望为 λ 1 ,方差为 2 1 λ 。指数分布是唯一具有无记忆性的连续型随机变量,即 有 )()|( sXPtXstXP >=>+> ,在排队论、可靠性分析中有广泛应用。 (iv)Gamma 分布 Gamma 分布是双参数 βα, 的非对称分布,记作 ),( βαG ,期望是αβ 。 1=α 时蜕 化为指数分布。 n 个相互独立、同分布(参数 λ )的指数分布之和是 Gamma 分布 ( ), λβα == n 。Gamma 分布可用于服务时间,零件寿命等。 Gamma 分布又称爱尔朗分布。 (v)Weibull 分布 Weibull 分布是双参数 βα, 的非对称分布,记作 ),( βαW 。 1=α 时蜕化为指数分 布。作为设备、零件的寿命分布在可靠性分析中有着非常广泛的应用。 (vi)Beta 分布 -123- Beta 分布是区间 )1,0( 内的双参数、非均匀分布,记作 ),( βαB 。 2.2.2 常用的离散型概率分布 (i)离散均匀分布 (ii)Bernoulli 分布(两点分布) Bernoulli 分布是 0,1=x 处取值的概率分别是 p 和 p−1 的两点分布,记作 )(Bern p 。用于基本的离散模型。 (iii)泊松(Poisson)分布 泊松分布与指数分布有密切的关系。当顾客平均到达率为常数 λ 的到达间隔服从 指数分布时,单位时间内到达的顾客数 K 服从泊松分布,即单位时间内到达 k 位顾客 的概率为 L,2,1,0,! == − kk eP k k λλ 记作 )(Poisson λ 。泊松分布在排队服务、产品检验、生物与医学统计、天文、物理等 领域都有广泛应用。 (iv)二项分布 在独立进行的每次试验中,某事件发生的概率为 p ,则 n 次试验中该事件发生的 次数 K 服从二项分布,即发生 k 次的概率为 nkppCP knkk nk ,,1,0,)1( L=−= − . 记作 ),( pnB 。二项分布是 n 个独立的 Bernoulli 分布之和。它在产品检验、保险、生 物和医学统计等领域有着广泛的应用。 当 kn, 很大时, ),( pnB 近似于正态分布 ))1(,( pnpnpN − ;当 n 很大、 p 很小, 且 np 约为常数 λ 时, ),( pnB 近似于 )(Poisson λ 。 §3 生灭过程 一类非常重要且广泛存在的排队系统是生灭过程排队系统。生灭过程是一类特殊的 随机过程,在生物学、物理学、运筹学中有广泛的应用。在排队论中,如果 )(tN 表示 时刻t 系统中的顾客数,则 }0),({ ≥ttN 就构成了一个随机过程。如果用“生”表示顾 客的到达,“灭”表示顾客的离去,则对许多排队过程来说, }0),({ ≥ttN 就是一类特 殊的随机过程-生灭过程。下面结合排队论的术语给出生灭过程的定义。 定义 1 设 }0),({ ≥ttN 为一个随机过程。若 )(tN 的概率分布具有以下性质: (1)假设 ntN =)( ,则从时刻t 起到下一个顾客到达时刻止的时间服从参数为 nλ 的负指数分布, L,2,1,0=n 。 (2)假设 ntN =)( ,则从时刻t 起到下一个顾客离去时刻止的时间服从参数为 nμ 的负指数分别, L,2,1,0=n 。 (3)同一时刻只有一个顾客到达或离去。 则称 }0),({ ≥ttN 为一个生灭过程。 一般来说,得到 )(tN 的分布 })({)( ntNPtpn == ( L,2,1,0=n )是比较困难的, 因此通常是求当系统到达平衡后的状态分布,记为 L,2,1,0, =npn 。 为求平稳分布,考虑系统可能处的任一状态 n 。假设记录了一段时间内系统进入状 态 n 和离开状态 n 的次数,则因为“进入”和“离开”是交替发生的,所以这两个数要 -124- 么相等,要么相差为 1。但就这两种事件的平均发生率来说,可以认为是相等的。即当 系统运行相当时间而到达平衡状态后,对任一状态 n 来说,单位时间内进入该状态的平 均次数和单位时间内离开该状态的平均次数应该相等,这就是系统在统计平衡下的“流 入=流出”原理。根据这一原理,可得到任一状态下的平衡方程如下: M M M M nnnnnnn ppp ppp ppp pp n )( )( )( 2 1 0 1111 2223311 1112200 0011 μλμλ μλμλ μλμλ λμ +=+ +=+ +=+ = ++−− (3) 由上述平衡方程,可求得 0: 0 1 0 1 pp μ λ= 1: 0 12 01 1 2 1 0011 2 1 2 1 2 )(1 pppppp μμ λλ μ λλμμμ λ ==−+= 2: 0 123 012 2 3 2 1122 3 2 3 2 3 )(1 pppppp μμμ λλλ μ λλμμμ λ ==−+= M M n : 0 11 01 1 11 11 1 )(1 pppppp nn nn n n n nnnn n n n n n μμμ λλλ μ λλμμμ λ L L + − + −− ++ + ==−+= M M 记 11 021 μμμ λλλ L L − −−= nn nn nC , L,2,1=n (4) 则平稳状态的分布为 0pCp nn = , L,2,1=n (5) 由概率分布的要求 1 0 =∑ ∞ =n np 有 11 0 1 =⎥⎦ ⎤ ⎢⎣ ⎡ + ∑ ∞ = pC n n 于是 ∑ ∞ = + = 1 0 1 1 n nC p (6) 注意:(6)只有当级数 ∑∞ =1n nC 收敛时才有意义,即当 ∞<∑∞ =1n nC 时,才能由上 -125- 述公式得到平稳状态的概率分布。 §4 sMM // 等待制排队模型 4.1 单服务台模型 单服务台等待制模型 ∞/1// MM 是指:顾客的相继到达时间服从参数为 λ 的负指 数分布,服务台个数为 1,服务时间V 服从参数为 μ 的负指数分布,系统空间无限, 允许无限排队,这是一类最简单的排队系统。 4.1.1 队长的分布 记 }{ nNPpn == ( L,2,1,0=n )为系统达到平衡状态后队长 N 的概率分布,则 由式(4)~(6),并注意到 L,2,1,0, == nn λλ 和 L,2,1,0, == nn μμ 。记 μ λρ = 并设 1<ρ (否则队列将排至无限远),则 n nC ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= μ λ , L,2,1=n 故 0pp n n ρ= , L,2,1=n 其中 ρρρ ρ −=⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −=⎟ ⎠ ⎞⎜ ⎝ ⎛= + = −−∞ = ∞ = ∑ ∑ 11 1 1 1 11 0 1 0 n n n n p (7) 因此 n np ρρ)1( −= , L,2,1=n (8) 公式(7)和(8)给出了在平衡条件下系统中顾客数为 n 的概率。由式(7)不难看出, ρ 是系统中至少有一个顾客的概率,也就是服务台处于忙的状态的概率,因而也称 ρ 为 服务强度,它反映了系统繁忙的程度。此外,(8)式只有在 1<= μ λρ 的条件下才能得 到,即要求顾客的平均到达率小于系统的平均服务率,才能使系统达到统计平衡。 4.1.2 几个主要数量指标 对单服务台等待制排队系统,由已得到的平稳状态下队长的分布,可以得到平均队 长 λμ λ ρ ρρρρ ρρρρρρ ρρ −=−=+++= +++−+++= −== ∑∑ ∞ = ∞ = 1 )32()32( )1( 32 43232 10 L LL n n n ns nnpL (9) 平均排队长 qL 为 -126- )()1()1( 2 0 1 λμμ λρ −=−=−−=−= ∑ ∞ = LpLpnL n nq (10) 关于顾客在系统中的逗留时间T ,可说明它服从参数为 λμ − 的复指数分布,即 tetTP )(}{ λμ−−=> , 0≥t 因此,平均逗留时间 λμ −= 1 sW (11) 因为,顾客在系统中的逗留时间为等待时间 qT 和接受服务时间V 之和,即 VTT q += 故由 μ 1)()()( +=+== qqs WVETETEW (12) 可得平均等待时间 qW 为 )( 1 λμμ λ μ −=−= sq WW (13) 从式(9)和式(11),可发现平均队长 sL 与平均逗留时间 sW 具有关系 ss WL λ= (14) 同样,从式(10)和式(13),可发现平均排队长 qL 与平均等待时间 qW 具有关系 qq WL λ= (15) 式(14)和式(15)通常称为 Little 公式,是排队论中一个非常重要的公式。 4.1.3 忙期和闲期 在平衡状态下,忙期 B 和闲期 I 一般均为随机变量,求它们的分布是比较麻烦的。 因此,我们来求一下平均忙期 B 和平均闲期 I 。由于忙期和闲期出现的概率分别为 ρ 和 ρ−1 ,所以在一段时间内可以认为忙期和闲期的总长度之比为 )1(: ρρ − 。又因为忙 期和闲期是交替出现的,所以在充分长的时间里,它们出现的平均次数应是相同的。于 是,忙期的平均长度 B 和闲期的平均长度 I 之比也应是 )1(: ρρ − ,即 ρ ρ −= 1I B (16) 又因为在到达为 Poisson 流时,根据负指数分布的无记忆性和到达与服务相互独立的假 设,容易证明从系统空闲时刻起到下一个顾客到达时刻止(即闲期)的时间间隔仍服从 参数为 λ 的负指数分布,且与到达时间间隔相互独立。因此,平均闲期应为 λ 1 ,这样, 便求得平均忙期为 λμλρ ρ −=⋅−= 11 1B (17) 与式(11)比较,发现平均逗留时间( sW )=平均忙期( B )。这一结果直观看上去 是显然的,顾客在系统中逗留的时间越长,服务员连续繁忙的时间也就越长。因此,一 -127- 个顾客在系统内的平均逗留时间应等于服务员平均连续忙的时间。 4.2 与排队论模型有关的 LINGO 函数 (1)@peb(load,S) 该函数的返回值是当到达负荷为 load,服务系统中有 S 个服务台且允许排队时系 统繁忙的概率,也就是顾客等待的概率。 (2)@pel(load,S) 该函数的返回值是当到达负荷为 load,服务系统中有 S 个服务台且不允许排队时 系统损失概率,也就是顾客得不到服务离开的概率。 (3)@pfs(load,S,K) 该函数的返回值是当到达负荷为 load,顾客数为 K,平行服务台数量为 S 时,有限 源的 Poisson 服务系统等待或返修顾客数的期望值。 例 1 某修理店只有一个修理工,来修理的顾客到达过程为 Poisson 流,平均 4 人 /h;修理时间服从负指数分布,平均需要 6min。试求:(1)修理店空闲的概率;(2) 店内恰有 3 个顾客的概率;(3)店内至少有 1 个顾客的概率;(4)在店内的平均顾客数; (5)每位顾客在店内的平均逗留时间;(6)等待服务的平均顾客数;(7)每位顾客平 均等待服务时间;(8)顾客在店内等待时间超过 10min 的概率。 解 本例可看成一个 ∞/1// MM 排队问题,其中 4=λ , 101.0 1 ==μ , 4.0== μ λρ (1)修理店空闲的概率 6.04.0110 =−=−= ρp (2)店内恰有 3 个顾客的概率 38.0)4.01(4.0)1( 33 3 =−×=−= ρρp (3)店内至少有 1 个顾客的概率 4.01}1{ 0 ==−=≥ ρpNP (4)在店内的平均顾客数 67.01 =−= ρ ρ sL (人) (5)每位顾客在店内的平均逗留时间 (min)10)h(4 67.0 === λ s s LW (6)等待服务的平均顾客数 267.04.01 4.0 1 22 =−=−=−= ρ ρρsq LL (人) (7)每位顾客平均等待服务时间 (min)4)h(4 267.0 === λ q q LW (8)顾客在店内逗留时间超过 10min 的概率 3679.0}10{ 1)15 1 6 1(10 ===> −−− eeTP 编写 LINGO 程序如下: model: -128- s=1;lamda=4;mu=10;rho=lamda/mu; Pwait=@peb(rho,s); p0=1-Pwait; Pt_gt_10=@exp(-1); end 4.3 多服务台模型( ∞/// sMM ) 设顾客单个到达,相继到达时间间隔服从参数为 λ 的负指数分布,系统中共有 s 个 服务台,每个服务台的服务时间相互独立,且服从参数为 μ 的负指数分布。当顾客到 达时,若有空闲的服务台则马上接受服务,否则便排成一个队列等待,等待时间为无限。 下面来讨论这个排队系统的平稳分布。记 }{ nNPpn == ( L,2,1,0=n )为系统 达到平稳状态后队长 N 的概率分布,注意到对个数为 s 的多服务台系统,有 λλ =n , L,2,1,0=n 和 ⎩ ⎨ ⎧ += == L L ,1,, ,,2,1, ssns snn n μ μμ 记 μ λρρ sss == ,则当 1s 的情况( ssMM /// ) 例4 某单位电话交换台有一台200门内线的总机,已知在上班8h的时间内,有20%的 内线分机平均每40min要一次外线电话,80%的分机平均隔120min要一次外线。又知外线 打入内线的电话平均每分钟1次。假设与外线通话的时间平均为3min,并且上述时间均服 从负指数分布,如果要求电话的通话率为95%,问该交换台应设置多少条外线? 解 (1)电话交换台的服务分成两类,第一类内线打外线,其强度为 1402008.0120 602.040 60 1 =×⎟ ⎠ ⎞⎜ ⎝ ⎛ ×+×=λ 第二类是外线打内线,其强度为 606012 =×=λ -132- 因此,总强度为 2006014021 =+=+= λλλ (2)这是损失制服务系统,按题目要求,系统损失的概率不能超过5%,即 05.0lost ≤P (3)外线是整数,在满足条件下,条数越小越好。 由上述三条,写出相应的LINGO程序如下: model: lamda=200; mu=60/3;rho=lamda/mu; Plost=@pel(rho,s);Plost<0.05; Q=1-Plost; lamda_e=Q*lamda;A=Q*lamda_e; L_s=lamda_e/mu; eta=L_s/s; min=s;@gin(s); end 求得需要15条外线。在此条件下,交换台的顾客损失率为3.65%,有96.35%的电 话得到了服务,通话率为平均每小时185.67次,交换台每条外线的服务效率为64.23%。 求解时,尽量选用简单的模型让LINGO软件求解,而上述程序是解非线性整数规划(尽 管是一维的),但计算时间可能会较长,因此,我们选用下面的处理方法,分两步处理。 第一步,求出概率为5%的服务台的个数,尽管要求服务台的个数是整数,但@pel给 出的是实数解。 编写LINGO程序: model: lamda=200; mu=60/3;rho=lamda/mu; @pel(rho,s)=0.05; end 求得 33555.14=s 。 第二步,注意到@pel(rho,s)是s的单调递减函数,因此,对s取整数(采用只入不舍 原则)就是满足条件的最小服务台数,然后再计算出其它的参数指标。 编写LINGO程序如下: model: lamda=200; mu=60/3;rho=lamda/mu; s=15;Plost=@pel(rho,s); Q=1-Plost; lamda_e=Q*lamda;A=Q*lamda_e; L_s=lamda_e/mu; eta=L_s/s; end 比较上面两种方法的计算结果,其答案是相同的,但第二种方法比第一种方法在计算 时间上要少许多。 §6 sMM // 混合制排队模型 6.1 单服务台混合制模型 单服务台混合制模型 KMM /1// 是指:顾客的相继到达时间服从参数为 λ 的负指数 分布,服务台个数为1,服务时间V 服从参数为 μ 的负指数分布,系统的空间为 K ,当 K 个位置已被顾客占用时,新到的顾客自动离去,当系统中有空位置时,新到的顾客进入系 -133- 统排队等待。 首先,仍来求平稳状态下队长 N 的分布 }{ nNPpn == , L,2,1,0=n 。由于所考虑 的排队系统中最多只能容纳 K 个顾客(等待位置只有 1−K 个),因而有 ⎩ ⎨ ⎧ ≥ −== Kn Kn n ,0 1,,2,1,0, Lλλ μμ =n , Kn ,,2,1 L= 由式(4),式(5)和式(6),有 ⎪⎩ ⎪⎨ ⎧ > ==⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ = Kn KnC n n n ,0 ,,2,1, Lρμ λ (27) 故 0pp n n ρ= , Kn ,,2,1 L= 其中 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =+ ≠− − = + = + = ∑ 1,1 1 1,1 1 1 1 1 1 0 ρ ρρ ρ ρ K p K K n n (28) 由已得到的单服务台混合制排队系统平稳状态下队长的分布,可知当 1≠ρ 时,平 均队长 sL 为: ∑∑ = − = == K n n K n ns npnpL 1 1 0 0 ρρ 1 1 2 0 1 )1( 1])1(1[)1( + + − +−−=−−−−= K K KK KKp ρ ρ ρ ρρρρρ ρ (29) 当 1=ρ 时, 21 1 1 0 10 KnKpnnpL K n K n n K n ns =+=== ∑∑∑ === ρ (30) 类似地可得到平均排队长 qL 为 )1()1( 0 1 pLpnL s K n nq −−=−= ∑ = (31) 或 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =+ − ≠− +−−= + 1,)1(2 )1( 1,1 )1( 1 1 ρ ρρ ρρ ρ ρ K KK K L K K q (32) 由于排队系统的容量有限,只有 1−K 个排队位置,因此,当系统空间被占满时, 再来的顾客将不能进入系统排队,也就是说不能保证所有到达的顾客都能进入系统等待 -134- 服务。假设顾客的到达率(单位时间内来到系统的顾客的平均数)为 λ ,则当系统处 于状态 K 时,顾客不能进入系统,即顾客可进入系统的概率是 Kp−1 。因此,单位时 间内实际可进入系统的顾客的平均数为: )1()1( 0ppKe −=−= μλλ (33) 称 eλ 为有效到达率,而 Kp 也被称为顾客损失率,它表示了在来到系统的所有顾客中不 能进入系统的顾客的比例。下面根据 Little 公式,可得 平均逗留时间 )1( k s e s s p LLW −== λλ (34) 平均等待时间 )1( K q e q q p LLW −== λλ (35) 且仍有 μ 1+= qs WW (36) 注意:这里的平均逗留时间和平均等待时间都是针对能够进入系统的顾客而言的。 特别,当 1=K 时, 1/1// MM 为单服务台损失系统,在上述有关结果中令 1=K , 可得到: ρ+= 1 1 0p , ρ ρ += 11p (37) ρ ρ +== 11pLs , (38) ρ λλλλ +==−= 1)1( 01 ppe (39) μλ ρ λ 1=== e s s LW (40) 0=qL , 0=qW (41) 例 5 某修理站只有一个修理工,且站内最多只能停放 4 台待修的机器。设待修机 器按 Poisson 流到达修理站,平均每分钟到达 1 台;修理时间服从负指数分布,平均每 1.25 分钟可修理 1 台,试求该系统的有关指标。 解 该系统可看成是一个 4/1// MM 排队系统,其中 1=λ , 8.025.1 1 ==μ , 25.1== μ λρ , 4=K 由式(28), 122.025.11 25.11 1 1 550 =− −=− −= ρ ρp 因而,顾客损失率为: 298.0122.025.1 4 0 4 4 =×== pp ρ 有效到达率为: -135- 702.0)298.01(1)1( 4 =−×=−= pe λλ 平均队长 44.225.11 25.1)14( 25.11 25.1 5 5 =− ×+−−=sL (台) 平均排队长 56.1)122.01(44.2)1( 0 =−−=−−= pLL sq (台) 平均逗留时间 48.3702.0 44.2 === e s s LW λ (分钟) 平均等待时间 23.28.0 148.31 =−=−= μsq WW (分钟) 编写 LINGO 程序如下: model: sets: state/1..4/:p; endsets lamda=1;mu=1/1.25;rho=lamda/mu;k=4; lamda*p0=mu*p(1); (lamda+mu)*p(1)=lamda*p0+mu*p(2); @for(state(i)|i #gt#1 #and# i #lt# k:(lamda+mu)*p(i)=lamda*p(i-1)+mu*p(i+1)); lamda*p(k-1)=mu*p(k); p0+@sum(state:p)=1; P_lost=p(k);lamda_e=lamda*(1-P_lost); L_s=@sum(state(i)|i #le#k:i*p(i)); L_q=L_s-(1-p0); W_s=L_s/lamda_e; W_q=W_s-1/mu; end 6.2 多服务台混合制模型 多服务台混合制模型 KsMM /// 是指顾客的相继到达时间服从参数为λ 的负指 数分布,服务台个数为 s ,每个服务台服务时间相互独立,且服从参数为 μ 的负指数分 布,系统的空间为 K 。 由式(4),式(5)和式(6),并注意到在本模型中 ⎩ ⎨ ⎧ ≥ −== Kn Kn n ,0 1,,2,1,0, Lλλ ⎩ ⎨ ⎧ ≤≤ <≤= Knss snn n , 0, μ μμ 于是 -136- ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≤≤ <≤ = − Knspss snpnp sn n n n ,! 0,! 0 0 ρ ρ (42) 其中 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ =⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ +−+ ≠⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ − −+ = −− = −− = +− ∑ ∑ 1,)1(!! 1,)1(! )1( ! 11 0 11 0 1 0 s s n sn s s n s sK s sn sKsn sn p ρρρ ρρ ρρρ (43) 由平稳分布 Knpn ,,2,1,0, L= ,可得平均排队长为 ∑ = −= K sn nq psnL )( ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =+−− ≠+−−−−−= −+− 1,!2 )1)(( 1],)1)(1(1[)1(! 0 1 2 0 s s s sK ss sK s s s s s sKsKp sKs p ρρ ρρρρρ ρρ (44) 为求平均队长,由 ∑∑∑ === −=−= K sn n K sn n K sn nq psnppsnL )( spsnLpsnpnp s n ns s n n s n n K n n −−−=⎟ ⎠ ⎞⎜ ⎝ ⎛ −−−= ∑∑∑∑ − = − = − == 1 0 1 0 1 00 )(1 得到 ∑ − = −++= 1 0 0 ! )(s n n qs n snpsLL ρ (45) 由系统空间的有限性,必须考虑顾客的有效到达率 eλ 。对多服务台系统,仍有 )1( Ke p−= λλ (46) 再利用 Little 公式,得到 e s s LW λ= , μλ 1−== s e q q WLW (47) 平均被占用的服务台数(也是正在接受服务的顾客的平均数)为 ⎥⎦ ⎤ ⎢⎣ ⎡ +=+= ∑∑∑∑ = − − == − = K sn sn ns n nK sn n s n n sssn nppsnps !! 1 0 0 1 0 ρρ ⎥⎦ ⎤ ⎢⎣ ⎡ −+=⎥⎦ ⎤ ⎢⎣ ⎡ +−= ∑∑∑∑ = −− − == −− −− = − K sn sK K sn ns n nK sn sn ns n n ssssnpssnp !!!!)!1( 1 0 01 11 1 1 0 ρρρρρρρ -137- )1()!1( 0 KsK K ppss −=−= − ρρρ (48) 因此,又有 )1( Kqqs pLsLL −+=+= ρ (49) 例 6 某汽车加油站设有两个加油机,汽车按 Poisson 流到达,平均每分钟到达 2 辆;汽车加油时间服从负指数分布,平均加油时间为 2 分钟。又知加油站上最多只能停 放 3 辆等待加油的汽车,汽车到达时,若已满员,则必须开到别的加油站去,试对该系 统进行分析。 解 可将该系统看作一个 5/2// MM 排队系统,其中 2=λ , 5.0=μ , 4== μ λρ , 2=s , 5=K (1)系统空闲的概率 008.0)2/41(!2 ])2/4(1[441 11252 0 = ⎭ ⎬ ⎫ ⎩ ⎨ ⎧ − −++= −+− p (2)顾客损失率 512.02!2 008.04 25 5 5 =× ×= −p (3)加油站内在等待的平均汽车数 ])2/4)(125)(2/41()2/4(1[)2/41(!2 )2/4(4008.0 25125 2 2 −+− +−−−−− ××=qL 18.2= (辆) 加油站内汽车的平均数为 13.4)512.01(418.2)1( 5 =−+=−+= pLL qs ρ (辆) (4)汽车在加油站内平均逗留时间为 23.4)512.01(2 13.4 )1( 5 =−=−= p LW s s λ (分钟) 汽车在加油站内平均等待时间为 23.2223.41 =−=−= μsq WW (分钟) (5)被占用的加油机的平均数为 95.118.213.4 =−=−= qs LLs (个) 编写 LINGO 程序如下: model: sets: state/1..5/:p; endsets lamda=2;mu=0.5;rho=lamda/mu;s=2;k=5; lamda*p0=mu*p(1); (lamda+mu)*p(1)=lamda*p0+2*mu*p(2); @for(state(i)|i #gt#1 #and# i #lt# s: (lamda+i*mu)*p(i)=lamda*p(i-1)+(i+1)*mu*p(i+1)); -138- @for(state(i)|i #ge# s #and# i #lt# k: (lamda+s*mu)*p(i)=lamda*p(i-1)+s*mu*p(i+1)); lamda*p(k-1)=s*mu*p(k); p0+@sum(state:p)=1; P_lost=p(k);lamda_e=lamda*(1-P_lost); L_s=@sum(state(i):i*p(i)); L_q=L_s-lamda_e/mu; W_s=L_s/lamda_e; W_q=W_s-1/mu; end 在对上述多服务台混合制排队模型 KsMM /// 的讨论中,当 Ks = 时,即为多 服务台损失制系统。对损失制系统,有 0! pnp n n ρ= , sn ,,2,1 L= (50) 其中 1 0 0 ! − = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= ∑ s n n np ρ (51) 顾客的损失率为 1 0 !!),( − = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛== ∑ s n ns s nspsB ρρρ (52) 式(52)称为 Erlang 损失公式, ),( ρsB 亦表示了到达系统后由于系统空间已被占满 而不能进入系统的顾客的百分比。 对损失制系统,平均被占用的服务台数(正在接受服务的顾客的平均数)为 ∑∑ == == s n ns n n pn nnps 0 0 0 ! ρ )),(1(!!! 1 00 ρρρρρρ sBnsn s n ns n sn −=⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −= − == ∑∑ (53) 此外,还有 平均队长 )),(1( ρρ sBsLs −== (54) 平均逗留时间 μρλ ρρ λ 1 )],(1[ )],(1[ =− −== sB sBLW e s s (55) 其中 )1( se p−= λλ 为有效到达率。在损失制系统中,还经常用 )1( spA −= λ 表示系 统的绝对通过能力,即单位时间内系统实际可完成的服务次数;用 spQ −=1 表示系统 的相对通过能力,即被服务的顾客数与请求服务的顾客数的比值。系统的服务台利用率 (或通道利用率)为 s s=η (56) §7 其它排队模型简介 7.1 有限源排队模型 -139- 现在,来分析一下顾客源为有限的排队问题。这类排队问题的主要特征是顾客总数 是有限的,如果有 m 个顾客。每个顾客来到系统中接受服务后仍回到原来的总体,还 有可能再来,这类排队问题的典型例子是机器看管问题。如一个工人同时看管 m 台机 器,当机器发生故障时即停下来等待维修,修好后再投入使用,且仍然可能再发生故障。 类似的例子还有 m 个终端共用一台打印机等,如图 2 所示。 图 2 有限源排队系统 关于顾客的平均到达率,在无限源的情形中是按全体顾客来考虑的,而在有限源的 情形下,必须按每一顾客来考虑。设每个顾客的到达率都是相同的,均为 λ(这里 λ 的 含义是指单位时间内该顾客来到系统请求服务的次数),且每一顾客在系统外的时间均 服从参数为 λ 的负指数分布。由于在系统外的顾客的平均数为 sLm − ,故系统的有效 到达率为 )( se Lm −= λλ 下面讨论平稳状态下队长 N 的分布 }{ nNPpn == , mn ,,2,1,0 L= 。由于状态 间的转移率为 )( nmn −= λλ , mn ,,2,1,0 L= ⎩ ⎨ ⎧ += == msns snn n ,,1, ,,2,1, L L μ μμ 由式(4),式(5)和式(6),有(记 μ λρ = ) ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =− =−= − msnssnm m snnnm m C n sn n n ,,,!)!( ! ,,2,1,!)!( ! L L ρ ρ (57) 故 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =− =−= − msnpssnm m snpnnm m p n sn n n ,,,!)!( ! ,,2,1,!)!( ! 0 0 L L ρ ρ (58) 其中 11 0 0 !)!( ! !)!( ! − = − − = ⎥⎦ ⎤ ⎢⎣ ⎡ −+−= ∑∑ m sn n sn s n n ssnm m nnm mp ρρ (59) 下面给出系统的有关运行指标 -140- ∑ = −= m sn nq psnL )( (60) )1( 1 0 1 0 ∑∑ − = − = −++= s n nq s n ns psLnpL (61) 或 )( sq e qs LmLLL −+=+= ρμ λ (62) e s s LW λ= , e q q LW λ= (63) 特别,对单服务台( 1=s )系统,有 0)!( ! pnm mp n n ρ−= , mn ,,2,1 L= (64) 1 0 0 )!( ! − = ⎥⎦ ⎤ ⎢⎣ ⎡ −= ∑ m n n nm mp ρ (65) ∑ = −= m n nq pnL 1 )1( (66) )1( 0pLL qs −+= (67) 或 )1( 0pmLs −−= λ μ (68) λμλ 1 )1( 0 −−== p mLW e s s , μ 1−= sq WW (69) 系统的相对通过能力 1=Q ,绝对通过能力 )1()( 0pLmQA se −=−== μλλ (70) 例 7 设有一工人看管 5 台机器,每台机器正常运转的时间服从负指数分布,平均 为 15 分钟。当发生故障后,每次修理时间服从负指数分布,平均为 12 分钟,试求该系 统的有关运行指标。 解 用有限源排队模型处理本问题。已知 15 1=λ , 12 1=μ , 8.0== μ λρ , 5=m 于是,有 (1)修理工人空闲的概率 0073.0)8.0(!0 !5)8.0(!1 !5)8.0(!2 !5)8.0(!3 !5)8.0(!4 !5)8.0(!5 !5 1 543210 0 =⎥⎦ ⎤ ⎢⎣ ⎡ +++++= − p (2)5 台机器都出故障的概率 287.0)8.0(!0 !5 0 5 5 == pp -141- (3)出故障机器的平均数 76.3)0073.01(8.0 15 =−−=sL (台) (4)等待修理机器的平均数 77.2)0073.01(76.3 =−−=qL (台) (5)每台机器发生一次故障的平均停工时间 4615 )0073.01(12 1 5 =− − =sW (分钟) (6)每台机器平均待修时间 341246 =−=qW (分钟) (7)系统绝对通过能力(即工人的维修能力) 083.0)0073.01(12 1 =−=A (台) 即该工人每小时可修理机器的平均台数为 96.460083.0 =× 台。 上述结果表面,机器停工时间过长,看管工人几乎没有空闲时间,应采取措施提高 服务率或增加工人。 LINGO 计算程序如下 model: lamda=1/15;mu=1/12;rho=lamda/mu;s=1;m=5; load=m*rho; L_s=@pfs(load,s,m); p_0=1-(m-L_s)*rho; lamda_e=lamda*(m-L_s); p_5=@exp(@lgm(6))*0.8^5*p_0; L_q=L_s-(1-p_0); w_s=L_s/lamda_e;w_q=L_q/lamda_e; end 7.2 服务率或到达率依赖状态的排队模型 在前面的各类排队模型的分析中,均假设顾客的到达率为常数 λ ,服务台的服务 率也为常数 μ 。而在实际的排队问题中,到达率或服务率可能是随系统的状态而变化 的。例如,当系统中顾客数已经比较多时,后来的顾客可能不愿意再进入系统;服务员 的服务率当顾客较多时也可能会提高。因此,对单服务台系统,实际的到达率和服务率 (它们均依赖于系统所处的状态 n )可假设为 an n )1( 0 += λλ , L,2,1,0=n 1μμ b n n= , L,2,1=n 对多服务台系统,实际到达率和服务率假设为 ⎪⎩ ⎪⎨ ⎧ −≥⎟ ⎠ ⎞⎜ ⎝ ⎛ + −≤ = 1,1 1, 0 0 snn s sn a n λ λ λ -142- ⎪⎩ ⎪⎨ ⎧ ≥⎟ ⎠ ⎞⎜ ⎝ ⎛ ≤ = snss n snn b n , , 1 1 μ μ μ 其中 nλ 和 nμ 分别为系统处于状态 n 时的到达率和服务率。上述假设表明,到达率 nλ 同 系统中已有顾客数 n 呈反比关系;服务率 nμ 同系统状态 n 呈正比关系。 由式(4),对多服务台系统有 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ += = = −−−+ L L ,1,,)!/!(! )/( ,,2,1,! )/( ))(1( 10 10 ssnssns snnC snbaba n n n μλ μλ (71) 下面看一个简单的特例,考虑一个到达依赖状态的单服务台等待制系统 ∞/1// MM ,其参数为 1+= nn λλ , L,2,1,0=n μμ =n , L,2,1=n 于是由式(5),式(6),并设 1<= μ λρ ,有 0! pnp n n ρ= , L,2,1=n (72) ρ−= ep0 (73) 平均队长 ρρ === ∑∑ ∞ = ∞ = 0 0 0 !n n n ns pn nnpL (74) 平均排队长 1)1()1( 0 1 −+=−−=−= − ∞ = ∑ ρρ epLpnL s n nq (75) 有效到达率(单位时间内实际进入系统的顾客的平均数) )1(10 ρμλλ − ∞ = −=+= ∑ epnn ne (76) 平均逗留时间为 )1( ρμ ρ λ −−== e LW e s s (77) 平均等待时间 μλ 1−== s e q q WLW (78) 7.3 非生灭过程排队模型 -143- 一个排队系统的特征是由输入过程,服务机制和排队规则决定的。本章前面所讨论 的排队模型都是输入过程为 Poisson 流,服务时间服从负指数分布的生灭过程排队模 型。这类排队系统的一个主要特征是马尔可夫性,而马尔可夫性的一个主要性质是由系 统当前的状态可以推断未来的状态。但是,当输入过程不是Poisson 流或服务时间不服 从负指数分布时,仅知道系统内当前的顾客数,对于推断系统未来的状态是不充足的, 因为正在接受服务的顾客,已经被服务了多长时间,将影响其离开系统的时间。因此, 必须引入新的方法来分析具有非负指数分布的排队系统。 7.3.1 1// GM 排队模型 1// GM 系统是指顾客的到达为 Poisson 流,单个服务台,服务时间为一般分布 的排队系统。现假设顾客的平均到达率为 λ ,服务时间的均值为 μ 1 ,方差为 2σ ,则可 证明:当 1<= μ λρ 时,系统可以达到平稳状态,而给出平稳分布的表示是比较困难的。 已有的几个结果为: ρ−=10p (79) )1(2 222 ρ ρσλ − +=qL (80) qs LL += ρ (81) λ q q LW = (82) μ 1+= qs WW (83) 由式(80)可看出, qssq WWLL ,,, 等仅依赖于 ρ 和服务时间的方差 2σ ,而与分布的类 型没有关系,这是排队论中一个非常重要且令人惊奇的结果,式(80)通常被称为 Pollaczek-Khintchine(P-K)公式。 从式(80)还不难发现,当服务率 μ 给定后,当方差 2σ 减少时,平均队长和等待 时间等都将减少。因此,可通过改变服务时间的方差来缩短平均队长,当且仅当 02 =σ , 即服务时间为定长时,平均队长(包括等待时间)可减少到最少水平,这一点是符合直 观的,因为服务时间越有规律,等候的时间也就越短。 例 8 有一汽车冲洗台,汽车按 Poisson 流到达,平均每小时到达 18 辆,冲洗时 间V 根据过去的经验表明,有 /05.0)( hVE = 辆, 2)h/(01.0)(Var 辆=V ,求有关运行 指标,并对系统进行评价。 解 本例中, 18=λ , 9.005.018)( =×== VEλρ , 01.02 =σ , 20=μ ,于 是 25.20)9.01(2 )9.0(01.018 22 =− +×=qL (辆) 15.219.025.20 =+=sL (辆) 175.118 15.21 ==sW (h) -144- 125.118 25.20 ==qW (h) 上述结果表明,这个服务机构很难令顾客满意,突出的问题是顾客的平均等待时间 是服务时间的 5.2205.0 125.1 )( ==VE Wq 倍(通常称 )(VE Wq 为顾客的时间损失系数)。 例 9 考虑定长服务时间 ∞/1// DM 模型,这时, μ 1)( =VE , 0Var(V)2 ==σ , 由式(80)有 )(2)1(2 22 λμμ λ ρ ρ −=−=qL (84) )(2 )2( λμμ λμλρ − −=+= qs LL (85) )(2)1(2 2 λμμ λ ρλ ρ −=−=qW (86) μ 1+= qs WW (87) 将式(13)和式(86)比较,不难发现在服务时间服从负指数分布的条件下,等待时间 正好是定长服务时间的 2 倍。可以证明,在一般服务时间分布下得到的 qL 和 qW 中,以 定长服务时间下得到的为最小。 7.3.2 爱尔朗(Erlang)排队模型 爱尔朗分布族比负指数分布族对现实世界具有更广泛的适应性。下面介绍一个最 简单的爱尔朗排队模型。 对爱尔朗排队模型研究的一般方法是根据 k 阶 Erlang 分布恰为 k 个相同负指数分 布随机变量和的分布这个关系,把服务时间或到达过程假想地(实际并非如此)分为 k 个独立的同分布的位相(或阶段),然后利用负指数分布的性质来加以分析。如对 ∞/1// kEM 系统来说,服务时间是 k 阶 Erlang 分布,把每个顾客的服务时间假想地 分为 k 个位相,每个位相的平均服务时间为 μk 1 ,顾客先进入第 k 个位相,最后进入第 1 个位相。仍令 N 为系统达到平衡状态时的顾客数,但考虑到顾客可能处在不同位相, 故系统的状态一般用 ),( in 表示,其中 n 表示有 n 个顾客在系统中,i 表示正在接受服 务的顾客处在第i 个位相,令 )},({ inNPpni == 则可得到类似于(3)的差分方程组,从而在平稳分布存在的条件下得到平稳分布和各 有关指标。由于本节已给出了 ∞/1// GM 系统的主要结果,作为一个特例,可直接给 出 ∞/1// kEM 的主要数量指标。 由于服务时间为 k 阶 Erlang 分布,其分布密度函数为 kt k ek ktkta μμμ − − −= )!1( )()( 1 , 0≥t (88) 故其均值和方差分别为 -145- μ 1)( =kEE , 2 1)(Var μkEk = 将 μ λρ = , 2 2 1 μσ k= 代入式(80)~式(83),得 )1(2 )1( 1)1(2 )1( 222 ρ ρ ρ ρ ρ ρ − −−−=− += k k k kLq (89) )1(2 )1( 1 2 ρ ρ ρ ρρ − −−−=+= k kLL qs (90) )1(2 )1( )1( 1 ρμ ρ ρμ − −−−= k kWs (91) )1(2 )1( )1( ρμ ρ ρμ ρ − −−−= k kWq (92) 例 10 设一电话间的顾客按 Poisson 流到达,平均每小时到达 6 人,平均通话时 间为 8 分钟,方差为 16 分钟。直观上估计通话时间服从爱尔朗分布,管理人员想知道 平均排队长度和顾客平均等待时间是多少? 解 设V 为通话时间,服从 k 阶 Erlang 分布,由 416 8 )(Var )]([ 22 === V VEk 可知该系统为 ∞/1// 4EM 系统,其中 8.060 86 =×=ρ 。由式(89),有 2)8.01(42 )14()8.0( 2 =−× +=qL (人) 33.06 2 === λ q q LW (h) §8 排队系统的优化 排队系统中的优化模型,一般可分为系统设计的优化和系统控制的优化。前者为静 态优化,即在服务系统设置以前根据一定的质量指标,找出参数的最优值,从而使系统 最为经济。后者为动态优化,即对已有的排队系统寻求使其某一目标函数达到最优的运 营机制。由于对后一类问题的阐述需要较多的数学知识,所以本节着重介绍静态最优问 题。 在优化问题的处理方法上,一般根据变量的类型是离散的还是连续的,相应地采用 边际分析方法或经典的微分法,对较为复杂的优化问题需要用非线性规划或动态规划等 方法。 8.1 1// MM 模型中的最优服务率 μ 先考虑 ∞/1// MM 模型,取目标函数 z 为单位时间服务成本与顾客在系统中逗留 费用之和的期望值,即 sws Lccz += μ 其中 sc 为服务一个顾客时单位时间内的服务费用, wc 为每个顾客在系统中逗留单位时 -146- 间的费用,则由式(9),有 λμ λμ −+= ws ccz 令 0)( 1 2 =−−= λμλμ ws ccd dz 解出最优服务率为 λλμ s w c c+=* (93) 下面考虑 KMM /1// 模型,从使服务机构利润最大化来考虑。由于在平稳状态下, 单位时间内到达并进入系统的平均顾客数为 )1( Ke p−= λλ ,它也等于单位时间内实际 服务完的平均顾客数。设每服务一个顾客服务机构的收入为G 元,于是单位时间内收 入的期望值是 GpK )1( −λ 元,故利润 z 为 μρ ρλμλ sK K sK cGcGpz −− −=−−= +11 1)1( μλμ λμλμ sKK KK cG −− −= ++ 11 令 0=μd dz ,得 G cKK s K K K =− ++− + + + 21 1 1 )1( )1( ρ ρρρ (94) 当给定 K 和 G cs 后,即可由(94)式得到最优利润的 *μ 。 例 11 设某工人照管 4 台自动机床,机床运转时间(或各台机床损坏的相继时间) 平均为负指数分布,假定平均每周有一台机床损坏需要维修,机床运转单位时间内平均 收入 100 元,而每增加 1 单位 μ 的维修费用为 75 元。求使总利益达到最大的 *μ 。 解 该系统为 KKMM //1// 系统,其中 4=K , 1=λ , 100=G , 75=sC 设 sL 是队长,则正常运装的机器为 sLK − 部,因此目标函数为 μ75)(100 −−= sLKf 题意就是在上述条件下,求目标函数 f 的最大值。 编写 LINGO 程序如下: model: s=1;k=4;lamda=1; L_s=@pfs(k*lamda/mu,s,k); max=100*(k-L_s)-75*mu; end 求得 799.1* =μ ,最优目标值 49.31* =f 。 -147- 例 12 假定有一混合制排队系统 KMM /1// ,其中 3=K ,顾客的到达率为每 小时 3.6 人,其到达间隔服从 Poisson 过程,系统服务一个顾客收费 2 元。又设系统的 服务强度 μ( T 1=μ ,T 为服务时间)服从负指数分布,其服务成本为每小时 μ5.0 元。 求系统为每个顾客的最佳服务时间。 解 系统的损失率为 Kp ,则系统每小时服务的人数为 )1( Kp−λ ,每小时运行成 本为 μ5.0 ,因此目标函数为 μλ 5.0)1(2 −−= Kpf 题意就是在上述条件下,求目标函数 f 的最大值。 编写 LINGO 程序如下: model: sets: state/1..3/:p; endsets lamda=3.6;k=3; lamda*p0=p(1)/t; (lamda+1/t)*p(1)=lamda*p0+p(2)/t; @for(state(i)|i #gt# 1 #and# i #lt# k: (lamda+1/t)*p(i)=lamda*p(i-1)+p(i+1)/t); lamda*p(k-1)=p(k)/t; p0+@sum(state:p)=1; max=2*lamda*(1-p(k))-0.5/t; end 求得系统为每位顾客最佳服务时间是0.2238h,系统每小时赢利3.70元。 8.2 sMM // 模型中的最优的服务台数 *s 这里仅讨论 ∞/// sMM 系统,已知在平稳状态下单位时间内总费用(服务费用 与等待费用)之和的平均值为 Lcscz ws += ' (95) 其中 s 为服务台数, ' sc 是每个服务台单位时间内的费用,L 是平均队长。由于 ' sc , wc 是 给定的,故唯一可变的是服务台数 s ,所以可将 z 看成是 s 的函数,记为 )(szz = ,并 求使 )(sz 达到最小的 *s 。 因为 s 只取整数, )(sz 不是连续函数,故不能用经典的微分法,下面采用边际分 析方法。根据 )( *sz 应为最小的特点,有 )1()( )1()( ** ** +≤ −≤ szsz szsz (96) 将式(95)代入式(96),得 )1()1()( **'**' −+−≤+ sLcscsLcsc wsws )1()1()( **'**' +++≤+ sLcscsLcsc wsws 化简后得到 -148- )()1()1()( ** ' ** sLsLc csLsL w s −−≤≤+− (97) 依次求当 L,3,2,1=s 时 L 的值,并计算相邻两个 L 值的差。因 w s c c' 是已知数,根据其 落在哪个与 s 有关的不等式中,即可定出最优的 *s 。 例 13 某检验中心为各工厂服务,要求进行检验的工厂(顾客)的到来服从 Poisson 流,平均到达率为 48=λ (次/d);每天来检验由于停工等原因损失 6 元;服务(检验) 时间服从负指数分布,平均服务率为 25=μ (次/d);每设置一个检验员的服务成本为 4 元/d,其它条件均适合 ∞/// sMM 系统。问应设几个检验员可使总费用的平均值最 少? 解 已知 4' =sc , 6=wc , 48=λ , 25=μ , 92.1=μ λ ,设检验员数为 s ,由 式(20)和式(25) 11 0 0 )92.1()!1( )92.1( ! )92.1( −− = ⎥⎦ ⎤ ⎢⎣ ⎡ −−+= ∑ s n sn ssnp 92.1)92.1()!1( )92.1( 2 1 0 +−−=+= + ss pLL s q ρ 将 5,4,3,2,1=s 依次代入得到表 2。由于 67.06 4' == w s c c 落在区间 )845.21,582.0( 之间, 故 3* =s ,即当设 3 个检验员时可使总费用 z 最小,最小值为 87.27)3()( * == zsz (元) 表2 检验员数 s 平均顾客数 )(sL )()1(~)1()( sLsLsLsL −−+− 总费用 )(sz 1 2 3 4 5 ∞ 24.49 2.645 2.063 1.952 21.845~ ∞ 0.582~21.845 0.111~0.582 ∞ 154.94 27.87 28.38 31.71 求解的 LINGO 程序如下: model: lamda=48;mu=25;rho=lamda/mu; P_wait=@peb(rho,s); L_q=P_wait*rho/(s-rho); L_s=L_q+rho; min=4*s+6*L_s; @gin(s);@bnd(2,s,5); end §9 产生给定分布的随机数的方法 Matlab 可以产生常用分布的随机数。下面我们介绍按照给定的概率分布产生随机 -149- 数的一般方法,这些方法都以 )1,0(U 分布的随机变量为基础。 (i)反变换法 定理 设 X 是一个具有连续分布函数 )(xF 的随机变量,则 )(XF 在[0,1]上服 从均匀分布。 设概率分布函数 )(xF 是严格单调增的, F 的反函数记作 1−F 。先产生 )1,0(~ UU ,再取 )(1 UFX −= 即为所求,称为反变换法。 指数分布 )(Exp λ 能够方便地用反变换法产生。由 )(Exp λ 的分布函数 xexF λ−−= 1)( ,可得 λ )1ln()(1 UUFX −−== − 思考 有的书上用 λ UX ln−= 代替上式,对吗,为什么? (ii)卷积法 如果随机变量 X 是 n 个独立、同分布的另一随机变量Y 之和,而Y 又容易产生时, 先产生 n 个独立的 nYYY ,,, 21 L ,再令 nYYX ++= L1 即可。因为 X 的分布函数是 nYYY ,,, 21 L 分布函数的卷积,故称为卷积法。 二项分布可以用卷积法产生。因为 ),(~ pnBX 是 n 个独立的 )(~ pBernY 之和, 而 )(~ pBernY 很容易由 )1,0(~ UU 按以下方法得到:若 pU ≤ ,令 1=Y ;否则令 0=Y 。 (iii)取舍法 若随机变量 X 在有限区间 ),( ba 内变化,但概率密度 )(xf 具有任意形式(甚至没 有解析表达式),无法用前面的方法产生时,可用取舍法。一种比较简单的取舍法的步 骤是: 1o 产生 ),(~ baUY 和 )1,0(~ UU ; 2o 记 )(max xfC bxa ≤≤ = ,若 C YfU )(≤ ,则取 YX = ;否则,舍去,返回 1o。 §10 排队模型的计算机模拟 10.1 确定随机变量概率分布的常用方法 在模拟一个带有随机因素的实际系统时,究竟用什么样的概率分布描述问题中的随 机变量,是我们总是要碰到的一个问题,下面简单介绍确定分布的常用方法: 1o 根据一般知识和经验,可以假定其概率分布的形式,如顾客到达间隔服从指数 分布 )(Exp λ ;产品需求量服从正态分布 ),( 2σμN ;订票后但未能按时前往机场登机 的人数服从二项分布 ),( pnB 。然后由实际数据估计分布的参数 σμλ ,, 等,参数估计 可用极大似然估计、矩估计等方法。 2o 直接由大量的实际数据作直方图,得到经验分布,再通过假设检验,拟合分布 函数,可用 2χ 检验等方法。 3o 既缺少先验知识,又缺少数据时,对区间 ),( ba 内变化的随机变量,可选用 Beta 分布(包括均匀分布)。先根据经验确定随机变量的均值 μ 和频率最高时的数值(即密 -150- 度函数的最大值点) m ,则 Beta 分布中的参数 21,αα 可由以下关系求出: 21 1 )( αα αμ + −+= aba , 2 ))(1( 21 1 −+ −−+= αα α abam . 10.2 计算机模拟 当排队系统的到达间隔时间和服务时间的概率分布很复杂时,或不能用公式给出 时,那么就不能用解析法求解。这就需用随机模拟法求解,现举例说明。 例 14 设某仓库前有一卸货场,货车一般是夜间到达,白天卸货,每天只能卸货 2 车,若一天内到达数超过 2 车,那么就推迟到次日卸货。根据表 3 所示的数据,货车到 达数的概率分布(相对频率)平均为 1.5 车/天,求每天推迟卸货的平均车数。 表 3 到达车数的概率 到达车数 0 1 2 3 4 5 ≥ 6 概 率 0.23 0.30 0.30 0.1 0.05 0.02 0.00 解 这是单服务台的排队系统,可验证到达车数不服从泊松分布,服务时间也不服 从指数分布(这是定长服务时间)。 随机模拟法首先要求事件能按历史的概率分布规律出现。模拟时产生的随机数与事 件的对应关系如表 4。 表 4 到达车数的概率及其对应的随机数 到达车数 概 率 累积概率 对应的随机数 0 1 2 3 4 5 0.23 0.30 0.30 0.1 0.05 0.02 0.23 0.53 0.83 0.93 0.98 1.00 0 <≤ x 0.23 0.23 <≤ x 0.53 0.53 <≤ x 0.83 0.83 <≤ x 0.93 0.93 <≤ x 0.98 0.98 ≤≤ x 1.00 我们用 a1 表示产生的随机数,a2 表示到达的车数,a3 表示需要卸货车数,a4 表 示实际卸货车数,a5 表示推迟卸货车数。编写程序如下: clear rand('state',sum(100*clock)); n=50000; m=2 a1=rand(n,1); a2=a1; %a2初始化 a2(find(a1<0.23))=0; a2(find(0.23<=a1&a1<0.53))=1; a2(find(0.53<=a1&a1<0.83))=2; a2(find(0.83<=a1&a1<0.93),1)=3; a2(find(0.93<=a1&a1<0.98),1)=4; a2(find(a1>=0.98))=5; a3=zeros(n,1);a4=zeros(n,1);a5=zeros(n,1); %a2初始化 a3(1)=a2(1); if a3(1)<=m a4(1)=a3(1);a5(1)=0; else -151- a4(1)=m;a5(1)=a2(1)-m; end for i=2:n a3(i)=a2(i)+a5(i-1); if a3(i)<=m a4(i)=a3(i);a5(i)=0; else a4(i)=m;a5(i)=a3(i)-m; end end a=[a1,a2,a3,a4,a5]; sum(a)/n 例 15 银行计划安置自动取款机,已知 A 型机的价格是 B 型机的 2 倍,而 A 型机 的性能—平均服务率也是 B 型机的 2 倍,问应该购置 1 台 A 型机还是 2 台 B 型机。 为了通过模拟回答这类问题,作如下具体假设,顾客平均每分钟到达 1 位, A 型 机的平均服务时间为 0.9 分钟, B 型机为 1.8 分钟,顾客到达间隔和服务时间都服从 指数分布,2 台 B 型机采取 2// MM 模型(排一队),用前 100 名顾客(第 1 位顾客到 达时取款机前为空)的平均等待时间为指标,对 A 型机和 B 型机分别作 1000 次模拟, 进行比较。 理论上已经得到, A 型机和 B 型机前 100 名顾客的平均等待时间分别为 13.4)100(1 =μ , 70.3)100(2 =μ ,即 B 型机优。 对于 1// MM 模型,记第 k 位顾客的到达时刻为 kc ,离开时刻为 kg ,等待时间为 kw ,它们很容易根据已有的到达间隔 ki 和服务时间 ks 按照以下的递推关系得到 ( 01 =w ,设 11, gc 已知): kkk icc += −1 , kkkk sgcg += − ),max( 1 ),0max( 1 kkk cgw −= − , L,3,2=k 在模拟 A 型机时,我们用cspan表示到达间隔时间,sspan表示服务时间,ctime 表示到达时间,gtime表示离开时间,wtime表示等待时间。我们总共模拟了 m 次, 每次 n 个顾客。程序如下: tic rand('state',sum(100*clock)); n=100;m=1000;mu1=1;mu2=0.9; for j=1:m cspan=exprnd(mu1,1,n);sspan=exprnd(mu2,1,n); ctime(1)=cspan(1); gtime(1)=ctime(1)+sspan(1); wtime(1)=0; for i=2:n ctime(i)=ctime(i-1)+cspan(i); gtime(i)=max(ctime(i),gtime(i-1))+sspan(i); wtime(i)=max(0,gtime(i-1)-ctime(i)); end result1(j)=sum(wtime)/n; end result_1=sum(result1)/m -152- toc 类似地,模拟 B 型机的程序如下: tic rand('state',sum(100*clock)); n=100;m=1000;mu1=1;mu2=1.8; for j=1:m cspan=exprnd(mu1,1,n);sspan=exprnd(mu2,1,n); ctime(1)=cspan(1);ctime(2)=ctime(1)+cspan(2); gtime(1:2)=ctime(1:2)+sspan(1:2); wtime(1:2)=0;flag=gtime(1:2); for i=3:n ctime(i)=ctime(i-1)+cspan(i); gtime(i)=max(ctime(i),min(flag))+sspan(i); wtime(i)=max(0,min(flag)-ctime(i)); flag=[max(flag),gtime(i)]; end result2(j)=sum(wtime)/n; end result_2=sum(result2)/m toc 读者可以用下面的程序与上面的程序比较了解编程的效率问题。 tic clear rand('state',sum(100*clock)); n=100;m=1000;mu1=1;mu2=0.9; for j=1:m ctime(1)=exprnd(mu1); gtime(1)=ctime(1)+exprnd(mu2); wtime(1)=0; for i=2:n ctime(i)=ctime(i-1)+exprnd(mu1); gtime(i)=max(ctime(i),gtime(i-1))+exprnd(mu2); wtime(i)=max(0,gtime(i-1)-ctime(i)); end result(j)=sum(wtime)/n; end result=sum(result)/m toc 习 题 六 1. 一个车间内有10台相同的机器,每台机器运行时每小时能创造4元的利润,且平 均每小时损坏一次。而一个修理工修复一台机器平均需4小时。以上时间均服从指数分 布。设一名修理工一小时工资为6元,试求: (i)该车间应设多少名修理工,使总费用为最小; (ii)若要求不能运转的机器的期望数小于4台,则应设多少名修理工; (iii)若要求损坏机器等待修理的时间少于4小时,又应设多少名修理工。 2. 到达某铁路售票处顾客分两类:一类买南方线路票,到达率为 1λ /小时,另一 类买北方线路票,到达率为 2λ /小时,以上均服从泊松分布。该售票处设两个窗口,各 -153- 窗口服务一名顾客时间均服从参数 10=μ 的指数分布。试比较下列情况时顾客分别等 待时间 qW :(i)两个窗口分别售南方票和北方票;(ii)每个窗口两种票均出售。(分 别比较 8,6,4,221 == λλ 时的情形) 3. 一名修理工负责5台机器的维修,每台机器平均每2h损坏一次,又修理工修复一 台机器平均需时18.75min,以上时间均服从负指数分布。试求: (1)所有机器均正常运转的概率; (2)等待维修的机器的期望数; (3)假如希望做到有一半时间所有机器都正常运转,则该修理工最多看管多少台 机器。 (4)假如维修工工资为8元/h,机器不能正常运转时的损失为40元/h,则该修理工 看管多少台机器较为经济合理。 -154- 第七章 对策论 §1 引言 社会及经济的发展带来了人与人之间或团体之间的竞争及矛盾,应用科学的方法来 解决这样的问题开始于 17 世纪的科学家,如 C.,Huygens 和 W.,Leibnitz 等。现代对 策论起源于 1944 年 J.,Von Neumann 和 O.,Morgenstern 的著作《Theory of Games and Economic Behavior》。 对策论亦称竞赛论或博弈论。是研究具有斗争或竞争性质现象的数学理论和方法。 一般认为,它既是现代数学的一个新分支,也是运筹学中的一个重要学科。对策论发展 的历史并不长,但由于它所研究的现象与人们的政治、经济、军事活动乃至一般的日常 生活等有着密切的联系,并且处理问题的方法又有明显特色。所以日益引起广泛的注意。 在日常生活中,经常看到一些具有相互之间斗争或竞争性质的行为。具有竞争或对 抗性质的行为称为对策行为。在这类行为中。参加斗争或竞争的各方各自具有不同的目 标和利益。为了达到各自的目标和利益,各方必须考虑对手的各种可能的行动方案,并 力图选取对自己最为有利或最为合理的方案。对策论就是研究对策行为中斗争各方是否 存在着最合理的行动方案,以及如何找到这个合理的行动方案的数学理论和方法。 §2 对策问题 对策问题的特征是参与者为利益相互冲突的各方,其结局不取决于其中任意一方的 努力而是各方所采取的策略的综合结果。 先考察一个实际例子。 例 1(囚徒的困境) 警察同时逮捕了两人并分开关押,逮捕的原因是他们持有大 量伪币,警方怀疑他们伪造钱币,但没有找到充分证据,希望他们能自己供认,这两个 人都知道:如果他们双方都不供认,将被以持有大量伪币罪被各判刑 18 个月;如果双 方都供认伪造了钱币,将各被判刑 3 年;如果一方供认另一方不供认,则供认方将被从 宽处理而免刑,但另一方面将被判刑 7 年。将嫌疑犯 A 、 B 被判刑的几种可能情况列 于表 1。 表 1 嫌疑犯 B 供认 不供认 嫌疑犯 A 供认 不供认 (3,3) (0,7) (7,0) (1.5,1.5) 表 1 中每对数字表示嫌疑犯 BA、 被判刑的年数。如果两名疑犯均担心对方供认并希 望受到最轻的惩罚,最保险的办法自然是承认制造了伪币。 从这一简单实例中可以看出对策现象中包含有的几个基本要素。 2.1 对策的基本要素 (i)局中人 在一个对策行为(或一局对策)中,有权决定自己行动方案的对策参加者,称为局 中人。通常用 I 表示局中人的集合.如果有 n 个局中人,则 },,2,1{ nI L= 。一般要求 一个对策中至少要有两个局中人。在例 1 中,局中人是 BA、 两名疑犯。 (ii)策略集 一局对策中,可供局中人选择的一个实际可行的完整的行动方案称为一个策略。参 加对策的每一局中人i , Ii ∈ ,都有自己的策略集 iS 。一般,每一局中人的策略集中 至少应包括两个策略。 -155- (iii)赢得函数(支付函数) 在一局对策中,各局中人所选定的策略形成的策略组称为一个局势,即若 is 是第i 个局中人的一个策略,则 n 个局中人的策略组 ),,,( 21 nssss L= 就是一个局势。全体局势的集合 S 可用各局中人策略集的笛卡尔积表示,即 nSSSS ×××= L21 当局势出现后,对策的结果也就确定了。也就是说,对任一局势, Ss∈ ,局中人 i 可以得到一个赢得 )(sH i 。显然, )(sH i 是局势 s 的函数,称之为第i 个局中人的赢 得函数。这样,就得到一个向量赢得函数 ))(,),(()( 1 sHsHsH nL= 。 本节我们只讨论有两名局中人的对策问题,其结果可以推广到一般的对策模型中 去。 2.2 零和对策(矩阵对策) 零和对策是一类特殊的对策问题。在这类对策中,只有两名局中人,每个局中人都 只有有限个策略可供选择。在任一纯局势下,两个局中人的赢得之和总是等于零,即双 方的利益是激烈对抗的。 设局中人Ⅰ、Ⅱ的策略集分别为 },,{ 11 mS αα L= , },,{ 12 nS ββ L= 当局中人Ⅰ选定策略 iα 和局中人Ⅱ选定策略 jβ 后,就形成了一个局势 ),( ji βα ,可见 这样的局势共有 mn 个。对任一局势 ),( ji βα ,记局中人Ⅰ的赢得值为 ija ,并称 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = mnmm n n aaa aaa aaa A L LLLL L L 21 22221 11211 为局中人Ⅰ的赢得矩阵(或为局中人Ⅱ的支付矩阵)。由于假定对策为零和的,故局中 人Ⅱ的赢得矩阵就是 A− 。 当局中人Ⅰ、Ⅱ和策略集 1S 、 2S 及局中人Ⅰ的赢得矩阵 A 确定后,一个零和对策 就给定了,零和对策又可称为矩阵对策并可简记成 };,{ 21 ASSG = 。 例 2 设有一矩阵对策 };,{ 21 ASSG = ,其中 },,{ 3211 ααα=S , },,,{ 43212 ββββ=S , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ −− −− = 161006 1018214 2230612 A 从 A 中可以看出,若局中人Ⅰ希望获得最大赢利 30,需采取策略 1α ,但此时若局 中人Ⅱ采取策略 4β ,局中人Ⅰ非但得不到 30,反而会失去 22。为了稳妥,双方都应考 虑到对方有使自己损失最大的动机,在最坏的可能中争取最好的结果,局中人Ⅰ采取策 略 321 ααα 、、 时,最坏的赢得结果分别为 -156- 22}22,30,6,12min{ −=−− 2}10,18,2,14min{ = 10}16,10,0,6min{ −=−− 其中最好的可能为 2}10,2,22max{ =−− 。如果局中人Ⅰ采取策略 2α ,无论局中人Ⅱ 采取什么策略,局中人Ⅰ的赢得均不会少于 2。 局中人Ⅱ采取各方案的最大损失为 14}6,14,12max{ =− , 2}0,2,6max{ =− , 30}10,18,30max{ =− ,和 16}16,10,22max{ =− 。当局中人Ⅱ采取策略 2β 时,其损 失不会超过 2。注意到在赢得矩阵中,2 既是所在行中的最小元素又是所在列中的最大 元素。此时,只要对方不改变策略,任一局中人都不可能通过变换策略来增大赢得或减 少损失,称这样的局势为对策的一个稳定点或稳定解。 定义 1 设 ),( yxf 为一个定义在 Ax ∈ 及 By ∈ 上的实值函数,如果存在 Ax ∈* , By ∈* ,使得对一切 Ax ∈ 和 By ∈ ,有 )*,(*)*,(*),( yxfyxfyxf ≤≤ 则称 *)*,( yx 为函数 f 的一个鞍点。 定义 2 设 };,{ 21 ASSG = 为矩阵对策,其中 },,,{ 211 mS ααα L= , },,,{ 212 nS βββ L= , nmijaA ×= )( 。若等式 **maxminminmax jiijijijji aaa == (1) 成立,记 ** jiG aV = ,则称 GV 为对策G 的值,称使(1)式成立的纯局势 ),( ** ji βα 为 对策G 的鞍点或稳定解,赢得矩阵中与 ),( ** ji βα 相对应的元素 ** jia 称为赢得矩阵的鞍 点, *iα 与 *jβ 分别称为局中人Ⅰ与Ⅱ的最优纯策略。 给定一个对策G ,如何判断它是否具有鞍点呢?为了回答这一问题,先引入下面 的极大极小原理。 定理 1 设 };,{ 21 ASSG = ,记 ijji aminmax=μ , ijij amaxmin−=ν ,则必有 0≤+νμ 。 证明 )(minmax ijij a−=ν ,易 见 μ 为Ⅰ的最小赢得,ν 为Ⅱ的最小赢得,由于G 是零和对策,故 0≤+νμ 必成立。 定理 2 零和对策G 具有稳定解的充要条件为 0=+νμ 。 证明:(充分性)由 μ 和ν 的定义可知,存在一行例如 p 行,μ 为 p 行中的最小元 素,且存在一列例如 q 列, ν− 为 q 列中的最大元素。故有 μ≥pqa 且 ν−≤pqa 又因 0=+νμ ,所以 νμ −= ,从而得出 μ=pqa , pqa 为赢得矩阵的鞍点, ),( qp βα 为G 的稳定解。 (必要性)若G 具有稳定解 ),( qp βα ,则 pqa 为赢得矩阵的鞍点。故有 pqpjjijji aaa =≥= minminmaxμ pqiqiijij aaa =≤=− maxmaxminν -157- 从而可得 0≥+νμ ,但根据定理 1, 0≤+νμ 必成立,故必有 0=+νμ 。 上述定理给出了对策问题有稳定解(简称为解)的充要条件。当对策问题有解时, 其解可以不唯一,当解不唯一时,解之间的关系具有下面两条性质: 性质 1 无差别性。即若 ),( 11 ji βα 与 ),( 22 ji βα 是对策G 的两个解,则必有 2211 jiji aa = 。 性质 2 可交换性。即若 ),( 11 ji βα 和 ),( 22 ji βα 是对策G 的两个解,则 ),( 21 ji βα 和 ),( 12 ji βα 也是解。 §3 零和对策的混合策略 具有稳定解的零和问题是一类特别简单的对策问题,它所对应的赢得矩阵存在鞍 点,任一局中人都不可能通过自己单方面的努力来改进结果。然而,在实际遇到的零和 对策中更典型的是 0≠+νμ 的情况。由于赢得矩阵中不存在鞍点,此时在只使用纯策 略的范围内,对策问题无解。下面我们引进零和对策的混合策略。 设局中人Ⅰ用概率 ix 选用策略 iα ,局中人Ⅱ用概率 jy 选用策略 jβ , ∑∑ == == m i n j ji yx 11 1,记 T mxxx ),,( 1 L= , T nyyy ),,( 1 L= ,则局中人Ⅰ的期望赢得为 AyxyxE T=),( 。 记 * 1S :策略 mαα ,,1 L * 2S :策略 nββ ,,1 L 概率 mxx ,,1 L 概率 nyy ,,1 L 分别称 * 1S 与 * 2S 为局中人Ⅰ和Ⅱ的混合策略。 下面简单地记 }1;,,1,0|),,{( 1 1 * 1 ==≥= ∑ = m i ii T m xmixxxS LL , }1;,,1,0|),,{( 1 1 * 2 ∑ = ==≥= n j jj T n ynjyyyS LL 定义4 若存在 m 维概率向量 x 和 n 维概率向量 y ,使得对一切 m 维概率向量 x 和 n 维概率向量 y 有 AyxyAxyAx T y T x T minmax == 则称 ),( yx 为混合策略对策问题的鞍点。 定理 3 设 * 1Sx ∈ , * 2Sy ∈ ,则 ),( yx 为 };,{ 21 ASSG = 的解的充要条件是: ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =≥ =≤ ∑ ∑ = = njyAxxa miyAxya T i m i ij T n j jij ,,2,1, ,,2,1, 1 1 L L 定理 4 任意混合策略对策问题必存在鞍点,即必存在概率向量 x 和 y ,使得: -158- AyxAyxyAx T xy T yx T maxminminmax == 。 使用纯策略的对策问题(具有稳定解的对策问题)可以看成使用混合策略的对策问 题的特殊情况,相当于以概率 1 选取其中某一策略,以概率 0 选取其余策略。 例 3 BA、 为作战双方, A 方拟派两架轰炸机Ⅰ和Ⅱ去轰炸 B 方的指挥部,轰 炸机Ⅰ在前面飞行,Ⅱ随后。两架轰炸机中只有一架带有炸弹,而另一架仅为护航。轰 炸机飞至 B 方上空,受到 B 方战斗机的阻击。若战斗机阻击后面的轰炸机Ⅱ,它仅受 Ⅱ的射击,被击中的概率为 0.3(Ⅰ来不及返回攻击它)。若战斗机阻击Ⅰ,它将同时受 到两架轰炸机的射击,被击中的概率为 0.7。一旦战斗机未被击中,它将以 0.6 的概率 击毁其选中的轰炸机。请为 BA、 双方各选择一个最优策略,即:对于 A 方应选择哪 一架轰炸机装载炸弹?对于 B 方战斗机应阻击哪一架轰炸机? 解 双方可选择的策略集分别是 },{ 21 αα=AS , 1α :轰炸机Ⅰ装炸弹,Ⅱ护航 2α :轰炸机Ⅱ装炸弹,Ⅰ护航 },{ 21 ββ=BS , 1β :阻击轰炸机Ⅰ 2β :阻击轰炸机Ⅱ 赢得矩阵 22)( ×= ijaR , ija 为 A 方采取策略 iα 而 B 方采取策略 jβ 时,轰炸机轰炸 B 方指挥部的概率,由题意可计算出: 82.0)6.01(3.07.011 =−+=a 112 =a , 121 =a 58.0)6.01(7.03.022 =−+=a 即赢得矩阵 ⎥⎦ ⎤ ⎢⎣ ⎡= 58.01 182.0R 易求得 82.0minmax == ijji aμ , 1maxmin −=−= ijij aν 。由于 0≠+νμ ,矩阵 R 不存在鞍点,应当求最佳混合策略。 现设 A 以概率 1x 取策略 1α 、以概率 2x 取策略 2α ; B 以概率 1y 取策略 1β 、以概 率 2y 取策略 2β 。 先从 B 方来考虑问题。 B 采用 1β 时, A 方轰炸机攻击指挥部的概率期望值为 211 82.0)( xxE +=β ,而 B 采用 2β 时, A 方轰炸机攻击指挥部的概率的期望值为 212 58.0)( xxE +=β 。若 )()( 21 ββ EE ≠ ,不妨设 )()( 21 ββ EE < ,则 B 方必采用 1β 以减少指挥部被轰炸的概率。故对 A 方选取的最佳概率 1x 和 2x ,必满足: ⎩ ⎨ ⎧ =+ +=+ 1 58.082.0 21 2121 xx xxxx 即 ⎩ ⎨ ⎧ =+ +=+ 121 222112221111 xx xaxaxaxa -159- 由此解得 7.01 =x , 3.02 =x 。 同样,可从 A 方考虑问题,得 ⎩ ⎨ ⎧ =+ +=+ 1 58.082.0 21 2121 yy yyyy 即 ⎩ ⎨ ⎧ =+ +=+ 121 222121212111 yy yayayaya 并解得 7.01 =y , 3.02 =y 。 B 方指挥部被轰炸的概率的期望值 874.0=GV 。 记零和对策G 的解集为 )(GT ,下面三个定理是关于对策解集性质的主要结果: 定理 5 设有两个零和对策 };,{ 1211 ASSG = , };,{ 2212 ASSG = 其中 }{1 ijaA = , }{2 LaA ij += , L 为任一常数。则 (i) LVV GG += 12 (ii) )()( 21 GTGT = 定理 6 设有两个零和对策 };,{ 211 ASSG = , };,{ 212 ASSG α= 其中 0>α 为任一常数。则 (i) 12 GG VV α= (ii) )()( 21 GTGT = 定理 7 设 };,{ 21 ASSG = 为一零和对策,且 TAA −= 为反对称矩阵(亦称这种对 策为对称对策)。则 (i) 0=GV (ii) )()( 21 GTGT = 其中 )(1 GT 和 )(2 GT 为局中人Ⅰ和Ⅱ的最优策略集。 §4 零和对策的线性规划解法 当 2>m 且 2>n 时,通常采用线性规划方法求解零和对策问题。 局中人Ⅰ选择混合策略 x 的目的是使得 j n j jyx n j jj T yx T yx T yE eyAxAyxyAx ∑ ∑ = = = == 1 1 minmax )(minmaxminmax 其中 je 为只有第 j 个分量为 1 而其余分量均为零的单位向量, j T j AexE = 。记 -160- jjk EEu min=≡ ,由于 ∑ = = n j jy 1 1 , ∑ = n j jjY yE 1 min 在 1=ky , )(0 kjy j ≠= 时达到最 小值u ,故 x 应为线性规划问题 umax s.t. ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ =≥ = ≥=≥ ∑ ∑ = = mix x EEnjuxa i m i i m i kjiij ,,2,1,0 1 )(,,2,1, 1 1 L L 即 (2) 的解。 同理, y 应为线性规划 vmin s.t. ⎪⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ =≥ = =≤ ∑ ∑ = = njy y mivya j n j j n j jij ,,2,1,0 1 ,,2,1, 1 1 L L (3) 的解。由线性规划知识,(2)与(3)互为对偶线性规划,它们具有相同的最优目标函 数值。 不妨设 0>u ,作变换 u xx i i =' , mi ,,2,1 L= 则线性规划问题(2)化为: ∑ = m i ix 1 'min s.t. ⎪⎩ ⎪⎨ ⎧ =≥ =≥∑ = mix njxa i m i iij ,,2,1,0' ,,2,1,1' 1 L L 同理,作变换 v yy j j =' , nj ,,2,1 L= 则线性规划问题(3)化为: -161- ∑ = m i iy 1 'max s.t. ⎪⎩ ⎪⎨ ⎧ =≥ =≤∑ = njy miya j n j jij ,,2,1,0' ,,2,1,1' 1 L L 例 4 在一场敌对的军事行动中,甲方拥有三种进攻性武器 321 ,, AAA ,可分别用 于摧毁乙方工事;而乙方有三种防御性武器 321 ,, BBB 来对付甲方。据平时演习得到的 数据,各种武器间对抗时,相互取胜的可能如下: 1A 对 1B 2:1; 1A 对 2B 3:1; 1A 对 3B 1:2; 2A 对 1B 3:7; 2A 对 2B 3:2; 2A 对 3B 1:3; 3A 对 1B 3:1; 3A 对 2B 1:4; 3A 对 3B 2:1 解 先分别列出甲、乙双方的赢得的可能性矩阵,将甲方矩阵减去乙方矩阵的对应 元素,得零和对策时甲方的赢得矩阵如下: ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − −− − = 3/15/32/1 2/15/15/2 3/12/13/1 A 编写程序如下: clear a=[1/3,1/2,-1/3;-2/5,1/5,-1/2;1/2,-3/5,1/3];b=10; a=a+b*ones(3); %把赢得矩阵的每个元素变成大于0的数 [x0,u]=linprog(ones(3,1),-a',-ones(3,1),[],[],zeros(3,1)); x=x0/u,u=1/u-b [y0,v]=linprog(-ones(3,1),a,ones(3,1),[],[],zeros(3,1)); y=y0/(-v),v=1/(-v)-b 解得 T0.4717) 5283,0,.0(=x , T0.6226) 0.3774, 0,(=y , 0189.0−=u ,故乙 方有利。 下面我们使用式(2)和(3),利用 LINGO 编程求例 4 的解。LINGO 程序如下: model: sets: player1/1..3/:x; player2/1..3/:y; game(player1,player2):c; endsets data: ctrl=?; !ctrl取1求局中人1的策略,ctrl取0求局中人2的策略; c=0.3333333 0.5 -0.3333333 -0.4 0.2 -0.5 0.5 -0.6 0.3333333; enddata max=u*ctrl-v*(1-ctrl); @free(u);@free(v); @for(player2(j):@sum(player1(i):c(i,j)*x(i))>u); -162- @for(player1(i):@sum(player2(j):c(i,j)*y(j))u); @sum(player1:x)=1; @sum(player2:y)=1; end §5 二人非常数和对策 所谓常数和对策是指局中人I和局中人II所赢得的值之和为一常数。显然,二人零 和对策是二人常数和对策的特例,即常数为零。 对于二人常数和对策,有纯策略对策和混合策略对策,其求解方法与二人零和对 策是相同的。 二人非常数和对策也称为双矩阵对策。也有纯策略对策和混合策略对策两种策略。 5.1 纯策略问题 例1给出了典型的二人非常数和对策,每人的赢得矩阵是不相同的,因此称为双矩 阵对策。 问题分析 这是一个二人非常数和对策问题。从表面上看,两犯罪嫌疑人拒不供认,只能被 判18个月徒刑,结果是最好的。但仔细分析,却无法做到这一点。因为犯罪嫌疑人 A 如 果采用不供认策略,他可能被判刑的刑期为18个月或7年,而犯罪嫌疑人 B 可能判的刑 期为0或18个月。而 A 选择供认,他被判的刑期为0或3年,此时,犯罪嫌疑人 B 可能判 的刑期为3年或7年。因此,犯罪嫌疑人 A 一定选择供认。基于同样的道理,犯罪嫌疑 人 B 也只能选择供认。 选择供认是他们最好的选择,各自被判3年。 按照上面的论述,对于一般纯策略问题,局中人 I、II 的赢得矩阵如表 2 所示。其 中局中人 I 有 m 个策略 mαα ,,1 L ,局中人 II 有 n 个策略 nββ ,,1 L ,分别记为 },,{ 11 mS αα L= , },,{ 12 nS ββ L= -163- nmijcC ×= )( 11 为局中人 I 的赢得矩阵, nmijcC ×= )( 22 为局中人 II 的赢得矩阵。因此, 双矩阵对策记为 },,,{ 21 21 CCSSG = 表 2 1β 2β … nβ 1α ),( 2 11 1 11 cc ),( 2 12 1 12 cc … ),( 2 1 1 1 nn cc 2α ),( 2 21 1 21 cc ),( 2 22 1 22 cc … ),( 2 2 1 2 nn cc M M M M mα ),( 2 1 1 1 mm cc ),( 2 2 1 2 mm cc … ),( 21 mnmn cc 定义5 设 },,,{ 21 21 CCSSG = 是一双矩阵对策,若等式 11 maxmin** ijijji cc = , 22 maxmin** ijjiji cc = (4) 成立,则记 1 1 ** jicv = ,并称 1v 为局中人I的赢得值,记 2 2 ** jicv = ,并称 2v 为局中人II的 赢得值,称 ),( ** ji βα 为G 在纯策略下的解(或Nash平衡点),称 *iα 和 *jβ 分别为局中 人I,II的最优纯策略。 实际上,定义5也同时给出了纯策略问题的求解方法。因此,对于例1, ))0,1(),0,1(( 是Nash平衡点,这里 )0,1( 表示以概率1取第一个策略,也就是说,坦白是他们的最佳策 略。 5.2 混合对策问题 如果不存在使式(4)成立的对策,则需要求混合对策。类似于二人零和对策情况, 需要给出混合对策的最优解。 (1)混合对策问题的基本概念 定义6 在对策 },,,{ 21 21 CCSSG = 中,若存在策略对 * 2 * 1 , SySx ∈∈ ,使得 ⎪⎩ ⎪⎨ ⎧ ∈∀≤ ∈∀≤ * 2 22 * 1 11 , , SyyCxyCx SxyCxyCx TT TT 则称 ),( yx 为G 的一个非合作平衡点。记 yCxv T 1 1 = , yCxv T 2 2 = ,则称 21,vv 分别 为局中人I,II的赢得值。 对于混合对策问题有如下定理。 定理8 每个双矩阵对策至少存在一个非合作平衡点。 定理9 混合策略 ),( yx 为对策 },,,{ 21 21 CCSSG = 的平衡点的充分必要条件是 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =≤ =≤ ∑ ∑ = = njyCxxc miyCxyc T i m i ij T n j jij ,,2,1, ,,2,1, 2 1 2 1 1 1 L L (5) (2)混合对策问题的求解方法 由定义6可知,求解混合对策就是求非合作对策的平衡点,进一步由定理8得到, 求解非合作对策的平衡点,就是求解满足不等式约束(5)的可行点。因此,混合对策 -164- 问题的求解问题就转化为求不等式约束(5)的可行点,而LINGO软件可以很容易做到 这一点。 例 5 有甲、乙两支游泳队举行包括三个项目的对抗赛。这两支游泳队各有一名健 将级运动员(甲队为李,乙队为王),在三个项目中成绩都很突出,但规则准许他们每 人只能参加两项比赛,每队的其他两名运动员可参加全部三项比赛。已知各运动员平时 成绩(秒)见表 3。 表 3 甲 队 乙 队 赵 钱 李 王 张 孙 100 米蝶泳 59.7 63.2 57.1 58.6 61.4 64.8 100 米仰泳 67.2 68.4 63.2 61.5 64.7 66.5 100 米蛙泳 74.1 75.5 70.3 72.6 73.4 76.9 假定各运动员在比赛中都发挥正常水平,又比赛第一名得5分,第二名得3分,第 三名得1分,问教练员应决定让自己队健将参加哪两项比赛,使本队得分最多?(各队 参加比赛名单互相保密,定下来后不准变动) 解 分别用 1α 、 2α 和 3α 表示甲队中李姓健将不参加蝶泳、仰泳、蛙泳比赛的策 略,分别用 1β 、 2β 和 3β 表示乙队中王姓健将不参加蝶泳、仰泳、蛙泳比赛的策略。 当甲队采用策略 1α ,乙队采用策略 1β 时,在100米蝶泳中,甲队中赵获第一、钱获第 三得6分,乙队中张获第二,得3分;在100米仰泳中,甲队中李获第二,得3分,乙队中 王获第一、张获第三,得6分;在100米蛙泳中,甲队中李获第一,得5分,乙队中王获 第二、张获第三,得4分。也就是说,对应于策略 ),( 11 βα ,甲、乙两队各自的得分为 )13,14( 。表4给出了在全部策略下各队的得分,计算的Matlab程序如下: clc,clear a=[59.7 63.2 57.1 58.6 61.4 64.8 67.2 68.4 63.2 61.5 64.7 66.5 74.1 75.5 70.3 72.6 73.4 76.9]; m=3;n=3;kk=3;T=1000; sc1=[5:-2:1,zeros(1,3)]; %1-6 名的得分 sc2=repmat(sc1,kk,1); for i=1:m for j=1:n b=a; b(i,3)=T;b(j,4)=T; %不参加比赛,时间成绩取为充分大 [b,ind]=sort(b,2); %对 b 的每一行进行排序 for k=1:m sc2(k,ind(k,:))=sc1; %计算得分 end A_sc(i,j)=sum(sum(sc2(:,1:m))); %统计得分 B_sc(i,j)=sum(sum(sc2(:,m+1:end))); end end A_sc,B_sc -165- fid=fopen('txt2.txt','w'); fprintf(fid,'%f\n',A_sc'); fwrite(fid,'~','char'); %往纯文本文件中写 LINGO 数据的分割符 fprintf(fid,'%f\n',B_sc'); fclose(fid); 表4 1β 2β 3β 1α 2α 3α )13,14( )14,13( )15,12( )14,13( )15,12( )15,12( )15,12( )15,12( )14,13( 按照定理8,求最优混合策略,就是求不等式约束(5)的可行解,写出相应的LINGO 程序如下: model: sets: pa/1..3/:x; pb/1..3/:y; link(pa,pb):c1,c2; endsets data: c1=@file(txt2.txt); c2=@file(txt2.txt); enddata v1=@sum(link(i,j):c1(i,j)*x(i)*y(j)); v2=@sum(link(i,j):c2(i,j)*x(i)*y(j)); @for(pa(i):@sum(pb(j):c1(i,j)*y(j))> 。先由 A 任抽 一张,看过后反放在桌上,并任喊大( H )或小( L )。然后由 B 从剩下纸牌中任抽一 张,看过后, B 有两种选择:第一,弃权,付给 A 1 元;第二,翻 A 的牌,当 A 喊 H 时,得点数小的牌者付给对方 3 元,当 A 喊 L 时,得点数大的牌者付给对方 2 元。要 -166- 求:(i)说明 BA, 各有多少个纯策略;(ii)根据优超原则淘汰具有劣势的策略,并列 出 A 的赢得矩阵;(iii)求解双方各自的最优策略和对策值。 3. “二指莫拉问题”。甲、乙二人游戏,每人出一个或两个手指,同时又把猜测对 方所出的指数叫出来。如果只有一个人猜测正确,则他所赢得的数目为二人所出指数之 和,否则重新开始。写出该对策中各局中人的策略集合及甲的赢得矩阵,并回答局中人 是否存在某种出法比其他出法更为有利。 4. 甲、乙两队进行乒乓球团体赛,每队由3名球员组成。双方可排出3种不同的阵 容。甲队的3种阵容记为 CBA ,, ;乙队的3种阵容为Ⅰ,Ⅱ,Ⅲ。根据以往的记录。两 队以不同的阵容交手的结果如表6所示。 表6 甲队得分数 乙队 甲队 Ⅰ Ⅱ Ⅲ A -3 -1 -2 B -6 0 3 C 5 1 -4 表6中的数字为双方各种阵容下甲队的得分数。这次团体赛双方各采取什么阵容比较稳 妥? -167- 第八章 层次分析法 层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模 糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美 国运筹学家 T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活而又实用的 多准则决策方法。 §1 层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是 一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次 分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 运用层次分析法建模,大体上可按下面四个步骤进行: (i)建立递阶层次结构模型; (ii)构造出各层次中的所有判断矩阵; (iii)层次单排序及一致性检验; (iv)层次总排序及一致性检验。 下面分别说明这四个步骤的实现过程。 1.1 递阶层次结构的建立与特点 应用 AHP 分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次 的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属 性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。 这些层次可以分为三类: (i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结 果,因此也称为目标层。 (ii)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干 个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。 (iii)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等, 因此也称为措施层或方案层。 递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地 层次数不受限制。每一层次中各元素所支配的元素一般不要超过 9 个。这是因为支配 的元素过多会给两两比较判断带来困难。 下面结合一个实例来说明递阶层次结构的建立。 例 1 假期旅游有 1P 、 2P 、 3P 3个旅游胜地供你选择,试确定一个最佳地点。 在此问题中,你会根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反 复比较 3 个侯选地点。可以建立如图 1 的层次结构模型。 图 1 层次结构模型 -168- 1.2 构造判断矩阵 层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重 并不一定相同,在决策者的心目中,它们各占有一定的比例。 在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比 重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有 多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的 重要性程度不相一致的数据,甚至有可能提出一组隐含矛盾的数据。为看清这一点, 可作如下假设:将一块重为 1 千克的石块砸成 n 小块,你可以精确称出它们的重量, 设为 nww ,,1 L ,现在,请人估计这 n 小块的重量占总重量的比例(不能让他知道各 小石块的重量),此人不仅很难给出精确的比值,而且完全可能因顾此失彼而提供彼 此矛盾的数据。 设现在要比较 n 个因子 },,{ 1 nxxX L= 对某因素 Z 的影响大小,怎样比较才能提 供可信的数据呢?Saaty 等人建议可以采取对因子进行两两比较建立成对比较矩阵的 办法。即每次取两个因子 ix 和 jx ,以 ija 表示 ix 和 jx 对 Z 的影响大小之比,全部比较 结果用矩阵 nnijaA ×= )( 表示,称 A 为 XZ − 之间的成对比较判断矩阵(简称判断矩 阵)。容易看出,若 ix 与 jx 对 Z 的影响之比为 ija ,则 jx 与 ix 对 Z 的影响之比应为 ij ji aa 1= 。 定义 1 若矩阵 nnijaA ×= )( 满足 (i) 0>ija ,(ii) ij ji aa 1= ( nji ,,2,1, L= ) 则称之为正互反矩阵(易见 1=iia , ni ,,1 L= )。 关于如何确定 ija 的值,Saaty 等建议引用数字 1~9 及其倒数作为标度。表 1 列出 了 1~9 标度的含义: 表 1 标度的含义 标度 含 义 1 3 5 7 9 2,4,6,8 倒数 表示两个因素相比,具有相同重要性 表示两个因素相比,前者比后者稍重要 表示两个因素相比,前者比后者明显重要 表示两个因素相比,前者比后者强烈重要 表示两个因素相比,前者比后者极端重要 表示上述相邻判断的中间值 若因素i 与因素 j 的重要性之比为 ija ,那么因素 j 与因素i 重要性 之比为 ijji aa /1= 。 从心理学观点来看,分级太多会超越人们的判断能力,既增加了作判断的难度, 又容易因此而提供虚假数据。Saaty 等人还用实验方法比较了在各种不同标度下人们判 断结果的正确性,实验结果也表明,采用 1~9 标度最为合适。 -169- 最后,应该指出,一般地作 2 )1( −nn 次两两判断是必要的。有人认为把所有元素 都和某个元素比较,即只作 1−n 次比较就可以了。这种作法的弊病在于,任何一个判 断的失误均可导致不合理的排序,而个别判断的失误对于难以定量的系统往往是难以 避免的。进行 2 )1( −nn 次比较可以提供更多的信息,通过各种不同角度的反复比较, 从而导出一个合理的排序。 1.3 层次单排序及一致性检验 判断矩阵 A 对应于最大特征值 maxλ 的特征向量W ,经归一化后即为同一层次相 应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。 上述构造成对比较判断矩阵的办法虽能减少其它因素的干扰,较客观地反映出一 对因子影响力的差别。但综合全部比较结果时,其中难免包含一定程度的非一致性。 如果比较结果是前后完全一致的,则矩阵 A 的元素还应当满足: nkjiaaa ikjkij L,2,1,,, =∀= (1) 定义 2 满足关系式(1)的正互反矩阵称为一致矩阵。 需要检验构造出来的(正互反)判断矩阵 A 是否严重地非一致,以便确定是否接 受 A 。 定理 1 正互反矩阵 A 的最大特征根 maxλ 必为正实数,其对应特征向量的所有分 量均为正实数。 A 的其余特征值的模均严格小于 maxλ 。 定理 2 若 A 为一致矩阵,则 (i) A 必为正互反矩阵。 (ii) A 的转置矩阵 TA 也是一致矩阵。 (iii) A 的任意两行成比例,比例因子大于零,从而 1)(rank =A (同样, A 的 任意两列也成比例)。 (iv)A 的最大特征值 n=maxλ ,其中 n 为矩阵 A 的阶。A 的其余特征根均为零。 (v)若 A 的最大特征值 maxλ 对应的特征向量为 T nwwW ),,( 1 L= ,则 j i ij w wa = , nji ,,2,1, L=∀ ,即 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = n nnn n n w w w w w w w w w w w w w w w w w w A L LLLL L L 21 2 2 2 1 2 1 2 1 1 1 定理 3 n 阶正互反矩阵 A 为一致矩阵当且仅当其最大特征根 n=maxλ ,且当正 互反矩阵 A 非一致时,必有 n>maxλ 。 根据定理 3,我们可以由 maxλ 是否等于 n 来检验判断矩阵 A 是否为一致矩阵。由 -170- 于特征根连续地依赖于 ija ,故 maxλ 比 n 大得越多, A 的非一致性程度也就越严重, maxλ 对应的标准化特征向量也就越不能真实地反映出 },,{ 1 nxxX L= 在对因素 Z 的影响中所占的比重。因此,对决策者提供的判断矩阵有必要作一次一致性检验,以 决定是否能接受它。 对判断矩阵的一致性检验的步骤如下: (i)计算一致性指标CI 1 max − −= n nCI λ (ii)查找相应的平均随机一致性指标 RI 。对 9,,1 L=n ,Saaty 给出了 RI 的值, 如表 2 所示。 表 2 RI的值 n 1 2 3 4 5 6 7 8 9 RI 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 RI 的值是这样得到的,用随机方法构造 500 个样本矩阵:随机地从 1~9 及其倒 数中抽取数字构造正互反矩阵,求得最大特征根的平均值 max'λ ,并定义 1 'max − −= n nRI λ 。 (ⅲ)计算一致性比例CR RI CICR = 当 10.0h ,则称积分 ∫ + − = 2 2 ,1 )(1)( hx hxh dttfhxf 为 )(xf 的一次磨光函数, h 称为磨光宽度。 同样的,可以定义 )(xf 的 k 次磨光函数为 ∫ + − −= 2 2 ,1, )(1)( hx hx hkhk dttfhxf ( 1>k ) 事实上,磨光函数 )(, xf hk 比 )(xf 的光滑程度要高,且当磨光宽度 h 很少时 )(, xf hk 很接近于 )(xf 。 1.6.2 等距 B 样条函数 对于任意的函数 )(xf ,定义其步长为 1 的中心差分算子δ 如下: -186- )2 1()2 1()( −−+= xfxfxfδ 在此取 0)( += xxf ,则 00 0 2 1 2 1 ++ + ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−⎟ ⎠ ⎞⎜ ⎝ ⎛ += xxxδ 是一个单位方波函数(如图 1),记 0 0 )( +=Ω xx δ 。并取 1=h ,对 )(0 xΩ 进行一次磨光 得 ∫∫ + − ++ + − ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−⎟ ⎠ ⎞⎜ ⎝ ⎛ +=Ω=Ω 2 1 2 1 00 2 1 2 1 01 2 1 2 1)()( x x x x dtttdttx +++− + + + −+−+=−= ∫∫ )1(2)1(1 01 0 xxxdttdtt x x x x 显然 )(1 xΩ 是连续的(如图 1)。 图 1 )(0 xΩ 和 )(1 xΩ 的图形 类似地可得到 k 次磨光函数为 ∑ + = + + ⎟ ⎠ ⎞⎜ ⎝ ⎛ −++−=Ω 1 0 1 2 1 !)1()( k j kj kj k jkxk Cx 实际上,可以证明: )(xkΩ 是分段 k 次多项式,且具有 1−k 阶连续导数,其 k 阶 导数有 2+k 个间断点,记为 2 1+−= kjx j ( 1,,2,1,0 += kj L )。从而可知 )(xkΩ 是 对应于分划 +∞<<<<<−∞Δ +110: kxxx L 的 k 次多项式样条函数,称之为基本样 条函数,简称为 k 次 B 样条。由于样条节点为 2 1+−= kjx j ( 1,,2,1,0 += kj L )是 等距的,故 )(xkΩ 又称为 k 次等距 B 样条函数。 对于任意函数 )(xf 的 k 次磨光函数,由归纳法可以得到: dttfh tx hxf khk ∫ ∞+ ∞− − ⎟ ⎠ ⎞⎜ ⎝ ⎛ −Ω= )(1)( 1, ( 22 hxthx +≤≤− ) 特别地,当 1)( =xf 时,有 11 1 =⎟⎠ ⎞⎜⎝ ⎛ −Ω∫ ∞+ ∞− − dth tx h k ,从而 1)( =Ω∫+∞ ∞− dxxk ,且当 1≥k 时有递推关系 -187- ⎥⎦ ⎤ ⎢⎣ ⎡ ⎟ ⎠ ⎞⎜ ⎝ ⎛ −Ω⎟ ⎠ ⎞⎜ ⎝ ⎛ −−−⎟ ⎠ ⎞⎜ ⎝ ⎛ +Ω⎟ ⎠ ⎞⎜ ⎝ ⎛ ++=Ω −− 2 1 2 1 2 1 2 11)( 11 xxkxkxkx kkk 1.6.3 一维等距 B 样条函数插值 等距 B 样条函数与通常的样条有如下的关系: 定理 设有区间 ],[ ba 的均匀分划 jhxx j +=Δ 0: ( nj ,,2,1,0 L= ), n abh −= , 则对任意 k 次样条函数 ),()( kSxs Pk Δ∈ 都可以表示为 B 样条函数族 1 0 2 1 −= −=⎭ ⎬ ⎫ ⎩ ⎨ ⎧ ⎟ ⎠ ⎞⎜ ⎝ ⎛ +−−−Ω nj kj k kjh xx 的线性组合。 根据定理,如果已知曲线上一组点 ),( jj yx ,其中 jhxx j += 0 ( njh ,,2,1,0,0 L=> ),则可以构造出一条样条磨光曲线(即为 B 样条函数族的线 性组合) ∑ − −= ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−Ω= 1 0)( n kj kjk jh xxcxs 其中 jc ( 1,,1, −+−−= nkkj L )为待定常数。用它来逼近曲线,既有较好的精度, 又有良好的保凸性。 实际中,最常用的是 3=k 的情况,即一般形式为 ∑ + −= ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−Ω= 1 1 0 33 )( n j j jh xxcxs 其中 3+n 个待定系数 jc ( 1,,0,1 +−= nj L )可以由插值条件确定。 对于插值条件 ⎪⎩ ⎪⎨ ⎧ == == ),0(')(' ),2,1,0()( 3 3 njyxs njyxs jj jj L 有 ⎪⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ =−Ω= ==−Ω= =−Ω= ∑ ∑ ∑ + −= + −= + −= n n j jn i n j ji n j j yjnchxs niyjicxs yjchxs ')('1)(' ,,2,1,0,)()( ')('1)(' 3 1 1 3 1 1 33 0 1 1 303 L (9) 注意到 )(3 xΩ 的局部非零性及其函数值: 3 2)0(3 =Ω , 6 1)1(3 =±Ω ,当 2≥x 时 0)(3 =Ω x ;且 由 )2 1()2 1()(' 223 −Ω−+Ω=Ω xxx 知, 0)0('3 =Ω , 2 1)1('3 m=±Ω , 当 2≥x 时 0)('3 =Ω x 。则(9)式的每一个方程只有三个非零系数,具体为 -188- ⎪⎩ ⎪⎨ ⎧ =+− ==++ =+− +− +− − nnn iiii hycc niyccc hycc '2 ,,2,1,0,64 '2 11 11 011 L (10) 由方程组(10)容易求解出 jc ( 1,,0,1 +−= nj L ),即可得到三次样条函数 )(3 xs 表达式。 1.6.4 二维等距 B 样条函数插值 设有空间曲面 ),( yxfz = (未知),如果已知二维等距节点 =),( ji yx ),( 00 τjyihx ++ ( 0, >τh )上的值为 ijz ( mjni ,,1,0;,,1,0 LL == ),则相应的 B 样条磨光曲面的一般形式为 ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−Ω⎟ ⎠ ⎞⎜ ⎝ ⎛ −−Ω= ∑∑ − −= − −= jyyih xxcyxs l n ki k m lj ij τ 0 1 0 1 ),( 其中 ijc ( mjni ,,1,0;,,1,0 LL == )为待定常数, lk, 可以取不同值,常用的也是 2, =lk 和3的情形。这是一种具有良好保凸性的光滑曲面(函数),在工程设计中是常 用的,但只能使用于均匀划分或近似均匀划分的情况。 1.7 二维插值 前面讲述的都是一维插值,即节点为一维变量,插值函数是一元函数(曲线)。若 节点是二维的,插值函数就是二元函数,即曲面。如在某区域测量了若干点(节点)的 高程(节点值),为了画出较精确的等高线图,就要先插入更多的点(插值点),计算这 些点的高程(插值)。 1.7.1 插值节点为网格节点 已知 nm× 个节点: ),,( ijji zyx ( njmi ,,2,1;,,2,1 LL == ),且 mxx << L1 ; nyy << L1 。求点 ),( yx 处的插值 z 。 Matlab 中有一些计算二维插值的程序。如 z=interp2(x0,y0,z0,x,y,'method') 其中 x0,y0 分别为 m 维和 n 维向量,表示节点,z0 为 mn × 维矩阵,表示节点值,x,y 为一维数组,表示插值点,x 与 y 应是方向不同的向量,即一个是行向量,另一个是列 向量,z 为矩阵,它的行数为 y 的维数,列数为 x 的维数,表示得到的插值,'method' 的用法同上面的一维插值。 如果是三次样条插值,可以使用命令 pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y}) 其中 x0,y0 分别为 m 维和 n 维向量,z0 为 nm × 维矩阵,z 为矩阵,它的行数为 x 的维 数,列数为 y 的维数,表示得到的插值,具体使用方法同一维插值。 例2 在一丘陵地带测量高程,x 和 y 方向每隔100米测一个点,得高程如2表,试插 值一曲面,确定合适的模型,并由此找出最高点和该点的高程。 解 编写程序如下: clear,clc x=100:100:500; y=100:100:400; z=[636 697 624 478 450 698 712 630 478 420 -189- 680 674 598 412 400 662 626 552 334 310]; pp=csape({x,y},z') xi=100:10:500;yi=100:10:400 cz1=fnval(pp,{xi,yi}) cz2=interp2(x,y,z,xi,yi','spline') [i,j]=find(cz1==max(max(cz1))) x=xi(i),y=yi(j),zmax=cz1(i,j) 表2 x y 100 200 300 400 500 100 636 697 624 478 450 200 698 712 630 478 420 300 680 674 598 412 400 400 662 626 552 334 310 1.7.2 插值节点为散乱节点 已知 n 个节点: ),,2,1)(,,( nizyx iii L= ,求点 ),( yx 处的插值 z 。 对上述问题,Matlab 中提供了插值函数 griddata,其格式为: ZI = GRIDDATA(X,Y,Z,XI,YI) 其中 X、Y、Z 均为 n 维向量,指明所给数据点的横坐标、纵坐标和竖坐标。向量 XI、 YI 是给定的网格点的横坐标和纵坐标,返回值 ZI 为网格(XI,YI)处的函数值。XI 与 YI 应是方向不同的向量,即一个是行向量,另一个是列向量。 例 3 在某海域测得一些点(x,y)处的水深 z 由下表给出,在矩形区域(75,200) ×(-50,150) 内画出海底曲面的图形。 表 3 x 129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5 y 7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5 z 4 8 6 8 6 8 8 9 9 8 8 9 4 9 解 编写程序如下: x=[129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5]; y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5]; z=-[4 8 6 8 6 8 8 9 9 8 8 9 4 9]; xi=75:1:200; yi=-50:1:150; zi=griddata(x,y,z,xi,yi','cubic') subplot(1,2,1), plot(x,y,'*') subplot(1,2,2), mesh(xi,yi,zi) §2 曲线拟合的线性最小二乘法 2.1 线性最小二乘法 曲线拟合问题的提法是,已知一组(二维)数据,即平面上的 n 个点 ),( ii yx , ni ,,2,1 L= , ix 互不相同,寻求一个函数(曲线) )(xfy = ,使 )(xf 在某种准则下 与所有数据点最为接近,即曲线拟合得最好。 -190- 线性最小二乘法是解决曲线拟合最常用的方法,基本思路是,令 )()()()( 2211 xraxraxraxf mm+++= L (11) 其中 )(xrk 是事先选定的一组线性无关的函数, ka 是待定系数 ),,,2,1( nmmk <= L 。 拟合准则是使 iy , ni ,,2,1 L= ,与 )( ixf 的距离 iδ 的平方和最小,称为最小二乘准则。 2.1.1 系数 ka 的确定 记 2 11 2 1 ])([),,( ii n i n i im yxfaaJ −== ∑∑ == δL (12) 为求 maa ,,1 L 使 J 达到最小,只需利用极值的必要条件 0=∂ ∂ ka J ),,1( mk L= ,得到 关于 maa ,,1 L 的线性方程组 ),,1(,0])()[( 11 mjyxraxr n i m k iikkij L==−∑∑ == 即 ),,1(,)()]()([ 11 1 mjyxrxrxra m k n i i n i ijikijk L==∑∑ ∑ == = (13) 记 mnnmn m xrxr xrxr R ×⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = )()( )()( 1 111 L MMM L , T maaA ],,[ 1 L= , T nyyY ),,( 1 L= 方程组(13)可表为 YRRAR TT = (14) 当 )}(,),({ 1 xrxr mL 线性无关时, R 列满秩, RRT 可逆,于是方程组(14)有唯 一解 YRRRA TT 1)( −= 2.1.2 函数 )(xrk 的选取 面对一组数据 niyx ii ,,2,1),,( L= ,用线性最小二乘法作曲线拟合时,首要的、 也是关键的一步是恰当地选取 )(,),(1 xrxr mL 。如果通过机理分析,能够知道 y 与 x 之 间应该有什么样的函数关系,则 )(,),(1 xrxr mL 容易确定。若无法知道 y 与 x 之间的关 系,通常可以将数据 niyx ii ,,2,1),,( L= 作图,直观地判断应该用什么样的曲线去作 拟合。人们常用的曲线有 (i)直线 21 axay += (ii)多项式 11 ++++= mm m axaxay L (一般 3,2=m ,不宜太高) (iii)双曲线(一支) 2 1 ax ay += -191- (iv)指数曲线 xaeay 2 1= 对于指数曲线,拟合前需作变量代换,化为对 21,aa 的线性函数。 已知一组数据,用什么样的曲线拟合最好,可以在直观判断的基础上,选几种曲线 分别拟合,然后比较,看哪条曲线的最小二乘指标 J 最小。 2.2 最小二乘法的 Matlab 实现 2.2.1 解方程组方法 在上面的记号下, 2 1 ||||),,( YRAaaJ m −=L Matlab 中的线性最小二乘的标准型为 ,min 2 2YRA A − 命令为 YRA \= 。 例 4 用最小二乘法求一个形如 2bxay += 的经验公式,使它与表 4 所示的数据 拟合。 表 4 x 19 25 31 38 44 y 19.0 32.3 49.0 73.3 97.8 解 编写程序如下 x=[19 25 31 38 44]'; y=[19.0 32.3 49.0 73.3 97.8]'; r=[ones(5,1),x.^2]; ab=r\y x0=19:0.1:44; y0=ab(1)+ab(2)*x0.^2; plot(x,y,'o',x0,y0,'r') 2.2.2 多项式拟合方法 如果取 },,,1{)}(,),({ 11 m m xxxrxr LL =+ ,即用 m 次多项式拟合给定数据,Matlab 中有现成的函数 a=polyfit(x0,y0,m) 其中输入参数 x0,y0 为要拟合的数据,m 为拟合多项式的次数,输出参数 a 为拟合多项 式 y=amxm+…+a1x+a0 系数 a=[ am, …, a1, a0]。 多项式在 x 处的值 y 可用下面的函数计算 y=polyval(a,x)。 例 5 某乡镇企业 1990-1996 年的生产利润如表 5。 表5 年份 1990 1991 1992 1993 1994 1995 1996 利润(万元) 70 122 144 152 174 196 202 试预测 1997 年和 1998 年的利润。 解 作已知数据的的散点图, x0=[1990 1991 1992 1993 1994 1995 1996]; y0=[70 122 144 152 174 196 202]; plot(x0,y0,'*') -192- 发现该乡镇企业的年生产利润几乎直线上升。因此,我们可以用 01 axay += 作为 拟合函数来预测该乡镇企业未来的年利润。编写程序如下: x0=[1990 1991 1992 1993 1994 1995 1996]; y0=[70 122 144 152 174 196 202]; a=polyfit(x0,y0,1) y97=polyval(a,1997) y98=polyval(a,1998) 求得 201 =a , 4 0 1007054 ×−= .a ,1997 年的生产利润 y97=233.4286,1998 年的 生产利润 y98=253.9286。 §3 最小二乘优化 在无约束最优化问题中,有些重要的特殊情形,比如目标函数由若干个函数的平 方和构成。这类函数一般可以写成: ∑ = = m i i xfxF 1 2 )()( , nRx ∈ 其中 T nxxx ),,( 1 L= ,一般假设 nm ≥ 。我们把极小化这类函数的问题: ∑ = = m i i xfxF 1 2 )()(min 称为最小二乘优化问题。 最小二乘优化是一类比较特殊的优化问题,在处理这类问题时,Matlab 也提供了 一些强大的函数。在 Matlab 优化工具箱中,用于求解最小二乘优化问题的函数有:lsqlin、 lsqcurvefit、lsqnonlin、lsqnonneg,用法介绍如下。 3.1 lsqlin 函数 求解 2 22 1min dCx x − s.t. ⎪⎩ ⎪⎨ ⎧ ≤≤ = ≤ ubxlb beqxAeq bxA * * 其中 AeqAC ,, 为矩阵, xublbbeqbd ,,,,, 为向量。 Matlab 中的函数为: x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) 例 6 用 lsqlin 命令求解例 4。 解 编写程序如下: x=[19 25 31 38 44]'; y=[19.0 32.3 49.0 73.3 97.8]'; r=[ones(5,1),x.^2]; ab=lsqlin(r,y) x0=19:0.1:44; y0=ab(1)+ab(2)*x0.^2; plot(x,y,'o',x0,y0,'r') -193- 3.2 lsqcurvefit 函数 给定输入输出数列 ydataxdata, ,求参量 x ,使得 ()22 2 ),(2 1),(2 1min ∑ −=− i iix ydataxdataxFydataxdataxF Matlab 中的函数为 X=LSQCURVEFIT(FUN,X0,XDATA,YDATA,LB,UB,OPTIONS) 其中 FUN 是定义函数 ),( xdataxF 的 M 文件。 例 7 用下面表 6 中的数据拟合函数 ktbeatc 02.0)( −+= 中的参数 kba ,, 。 表6 jt 100 200 300 400 500 600 700 800 900 1000 jc 4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59 解 该问题即解最优化问题: ∑ = − −+= 10 1 202.0 )(),,(min i j kt cbeakbaF j (1)编写 M 文件 fun1.m 定义函数 ),( tdataxF : function f=fun1(x,tdata); f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中 x(1)=a,x(2)=b,x(3)=k (2)调用函数 lsqcurvefit,编写程序如下: td=100:100:1000; cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59]; x0=[0.2 0.05 0.05]; x=lsqcurvefit(@fun1,x0,td,cd) 3.3 lsqnonlin 函数 已知函数向量 []T k xfxfxF )(,),()( 1 L= ,求 x 使得 2 2)(2 1min xF x Matlab 中的函数为 X=LSQNONLIN(FUN,X0,LB,UB,OPTIONS) 其中 FUN 是定义向量函数 )(xF 的 M 文件。 例 8 用 lsqnonlin 函数求解例 7。 解 这里 []Tktkt cbeacbeatxFxF 10 02.0 1 02.0 101 ,,),()( −+−+== −− L []kbax ,,= (1)编写 M 文件 fun2.m 如下: function f=fun2(x); td=100:100:1000; cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59]; f=x(1)+x(2)*exp(-0.02*x(3)*td)-cd; -194- (2)调用函数 lsqnonlin,编写程序如下: x0=[0.2 0.05 0.05]; %初始值是任意取的 x=lsqnonlin(@fun2,x0) 3.4 lsqnonneg 函数 求解非负的 x ,使得满足 2 22 1min dCx x − , Matlab 中的函数为 X = LSQNONNEG(C,d,X0,OPTIONS) 例9 已知 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 6170.06344.0 6245.06233.0 7071.06861.0 2869.00372.0 C , ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 8405.0 0747.0 1781.0 8587.0 d ,求 )0( ≥xx 满足 2 22 1min dCx x − 最小。 解 编写程序如下: c=[0.0372 0.2869;0.6861 0.7071;0.6233 0.6245;0.6344 0.6170]; d=[0.8587;0.1781;0.0747;0.8405]; x=lsqnonneg(c,d) 3.5 曲线拟合的用户图形界面求法 Matlab 工具箱提供了命令 cftool,该命令给出了一维数据拟合的交互式环境。具体 执行步骤如下: (1)把数据导入到工作空间; (2)运行 cftool,打开用户图形界面窗口; (3)对数据进行预处理; (4)选择适当的模型进行拟合; (5)生成一些相关的统计量,并进行预测。 可以通过帮助(运行 doc cftool)熟悉该命令的使用细节。 §4 曲线拟合与函数逼近 前面讲的曲线拟合是已知一组离散数据 },,1),,{( niyx ii L= ,选择一个较简单的 函数 )(xf ,如多项式,在一定准则如最小二乘准则下,最接近这些数据。 如果已知一个较为复杂的连续函数 ],[),( baxxy ∈ ,要求选择一个较简单的函数 )(xf ,在一定准则下最接近 )(xf ,就是所谓函数逼近。 与曲线拟合的最小二乘准则相对应,函数逼近常用的一种准则是最小平方逼近,即 ∫ −= b a dxxyxfJ 2)]()([ (15) 达到最小。与曲线拟合一样,选一组函数 },,1),({ mkxrk L= 构造 )(xf ,即令 )()()( 11 xraxraxf mm++= L -195- 代入(15)式,求 maa ,,1 L 使 J 达到极小。利用极值必要条件可得 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ),( ),( ),(),( ),(),( 11 1 111 mmmmm m ry ry a a rrrr rrrr MM L MMM L (16) 这里 dxxhxghg b a )()(),( ∫= 。当方程组(16)的系数矩阵非奇异时,有唯一解。 最简单的当然是用多项式逼近函数,即选 1)(1 =xr , xxr =)(2 , 2 3 )( xxr = ,…。 并且如果能使 ∫ =b a ji dxxrxr 0)()( , )( ji ≠ ,方程组(16)的系数矩阵将是对角阵,计 算大大简化。满足这种性质的多项式称正交多项式。 勒让得(Legendre)多项式是在 ]1,1[− 区间上的正交多项式,它的表达式为 L,2,1,)1(!2 1)(,1)( 2 0 =−== kxdx d kxPxP k k k kk 可以证明 ∫− ⎪⎩ ⎪⎨ ⎧ =+ ≠ =1 1 ,12 2 ,0 )()( jii ji dxxPxP ji L,2,1),(1)(1 12)( 11 =+−+ += −+ kxPk kxxPk kxP kkk 常用的正交多项式还有第一类切比雪夫(Chebyshev)多项式 ),2,1,0],1,1[(),arccoscos()( L=−∈= nxxnxTn 和拉盖尔(Laguerre)多项式 ),2,1,0),,0[(),()( L=+∞∈= − nxexdx dexL xn n n x n 。 例 10 求 ⎥⎦ ⎤ ⎢⎣ ⎡−∈= 2,2,cos)( ππxxxf 在 },,1{Span 42 xxH = 中的最佳平方逼近多 项式。 解 编写程序如下: syms x base=[1,x^2,x^4]; y1=base.'*base y2=cos(x)*base.' r1=int(y1,-pi/2,pi/2) r2=int(y2,-pi/2,pi/2) a=r1\r2 xishu1=double(a) digits(8),xishu2=vpa(a) 求得 xishu1=0.9996 -0.4964 0.0372,即所求的最佳平方逼近多项式为 42 0372.04964.09996.0 xxy +−= -196- §5 黄河小浪底调水调沙问题 5.1 问题的提出 2004 年 6 月至 7 月黄河进行了第三次调水调沙试验,特别是首次由小浪底、三门 峡和万家寨三大水库联合调度,采用接力式防洪预泄放水,形成人造洪峰进行调沙试验 获得成功。整个试验期为 20 多天,小浪底从 6 月 19 日开始预泄放水,直到 7 月 13 日 恢复正常供水结束。小浪底水利工程按设计拦沙量为 75.5 亿 m3,在这之前,小浪底共 积泥沙达 14.15 亿 t。这次调水调沙试验一个重要目的就是由小浪底上游的三门峡和万 家寨水库泄洪,在小浪底形成人造洪峰,冲刷小浪底库区沉积的泥沙,在小浪底水库开 闸泄洪以后,从 6 月 27 日开始三门峡水库和万家寨水库陆续开闸放水,人造洪峰于 29 日先后到达小浪底,7 月 3 日达到最大流量 2700m3/s,使小浪底水库的排沙量也不断地 增加。表 7 是由小浪底观测站从 6 月 29 日到 7 月 10 检测到的试验数据。 表 7 观测数据 日期 6.29 6.30 7.1 7.2 7.3 7.4 时间 8:00 20:00 8:00 20:00 8:00 20:00 8:00 20:00 8:00 20:00 8:00 20:00 水流量 1800 1900 2100 2200 2300 2400 2500 2600 2650 2700 2720 2650 含沙量 32 60 75 85 90 98 100 102 108 112 115 116 日期 7.5 7.6 7.7 7.8 7.9 7.10 时间 8:00 20:00 8:00 20:00 8:00 20:00 8:00 20:00 8:00 20:00 8:00 20:00 水流量 2600 2500 2300 2200 2000 1850 1820 1800 1750 1500 1000 900 含沙量 118 120 118 105 80 60 50 30 26 20 8 5 现在,根据试验数据建立数学模型研究下面的问题: (1)给出估计任意时刻的排沙量及总排沙量的方法; (2)确定排沙量与水流量的关系。 5.2 模型的建立与求解 已知给定的观测时刻是等间距的,以 6 月 29 日零时刻开始计时,则各次观测时刻 (离开始时刻 6 月 29 日零时刻的时间)分别为 )412(3600 −= iti , 24,,2,1 L=i , 其中计时单位为秒。第 1 次观测的时刻 288001 =t ,最后一次观测的时刻 102240024 =t 。 记第i ( 24,,2,1 L=i )次观测时水流量为 iv ,含沙量为 ic ,则第i 次观测时的排 沙量为 iii vcy = 。有关的数据见表 8。 表 8 插值数据对应关系 单位:排沙量为 kg 节点 1 2 3 4 5 6 7 8 时刻 28800 72000 115200 158400 201600 244800 288000 331200 排沙量 57600 114000 157500 187000 207000 235200 250000 265200 -197- 节点 9 10 11 12 13 14 15 16 时刻 374400 417600 460800 504000 547200 590400 633600 676800 排沙量 286200 302400 312800 307400 306800 300000 271400 231000 节点 17 18 19 20 21 22 23 24 时刻 720000 763200 806400 849600 892800 936000 979200 1022400 排沙量 160000 111000 91000 54000 45500 30000 8000 4500 对于问题(1),根据所给问题的试验数据,要计算任意时刻的排沙量,就要确定 出排沙量随时间变化的规律,可以通过插值来实现。考虑到实际中的排沙量应该是时间 的连续函数,为了提高模型的精度,我们采用三次样条函数进行插值。 利用 MATLAB 函数,求出三次样条函数,得到排沙量 )(tyy = 与时间的关系,然 后进行积分,就可以得到总的排沙量 dttyz t t∫= 24 1 )( 最后求得总的排沙量为 910844.1 × t,计算的 Matlab 程序如下: clc,clear load data.txt %data.txt 按照原始数据格式把水流量和排沙量排成 4 行,12 列 liu=data([1,3],:); liu=liu';liu=liu(:); sha=data([2,4],:); sha=sha';sha=sha(:); y=sha.*liu;y=y'; i=1:24; t=(12*i-4)*3600; t1=t(1);t2=t(end); pp=csape(t,y); xsh=pp.coefs %求得插值多项式的系数矩阵,每一行是一个区间上多项式的系数。 TL=quadl(@(tt)ppval(pp,tt),t1,t2) 也可以利用 3 次 B 样条函数进行插值,求得总的排沙量也为 910844.1 × t,,计算 的 Matlab 程序如下: clc,clear load data.txt %data.txt 按照原始数据格式把水流量和排沙量排成 4 行,12 列 liu=data([1,3],:); liu=liu';liu=liu(:); sha=data([2,4],:); sha=sha';sha=sha(:); y=sha.*liu;y=y'; i=1:24; t=(12*i-4)*3600; t1=t(1);t2=t(end); pp=spapi(4,t,y) %三次 B 样条 pp2=fn2fm(pp,'pp') %把 B 样条函数转化为 pp 格式 TL=quadl(@(tt)fnval(pp,tt),t1,t2) 对于问题(2),研究排沙量与水量的关系,从试验数据可以看出,开始排沙量是随 -198- 着水流量的增加而增长,而后是随着水流量的减少而减少。显然,变化规律并非是线性 的关系,为此,把问题分为两部分,从开始水流量增加到最大值 2720m3/s(即增长的过 程)为第一阶段,从水流量的最大值到结束为第二阶段,分别来研究水流量与排沙量的 关系。 画出排沙量与水流量的散点图(见图 2)。 1500 2000 2500 3000 0.5 1 1.5 2 2.5 3 3.5 x 105 0 1000 2000 3000 0 0.5 1 1.5 2 2.5 3 3.5 x 105 第一阶段 第二阶段 图 2 散点图 画散点图的程序如下: load data.txt liu=data([1,3],:); liu=liu';liu=liu(:); sha=data([2,4],:); sha=sha';sha=sha(:); y=sha.*liu; subplot(1,2,1), plot(liu(1:11),y(1:11),'*') subplot(1,2,2), plot(liu(12:24),y(12:24),'*') 从散点图可以看出,第一阶段基本上是线性关系,第二阶段准备依次用二次、三次、 四次曲线来拟合,看哪一个模型的剩余标准差小就选取哪一个模型。最后求得第一阶段 排沙量 y 与水流量 v 之间的预测模型为 4661.3733845655.250 −= vy 第二阶段的预测模型为一个四次多项式。 62347 1027496683226.10441.3891092.40018.0107693.2 ×−+−+×−= − vvvvy 计算的 Matlab 程序如下: clc, clear load data.txt %data.txt 按照原始数据格式把水流量和排沙量排成 4 行,12 列 liu=data([1,3],:); liu=liu'; liu=liu(:); sha=data([2,4],:); sha=sha'; sha=sha(:); y=sha.*liu; %以下是第一阶段的拟合 format long e nihe1_1=polyfit(liu(1:11),y(1:11),1) %拟合一次多项式,系数排列从高次幂到低次幂 nihe1_2=polyfit(liu(1:11),y(1:11),2) -199- yhat1_1=polyval(nihe1_1,liu(1:11)); %求预测值 yhat1_2=polyval(nihe1_2,liu(1:11)); %以下求误差平凡和与剩余标准差 cha1_1=sum((y(1:11)-yhat1_1).^2); rmse1_1=sqrt(cha1_1/9) cha1_2=sum((y(1:11)-yhat1_2).^2); rmse1_2=sqrt(cha1_2/8) %以下是第二阶段的拟合 for j=1:3 str1=char(['nihe2_' int2str(j) '=polyfit(liu(12:24),y(12:24),' int2str(j+1) ')']); eval(str1) str2=char(['yhat2_' int2str(j) '=polyval(nihe2_' int2str(j) ',liu(12:24));']); eval(str2) str3=char(['cha2_' int2str(j) '=sum((y(12:24)-yhat2_' int2str(j) ').^2);'... 'rmse2_' int2str(j) '=sqrt(cha2_' int2str(j) '/(11-j))']); eval(str3) end format 习 题 九 1. 用给定的多项式,如 356 23 −+−= xxxy ,产生一组数据 ),( ii yx , mi ,,2,1 L= ,再在 iy 上添加随机干扰(可用 rand 产生(0,1)均匀分布随机数,或 用 randn 产生 )1,0(N 分布随机数),然后用 ix 和添加了随机干扰的 iy 作 3 次多项式拟 合,与原系数比较。如果作 2 或 4 次多项式拟合,结果如何? 2. 已知平面区域 56000 ≤≤ x , 48000 ≤≤ y 的高程数据见 9 表(单位:m)。 表 9 4800 4400 4000 3600 3200 2800 2400 2000 1600 1200 800 400 0 1350 1370 1390 1400 1410 960 940 880 800 690 570 430 290 210 150 1370 1390 1410 1430 1440 1140 1110 1050 950 820 690 540 380 300 210 1380 1410 1430 1450 1470 1320 1280 1200 1080 940 780 620 460 370 350 1420 1430 1450 1480 1500 1550 1510 1430 1300 1200 980 850 750 550 500 1430 1450 1460 1500 1550 1600 1550 1600 1600 1600 1550 1500 1500 1550 1550 950 1190 1370 1500 1200 1100 1550 1600 1550 1380 1070 900 1050 1150 1200 910 1090 1270 1500 1200 1100 1350 1450 1200 1150 1010 880 1000 1050 1100 880 1060 1230 1390 1500 1500 1400 900 1100 1060 950 870 900 936 950 830 980 1180 1320 1450 1420 400 1300 700 900 850 810 380 780 750 740 880 1080 1130 1250 1280 1230 1040 900 500 700 780 750 650 550 650 760 880 970 1020 1050 1020 830 800 700 300 500 550 480 350 510 620 730 800 850 870 850 780 720 650 500 200 300 350 320 370 470 550 600 670 690 670 620 580 450 400 300 100 150 250 XY / 0 400 800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 试用二维插值求 yx, 方向间隔都为 50 的高程,并画出该区域的等高线。 3. 用最小二乘法求一形如 bxaey = 的经验公式拟合表 10 中的数据。 表 10 ix 1 2 3 4 5 6 7 8 iy 15.3 20.5 27.4 36.6 49.1 65.6 87.87 117.6 4.(水箱水流量问题)许多供水单位由于没有测量流入或流出水箱流量的设备,而 只能测量水箱中的水位。试通过测得的某时刻水箱中水位的数据,估计在任意时刻(包 -200- 括水泵灌水期间)t 流出水箱的流量 )(tf 。 给出原始数据表 11,其中长度单位为 E(1E=30.24cm)。水箱为圆柱体,其直径 为 57E。 假设: (1)影响水箱流量的唯一因素是该区公众对水的普通需要; (2)水泵的灌水速度为常数; (3)从水箱中流出水的最大流速小于水泵的灌水速度; (4)每天的用水量分布都是相似的; (5)水箱的流水速度可用光滑曲线来近似; (6)当水箱的水容量达到 514×103g 时,开始泵水;达到 677.6×103g 时,便停止 泵水。 表 11 水位数据表 时间(s) 水位(10-2E) 时间(s) 水位(10-2E) 0 3175 44636 3350 3316 3110 49953 3260 6635 3054 53936 3167 10619 2994 57254 3087 13937 2947 60574 3012 17921 2892 64554 2927 21240 2850 68535 2842 25223 2795 71854 2767 28543 2752 75021 2697 32284 2697 79254 泵水 35932 泵水 82649 泵水 39332 泵水 85968 3475 39435 3550 89953 3397 43318 3445 93270 3340 -201- 第十章 数据的统计描述和分析 数理统计研究的对象是受随机因素影响的数据,以下数理统计就简称统计,统计是 以概率论为基础的一门应用学科。 数据样本少则几个,多则成千上万,人们希望能用少数几个包含其最多相关信息的 数值来体现数据样本总体的规律。描述性统计就是搜集、整理、加工和分析统计数据, 使之系统化、条理化,以显示出数据资料的趋势、特征和数量关系。它是统计推断的基 础,实用性较强,在统计工作中经常使用。 面对一批数据如何进行描述与分析,需要掌握参数估计和假设检验这两个数理统计 的最基本方法。 我们将用 Matlab 的统计工具箱(Statistics Toolbox)来实现数据的统计描述和分析。 §1 统计的基本概念 1.1 总体和样本 总体是人们研究对象的全体,又称母体,如工厂一天生产的全部产品(按合格品及 废品分类),学校全体学生的身高。 总体中的每一个基本单位称为个体,个体的特征用一个变量(如 x )来表示,如一 件产品是合格品记 0=x ,是废品记 1=x ;一个身高 170(cm)的学生记 170=x 。 从总体中随机产生的若干个个体的集合称为样本,或子样,如 n 件产品,100 名学 生的身高,或者一根轴直径的 10 次测量。实际上这就是从总体中随机取得的一批数据, 不妨记作 nxxx ,,, 21 L , n 称为样本容量。 简单地说,统计的任务是由样本推断总体。 1.2 频数表和直方图 一组数据(样本)往往是杂乱无章的,做出它的频数表和直方图,可以看作是对这 组数据的一个初步整理和直观描述。 将数据的取值范围划分为若干个区间,然后统计这组数据在每个区间中出现的次 数,称为频数,由此得到一个频数表。以数据的取值为横坐标,频数为纵坐标,画出一 个阶梯形的图,称为直方图,或频数分布图。 若样本容量不大,能够手工做出频数表和直方图,当样本容量较大时则可以借助 Matlab 这样的软件了。让我们以下面的例子为例,介绍频数表和直方图的作法。 例 1 学生的身高和体重 学校随机抽取 100 名学生,测量他们的身高和体重,所得数据如表 表 1 身高体重数据 身高 体重 身高 体重 身高 体重 身高 体重 身高 体重 172 75 169 55 169 64 171 65 167 47 171 62 168 67 165 52 169 62 168 65 166 62 168 65 164 59 170 58 165 64 160 55 175 67 173 74 172 64 168 57 155 57 176 64 172 69 169 58 176 57 173 58 168 50 169 52 167 72 170 57 166 55 161 49 173 57 175 76 158 51 170 63 169 63 173 61 164 59 165 62 167 53 171 61 166 70 166 63 172 53 173 60 178 64 163 57 169 54 169 66 178 60 177 66 170 56 167 54 169 58 173 73 170 58 160 65 179 62 172 50 163 47 173 67 165 58 176 63 162 52 -202- 165 66 172 59 177 66 182 69 175 75 170 60 170 62 169 63 186 77 174 66 163 50 172 59 176 60 166 76 167 63 172 57 177 58 177 67 169 72 166 50 182 63 176 68 172 56 173 59 174 64 171 59 175 68 165 56 169 65 168 62 177 64 184 70 166 49 171 71 170 59 (i) 数据输入 数据输入通常有两种方法,一种是在交互环境中直接输入,如果在统计中数据量比 较大,这样作不太方便;另一种办法是先把数据写入一个纯文本数据文件 data.txt 中, 格式如例 1 的表 1,有 20 行、10 列,数据列之间用空格键或 Tab 键分割,该数据文件 data.txt 存放在 matlab\work 子目录下,在 Matlab 中用 load 命令读入数据,具体作法是: load data.txt 这样在内存中建立了一个变量 data,它是一个包含有 1020× 个数据的矩阵。 为了得到我们需要的 100 个身高和体重各为一列的矩阵,应做如下的改变: high=data(:,1:2:9);high=high(:) weight=data(:,2:2:10);weight=weight(:) (ii)作频数表及直方图 求频数用 hist 命令实现,其用法是: [N,X] = hist(Y,M) 得到数组(行、列均可)Y 的频数表。它将区间[min(Y),max(Y)]等分为 M 份(缺省时 M 设定为 10),N 返回 M 个小区间的频数,X 返回 M 个小区间的中点。 命令 hist(Y,M) 画出数组 Y 的直方图。 对于例 1 的数据,编写程序如下: load data.txt; high=data(:,1:2:9);high=high(:); weight=data(:,2:2:10);weight=weight(:); [n1,x1]=hist(high) %下面语句与hist命令等价 %n1=[length(find(high<158.1)),... % length(find(high>=158.1&high<161.2)),... % length(find(high>=161.2&high<164.5)),... % length(find(high>=164.5&high<167.6)),... % length(find(high>=167.6&high<170.7)),... % length(find(high>=170.7&high<173.8)),... % length(find(high>=173.8&high<176.9)),... % length(find(high>=176.9&high<180)),... % length(find(high>=180&high<183.1)),... % length(find(high>=183.1))] [n2,x2]=hist(weight) subplot(1,2,1), hist(high) subplot(1,2,2), hist(weight) 计算结果略,直方图如图 1 所示。 -203- 150 160 170 180 190 0 5 10 15 20 25 30 40 50 60 70 80 0 5 10 15 20 25 图 1 直方图 从直方图上可以看出,身高的分布大致呈中间高、两端低的钟形;而体重则看不出 什么规律。要想从数值上给出更确切的描述,需要进一步研究反映数据特征的所谓“统 计量”。直方图所展示的身高的分布形状可看作正态分布,当然也可以用这组数据对分 布作假设检验。 例 2 统计下列五行字符串中字符 a、g、c、t 出现的频数 1.aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggagg 2.cggaggacaaacgggatggcggtattggaggtggcggactgttcgggga 3.gggacggatacggattctggccacggacggaaaggaggacacggcggacataca 4.atggataacggaaacaaaccagacaaacttcggtagaaatacagaagctta 5.cggctggcggacaacggactggcggattccaaaaacggaggaggcggacggaggc 解 把上述五行复制到一个纯文本数据文件 shuju.txt 中,放在 matlab\work 子目录 下,编写如下程序: clc fid1=fopen('shuju.txt','r'); i=1; while (~feof(fid1)) data=fgetl(fid1); a=length(find(data==97)); b=length(find(data==99)); c=length(find(data==103)); d=length(find(data==116)); e=length(find(data>=97&data<=122)); f(i,:)=[a b c d e a+b+c+d]; i=i+1; end f, he=sum(f) dlmwrite('pinshu.txt',f); dlmwrite('pinshu.txt',he,'-append'); fclose(fid1); 我们把统计结果最后写到一个纯文本文件 pinshu.txt 中,在程序中多引进了几个变 量,是为了检验字符串是否只包含 a、g、c、t 四个字符。 1.3 统计量 假设有一个容量为 n 的样本(即一组数据),记作 ),,,( 21 nxxxx L= ,需要对它进 行一定的加工,才能提出有用的信息,用作对总体(分布)参数的估计和检验。统计量 就是加工出来的、反映样本数量特征的函数,它不含任何未知量。 下面我们介绍几种常用的统计量。 -204- (i)表示位置的统计量—算术平均值和中位数 算术平均值(简称均值)描述数据取值的平均位置,记作 x , ∑ = = n i ixnx 1 1 (1) 中位数是将数据由小到大排序后位于中间位置的那个数值。 Matlab 中 mean(x)返回 x 的均值,median(x)返回中位数。 (ii)表示变异程度的统计量—标准差、方差和极差 标准差 s 定义为 2 1 1 2)(1 1 ⎥⎦ ⎤ ⎢⎣ ⎡ −−= ∑ = n i i xxns (2) 它是各个数据与均值偏离程度的度量,这种偏离不妨称为变异。 方差是标准差的平方 2s 。 极差是 ),,,( 21 nxxxx L= 的最大值与最小值之差。 Matlab 中 std(x)返回 x 的标准差,var(x)返回方差,range(x)返回极差。 你可能注意到标准差 s 的定义(2)中,对 n 个 )( xxi − 的平方求和,却被 )1( −n 除, 这是出于无偏估计的要求。若需要改为被 n 除,Matlab 可用 std(x,1)和 var(x,1)来实现。 (iii)中心矩、表示分布形状的统计量—偏度和峰度 随机变量 x 的 r 阶中心矩为 rExxE )( − 。 随机变量 x 的偏度和峰度指的是 x 的标准化变量 DxExx /)( − 的三阶中心矩和 四阶中心矩: ()[ ] (), )( )( )( )( 2/3 33 1 xD xExE xD xExE −= ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −=ν ()[ ] (). )( )( )( )( 2 44 2 xD xExE xD xExE −= ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −=ν 偏度反映分布的对称性, 01 >ν 称为右偏态,此时数据位于均值右边的比位于左 边的多; 01 <ν 称为左偏态,情况相反;而 1ν 接近 0 则可认为分布是对称的。 峰度是分布形状的另一种度量,正态分布的峰度为 3,若 2ν 比 3 大得多,表示分布 有沉重的尾巴,说明样本中含有较多远离均值的数据,因而峰度可以用作衡量偏离正态 分布的尺度之一。 Matlab 中 moment(x,order)返回 x 的 order 阶中心矩,order 为中心矩的阶数。 skewness(x)返回 x 的偏度,kurtosis(x)返回峰度。 在以上用 Matlab 计算各个统计量的命令中,若 x 为矩阵,则作用于 x 的列,返回 一个行向量。 对例 1 给出的学生身高和体重,用 Matlab 计算这些统计量,程序如下: clc load data.txt; high=data(:,1:2:9);high=high(:); weight=data(:,2:2:10);weight=weight(:); -205- shuju=[high weight]; jun_zhi=mean(shuju) zhong_wei_shu=median(shuju) biao_zhun_cha=std(shuju) ji_cha=range(shuju) pian_du=skewness(shuju) feng_du=kurtosis(shuju) 统计量中最重要、最常用的是均值和标准差,由于样本是随机变量,它们作为样本 的函数自然也是随机变量,当用它们去推断总体时,有多大的可靠性就与统计量的概率 分布有关,因此我们需要知道几个重要分布的简单性质。 1.4 统计中几个重要的概率分布 1.4.1 分布函数、密度函数和分位数 随机变量的特性完全由它的(概率)分布函数或(概率)密度函数来描述。设有随 机变量 X ,其分布函数定义为 xX ≤ 的概率,即 }{)( xXPxF ≤= 。若 X 是连续型随 机变量,则其密度函数 )(xp 与 )(xF 的关系为 ∫ ∞− = x dxxpxF )()( . 上α 分位数是下面常用的一个概念,其定义为:对于 10 <<α ,使某分布函数 α−=1)(xF 的 x ,称为这个分布的上α 分位数,记作 αx 。 我们前面画过的直方图是频数分布图,频数除以样本容量 n ,称为频率,n 充分大 时频率是概率的近似,因此直方图可以看作密度函数图形的(离散化)近似。 1.4.2 统计中几个重要的概率分布 (i)正态分布 正态分布随机变量 X 的密度函数曲线呈中间高两边低、对称的钟形,期望(均值) μ=EX ,方差 2σ=DX ,记作 ),(~ 2σμNX ,σ 称均方差或标准差,当 1,0 == σμ 时称为标准正态分布,记作 )1,0(~ NX 。正态分布完全由均值 μ 和方差 2σ 决定,它 的偏度为 0,峰度为 3。 正态分布可以说是最常见的(连续型)概率分布,成批生产时零件的尺寸,射击中 弹着点的位置,仪器反复量测的结果,自然界中一种生物的数量特征等,多数情况下都 服从正态分布,这不仅是观察和经验的总结,而且有着深刻的理论依据,即在大量相互 独立的、作用差不多大的随机因素影响下形成的随机变量,其极限分布为正态分布。 鉴于正态分布的随机变量在实际生活中如此地常见,记住下面 3 个数字是有用的: 68%的数值落在距均值左右 1 个标准差的范围内,即 68.0}{ =+≤≤− σμσμ XP ; 95%的数值落在距均值左右 2 个标准差的范围内,即 95.0}22{ =+≤≤− σμσμ XP ; 99.7%的数值落在距均值左右 3 个标准差的范围内,即 997.0}33{ =+≤≤− σμσμ XP . (ii) 2χ 分布(Chi square) 若 nXXX ,,, 21 L 为相互独立的、服从标准正态分布 )1,0(N 的随机变量,则它们的 平方和 ∑ = = n i iXY 1 2 服从 2χ 分布,记作 )(~ 2 nY χ , n 称自由度,它的期望 nEY = , -206- 方差 nDY 2= 。 (iii)t 分布 若 )1,0(~ NX , )(~ 2 nY χ ,且相互独立,则 nY XT / = 服从t 分布,记作 )(~ ntT , n 称自由度。t 分布又称学生氏(Student)分布。 t 分布的密度函数曲线和 )1,0(N 曲线形状相似。理论上 ∞→n 时, )1,0()(~ NntT → ,实际上当 30>n 时它与 )1,0(N 就相差无几了。 (iv) F 分布 若 )(~ 1 2 nX χ , )(~ 2 2 nY χ ,且相互独立,则 2 1 / / nY nXF = 服从 F 分布,记作 ),(~ 21 nnFF , ),( 21 nn 称自由度。 1.4.3 Matlab 统计工具箱(Toolbox\Stats)中的概率分布 Matlab 统计工具箱中有 27 种概率分布,这里只对上面所述 4 种分布列出命令的字 符: norm 正态分布; chi2 2χ 分布; t t 分布 f F 分布 工具箱对每一种分布都提供 5 类函数,其命令的字符是: pdf 概率密度; cdf 分布函数; inv 分布函数的反函数; stat 均值与方差; rnd 随机数生成 当需要一种分布的某一类函数时,将以上所列的分布命令字符与函数命令字符接起 来,并输入自变量(可以是标量、数组或矩阵)和参数就行了,如: p=normpdf(x,mu,sigma) 均值 mu、标准差 sigma 的正态分布在 x 的密度函数 (mu=0,sigma=1 时可缺省)。 p=tcdf(x,n) t 分布(自由度 n)在 x 的分布函数。 x=chi2inv(p,n) 2χ 分布(自由度 n)使分布函数 F(x)=p 的 x(即 p 分位数)。 [m,v]=fstat(n1,n2) F 分布(自由度 n1,n2)的均值 m 和方差 v。 几个分布的密度函数图形就可以用这些命令作出,如: x=-6:0.01:6;y=normpdf(x);z=normpdf(x,0,2); plot(x,y,x,z),gtext('N(0,1)'),gtext('N(0,2^2)') 分布函数的反函数的意义从下例看出: x=chi2inv(0.9,10) x = 15.9872 如果反过来计算,则 P=chi2cdf(15.9872,10) P = 0.9000 1.5 正态总体统计量的分布 用样本来推断总体,需要知道样本统计量的分布,而样本又是一组与总体同分布的 随机变量,所以样本统计量的分布依赖于总体的分布。当总体服从一般的分布时,求某 个样本统计量的分布是很困难的,只有在总体服从正态分布时,一些重要的样本统计量 (均值、标准差)的分布才有便于使用的结果。另一方面,现实生活中需要进行统计推 断的总体,多数可以认为服从(或近似服从)正态分布,所以统计中人们在正态总体的 -207- 假定下研究统计量的分布,是必要的与合理的。 设总体 ),(~ 2σμNX , nxxx ,,, 21 L 为一容量 n 的样本,其均值 x 和标准差 s 由 式(1)、(2)确定,则用 x 和 s 构造的下面几个分布在统计中是非常有用的。 ),(~ 2 nNx σμ 或 )1,0(~ / N n x σ μ− (3) ).1(~)1( 2 2 2 −− nsn χσ (4) )1(~ / −− nt ns x μ (5) 设有两个总体 ),(~ 2 21 σμNX 和 ),(~ 2 22 σμNY ,及由容量分别为 1n , 2n 的两个 样本确定的均值 yx, 和标准差 21,ss ,则 )1,0(~ // )()( 2 2 21 2 1 21 N nn yx σσ μμ + −−− (6) )2(~ /1/1 )()( 21 21 21 −+ + −−− nnt nns yx w μμ (7) 其中 2 )1()1( 21 2 22 2 112 −+ −+−= nn snsnsw , )1,1(~/ / 212 2 2 2 2 1 2 1 −− nnFs s σ σ (8) 对于(7)式,假定 21 σσ = ,但它们未知,于是用 s 代替。在下面的统计推断中我们 要反复用到这些分布。 §2 参数估计 利用样本对总体进行统计推断的一类问题是参数估计,即假定已知总体的分布,通 常是 ),(~ 2σμNX ,估计有关的参数,如 2,σμ 。参数估计分点估计和区间估计两种。 2.1 点估计 点估计是用样本统计量确定总体参数的一个数值。评价估计优劣的标准有无偏性、 最小方差性、有效性等,估计的方法有矩法、极大似然法等。 最常用的是对总体均值 μ 和方差 2σ (或标准差σ )作点估计。让我们暂时抛开评 价标准,当从一个样本按照式(1)、(2)算出样本均值 x 和方差 2s 后,对 μ 和 2σ (或 σ )一个自然、合理的点估计显然是(在字母上加^表示它的估计值) x=μˆ , 22ˆ s=σ , s=σˆ (9) 2.2 区间估计 点估计虽然给出了待估参数的一个数值,却没有告诉我们这个估计值的精度和可信 程度。一般地,总体的待估参数记作θ (如 2,σμ ),由样本算出的θ 的估计量记作θˆ , 人们常希望给出一个区间 ]ˆ,ˆ[ 21 θθ ,使θ 以一定的概率落在此区间内。若有 αθθθ −=<< 1}ˆˆ{ 21P , 10 <<α (10) -208- 则 ]ˆ,ˆ[ 21 θθ 称为θ 的置信区间, 21 ˆ,ˆ θθ 分别称为置信下限和置信上限, α−1 称为置信概 率或置信水平,α 称为显著性水平。 给出的置信水平为 α−1 的置信区间 ]ˆ,ˆ[ 21 θθ ,称为θ 的区间估计。置信区间越小, 估计的精度越高;置信水平越大,估计的可信程度越高。但是这两个指标显然是矛盾的, 通常是在一定的置信水平下使置信区间尽量小。通俗地说,区间估计给出了点估计的误 差范围。 2.3 参数估计的 Matlab 实现 Matlab 统计工具箱中,有专门计算总体均值、标准差的点估计和区间估计的函数。 对于正态总体,命令是 [mu,sigma,muci,sigmaci]=normfit(x,alpha) 其中 x 为样本(数组或矩阵),alpha 为显著性水平α (alpha 缺省时设定为 0.05),返 回总体均值 μ 和标准差σ 的点估计 mu 和 sigma,及总体均值 μ 和标准差σ 的区间估计 muci 和 sigmaci。当 x 为矩阵时,x 的每一列作为一个样本。 Matlab 统计工具箱中还提供了一些具有特定分布总体的区间估计的命令,如 expfit,poissfit,gamfit,你可以从这些字头猜出它们用于哪个分布,具体用法参见 帮助系统。 §3 假设检验 统计推断的另一类重要问题是假设检验问题。在总体的分布函数完全未知或只知其 形式但不知其参数的情况,为了推断总体的某些性质,提出某些关于总体的假设。例如, 提出总体服从泊松分布的假设,又如对于正态总体提出数学期望等于 0μ 的假设等。假 设检验就是根据样本对所提出的假设做出判断:是接受还是拒绝。这就是所谓的假设检 验问题。 3.1 单个总体 ),( 2σμN 均值 μ 的检验 假设检验有三种: 双边检验: 00 : μμ =H , 01 : μμ ≠H ; 右边检验: 00 : μμ ≤H , 01 : μμ >H ; 左边检验: 00 : μμ ≥H , 01 : μμ 时用 tail=1; 1H 为 0μμ < 时用 tail=-1。输出参 数 h=0 表示接受 0H ,h=1 表示拒绝 0H ,p 表示在假设 0H 下样本均值出现的概率,p 越小 0H 越值得怀疑,ci 是 0μ 的置信区间。 例 3 某车间用一台包装机包装糖果。包得的袋装糖重是一个随机变量,它服从正 态分布。当机器正常时,其均值为 0.5 公斤,标准差为 0.015 公斤。某日开工后为检验 包装机是否正常,随机地抽取它所包装的糖 9 袋,称得净重为(公斤): 0.497 0.506 0.518 0.524 0.498 0.511 0.520 0.515 0.512 -209- 问机器是否正常? 解 总体σ 已知, )015.0,(~ 2μNx ,μ 未知。于是提出假设 5.0: 00 == μμH 和 5.0:1 ≠μH 。 Matlab 实现如下: x=[0.497 0.506 0.518 0.524 0.498... 0.511 0.520 0.515 0.512]; [h,p,ci]=ztest(x,0.5,0.015) 求得 h=1,p=0.0248,说明在 0.05 的水平下,可拒绝原假设,即认为这天包装机 工作不正常。 3.1.2 2σ 未知,关于 μ 的检验(t 检验) 在 Matlab 中t 检验法由函数 ttest 来实现,命令为 [h,p,ci]=ttest(x,mu,alpha,tail) 例 4 某种电子元件的寿命 x (以小时计)服从正态分布, 2,σμ 均未知.现得 16 只 元件的寿命如下: 159 280 101 212 224 379 179 264 222 362 168 250 149 260 485 170 问是否有理由认为元件的平均寿命大于 225(小时)? 解 按题意需检验 225:,225: 100 >=≤ μμμ HH , 取 05.0=α 。Matlab 实现如下: x=[159 280 101 212 224 379 179 264 ... 222 362 168 250 149 260 485 170]; [h,p,ci]=ttest(x,225,0.05,1) 求得 h=0,p=0.2570,说明在显著水平为 0.05 的情况下,不能拒绝原假设,认为 元件的平均寿命不大于 225 小时。 3.2 两个正态总体均值差的检验(t 检验) 还可以用t 检验法检验具有相同方差的 2 个正态总体均值差的假设。在 Matlab 中 由函数 ttest2 实现,命令为: [h,p,ci]=ttest2(x,y,alpha,tail) 与上面的 ttest 相比,不同处只在于输入的是两个样本 x,y(长度不一定相同), 而不是一个样本和它的总体均值;tail 的用法与 ttest 相似,可参看帮助系统。 例 5 在平炉上进行一项试验以确定改变操作方法的建议是否会增加钢的得率,试 验是在同一平炉上进行的。每炼一炉钢时除操作方法外,其它条件都可能做到相同。先 用标准方法炼一炉,然后用建议的新方法炼一炉,以后交换进行,各炼了 10 炉,其得率分 别为 1°标准方法 78.1 72.4 76.2 74.3 77.4 78.4 76.0 75.6 76.7 77.3 2°新方法 79.1 81.0 77.3 79.1 80.0 79.1 79.1 77.3 80.2 82.1 设这两个样本相互独立且分别来自正态总体 ),( 2 1 σμN 和 ),( 2 2 σμN , 2 21 ,, σμμ 均未 知,问建议的新方法能否提高得率?(取 05.0=α 。) 解 (i)需要检验假设 0: 210 ≥− μμH , 0: 211 <− μμH . (ii)Matlab 实现 -210- x=[78.1 72.4 76.2 74.3 77.4 78.4 76.0 75.6 76.7 77.3]; y=[79.1 81.0 77.3 79.1 80.0 79.1 79.1 77.3 80.2 82.1]; [h,p,ci]=ttest2(x,y,0.05,-1) 求得 h=1,p=2.2126×10-4。表明在 05.0=α 的显著水平下,可以拒绝原假设,即认 为建议的新操作方法较原方法优。 3.3 分布拟合检验 在实际问题中,有时不能预知总体服从什么类型的分布,这时就需要根据样本来检 验关于分布的假设。下面介绍 2χ 检验法和专用于检验分布是否为正态的“偏峰、峰度 检验法”。 3.3.1 2χ 检验法 0H :总体 x 的分布函数为 )(xF , 1H : 总体 x 的分布函数不是 ).(xF 在用下述 2χ 检验法检验假设 0H 时,若在假设 0H 下 )(xF 的形式已知,但其参数 值未知,这时需要先用极大似然估计法估计参数,然后作检验。 2χ 检验法的基本思想如下:将随机试验可能结果的全体Ω 分为 k 个互不相容的事 件 kAAAA ,...,,, 321 ),,2,1, ,,,( 1 kjijiAAA ji k i k L=≠Φ=Ω=∑ = 。于是在假设 0H 下, 我们可以计算 )( ii APp = (或 )(ˆˆ ii APp = ), ki ,,2,1 L= 。在 n 次试验中,事件 iA 出 现的频率 nfi / 与 ip ( ipˆ )往往有差异,但一般来说,若 0H 为真,且试验的次数又甚多时, 则这种差异不应该很大。基于这种想法,皮尔逊使用 ∑ = −= k i i ii np npf 1 2 2 )(χ (或 ∑ = −= k i i ii pn pnf 1 2 2 ˆ )ˆ(χ ) (11) 作为检验假设 0H 的统计量。并证明了以下定理。 定理 若 n 充分大,则当 0H 为真时(不论 0H 中的分布属什么分布),统计量(11) 总是近似地服从自由度为 1−− rk 的 2χ 分布,其中 r 是被估计的参数的个数。 于是,若在假设 0H 下算得(11)有 ),1(22 −−≥ rkaχχ 则在显著性水平α 下拒绝 0H ,否则就接受。 注意:在使用 2χ 检验法时,要求样本容量 n 不小于 50,以及每个 inp 都不小于 5, 而且 inp 最好是在 5 以上。否则应适当地合并 iA ,以满足这个要求。 例 6 下面列出了 84 个伊特拉斯坎(Etruscan)人男子的头颅的最大宽度(mm), 试检验这些数据是否来自正态总体(取 )1.0=α 。 141 148 132 138 154 142 150 146 155 158 150 140 147 148 144 150 149 145 149 158 143 141 144 144 126 140 144 142 141 140 145 135 147 146 141 136 140 146 142 137 148 154 137 139 143 140 131 143 141 149 148 135 148 152 143 144 141 143 147 146 -211- 150 132 142 142 143 153 149 146 149 138 142 149 142 137 134 144 146 147 140 142 140 137 152 145 解 编写 Matlab 程序如下: clc x=[141 148 132 138 154 142 150 146 155 158 ... 150 140 147 148 144 150 149 145 149 158 ... 143 141 144 144 126 140 144 142 141 140 ... 145 135 147 146 141 136 140 146 142 137 ... 148 154 137 139 143 140 131 143 141 149 ... 148 135 148 152 143 144 141 143 147 146 ... 150 132 142 142 143 153 149 146 149 138 ... 142 149 142 137 134 144 146 147 140 142 ... 140 137 152 145]; mm=minmax(x) %求数据中的最小数和最大数 hist(x,8) %画直方图 fi=[length(find(x<135)),... length(find(x>=135&x<138)),... length(find(x>=138&x<142)),... length(find(x>=142&x<146)),... length(find(x>=146&x<150)),... length(find(x>=150&x<154)),... length(find(x>=154))] %各区间上出现的频数 mu=mean(x),sigma=std(x) %均值和标准差 fendian=[135,138,142,146,150,154] %区间的分点 p0=normcdf(fendian,mu,sigma) %分点处分布函数的值 p1=diff(p0) %中间各区间的概率 p=[p0(1),p1,1-p0(6)] %所有区间的概率 chi=(fi-84*p).^2./(84*p) chisum=sum(chi) %皮尔逊统计量的值 x_a=chi2inv(0.9,4) %chi2分布的0.9分位数 求得皮尔逊统计量chisum= 2.2654, 7.7794)4()127( 2 1.0 2 1.0 ==−− χχ ,故在 水平0.1下接受 0H ,即认为数据来自正态分布总体。 3.3.2 偏度、峰度检验(留作习题1) 3.4 其它非参数检验 Matlab还提供了一些非参数方法。 3.4.1 Wilcoxon秩和检验 在Matlab中,秩和检验由函数ranksum实现。命令为: [p,h]=ranksum(x,y,alpha) 其中x,y可为不等长向量,alpha为给定的显著水平,它必须为0和1之间的数量。p返回 产生两独立样本的总体是否相同的显著性概率,h返回假设检验的结果。如果x和y的总 体差别不显著,则h为零;如果x和y的总体差别显著,则h为1。如果p接近于零,则可对 原假设质疑。 例7 某商店为了确定向公司 A 或公司 B 购买某种产品,将 BA, 公司以往各次进 货的次品率进行比较,数据如下所示,设两样本独立。问两公司的商品的质量有无显著 差异。设两公司的商品的次品的密度最多只差一个平移,取 05.0=α 。 -212- A :7.0 3.5 9.6 8.1 6.2 5.1 10.4 4.0 2.0 10.5 B :5.7 3.2 4.2 11.0 9.7 6.9 3.6 4.8 5.6 8.4 10.1 5.5 12.3 解 分别以 BA μμ 、 记公司 BA、 的商品次品率总体的均值。所需检验的假设是 BAH μμ =:0 , BAH μμ ≠:1 . Matlab实现如下: a=[7.0 3.5 9.6 8.1 6.2 5.1 10.4 4.0 2.0 10.5]; b=[5.7 3.2 4.2 11.0 9.7 6.9 3.6 4.8 5.6 8.4 10.1 5.5 12.3]; [p,h]=ranksum(a,b) 求得p=0.8041,h=0,表明两样本总体均值相等的概率为0.8041,并不很接近于零, 且h=0说明可以接受原假设,即认为两个公司的商品的质量无明显差异。 3.5 中位数检验 在假设检验中还有一种检验方法为中位数检验,在一般的教学中不一定介绍,但在 实际中也是被广泛应用到的。在Matlab中提供了这种检验的函数。函数的使用方法简单, 下面只给出函数介绍。 3.5.1 signrank函数 signrank Wilcoxon符号秩检验 [p,h]=signrank(x,y,alpha) 其中p给出两个配对样本x和y的中位数相等的假设的显著性概率。向量x,y的长度必须 相同,alpha为给出的显著性水平,取值为0和1之间的数。h返回假设检验的结果。如果 这两个样本的中位数之差几乎为0,则h=0;若有显著差异,则h=1。 3.5.2 signtest函数 signtest 符号检验 [p,h]= signtest(x,y,alpha) 其中p给出两个配对样本x和y的中位数相等的假设的显著性概率。x和y若为向量,二者 的长度必须相同;y亦可为标量,在此情况下,计算x的中位数与常数y之间的差异。alpha 和h同上。 习 题 十 1. 试用偏度、峰度检验法检验例6中的数据是否来自正态总体(取 1.0=α )。 2. 下面列出的是某工厂随机选取的20只部件的装配时间(分): 9.8,10.4,10.6,9.6,9.7,9.9,10.9,11.1,9.6,10.2,10.3,9.6,9.9,11.2,10.6,9.8,10. 5,10.1,10.5,9.7。设装配时间的总体服从正态分布,是否可以认为装配时间的均值显 著地大于10(取 05.0=α )? 3.表2分别给出两个文学家马克﹒吐温(Mark Twain)的八篇小品文及斯诺特格拉 斯(Snodgrass)的10篇小品文中由3个字母组成的词的比例。 表2 马克﹒吐温 0.225 0.262 0.217 0.240 0.230 0.229 0.235 0.217 斯诺特格拉斯 0.209 0.205 0.196 0.210 0.202 0.207 0.224 0.223 0.220 0.201 设两组数据分别来自正态总体,且两总体方差相等。两样本相互独立,问两个作家所写 的小品文中包含由3个字母组成的词的比例是否有显著的差异(取 05.0=α )? -213- 第十一章 方差分析 我们已经作过两个总体均值的假设检验,如两台机床生产的零件尺寸是否相等,病 人和正常人的某个生理指标是否一样。如果把这类问题推广一下,要检验两个以上总体 的均值彼此是否相等,仍然用以前介绍的方法是很难做到的。而你在实际生产和生活中 可以举出许多这样的问题:从用几种不同工艺制成的灯泡中,各抽取了若干个测量其寿 命,要推断这几种工艺制成的灯泡寿命是否有显著差异;用几种化肥和几个小麦品种在 若干块试验田里种植小麦,要推断不同的化肥和品种对产量有无显著影响。 可以看到,为了使生产过程稳定,达到优质、高产,需要对影响产品质量的因素进 行分析,找出有显著影响的那些因素,除了从机理方面进行研究外,常常要作许多试验, 对结果作分析、比较,寻求规律。用数理统计分析试验结果、鉴别各因素对结果影响程 度的方法称为方差分析(Analysis Of Variance),记作 ANOVA。 人们关心的试验结果称为指标,试验中需要考察、可以控制的条件称为因素或因子, 因素所处的状态称为水平。上面提到的灯泡寿命问题是单因素试验,小麦产量问题是双 因素试验。处理这些试验结果的统计方法就称为单因素方差分析和双因素方差分析。 §1 单因素方差分析 只考虑一个因素 A 对所关心的指标的影响, A 取几个水平,在每个水平上作若干 个试验,试验过程中除 A 外其它影响指标的因素都保持不变(只有随机因素存在),我 们的任务是从试验结果推断,因素 A 对指标有无显著影响,即当 A 取不同水平时指标 有无显著差别。 A 取某个水平下的指标视为随机变量,判断 A 取不同水平时指标有无显著差别, 相当于检验若干总体的均值是否相等。 1.1 数学模型 设 A 取 r 个水平 rAAA ,,, 21 L ,在水平 iA 下总体 ix 服从正态分布 ),( 2σμiN , ri ,,1 L= ,这里 2,σμi 未知, iμ 可以互不相同,但假定 ix 有相同的方差。又设在每 个水平 iA 下作了 in 次独立试验,即从中抽取容量为 in 的样本,记作 iij njx ,,1, L= , ijx 服从 ),( 2σμiN , injri ,,1,,,1 LL == 且相互独立。将这些数据列成表 1(单因素试 验数据表)的形式。 表 1 单因素试验数据表 1A 11x 12x … 11nx 2A 21x 22x … 22nx … … … … … rA 1rx 2rx … rrnx 将第i 行称为第i 组数据。判断 A 的 r 个水平对指标有无显著影响,相当于要作以 下的假设检验 rH μμμ === L210 : ; rH μμμ ,,,: 211 L 不全相等 由于 ijx 的取值既受不同水平 iA 的影响,又受 iA 固定下随机因素的影响,所以将它 分解为 ijiijx εμ += , ri ,,1 L= , inj ,,1 L= (1) -214- 其中 ),0(~ 2σε Nij ,且相互独立。记 ∑ = = r i iinn 1 1 μμ , ∑ = = r i inn 1 , μμα −= ii , ri ,,1 L= (2) μ 是总均值, iα 是水平 iA 对指标的效应。由(1)、(2)模型可表为 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ == = ++= ∑ = iij r i i ijiij njriN x ,,1,,,1),,0(~ 0 2 1 LLσε α εαμ (3) 原假设为(以后略去备选假设) 0: 210 ==== rH ααα L (4) 1.2 统计分析 记 ∑ = • = in j ij i i xnx 1 1 , ∑∑ == = r i n j ij i xnx 11 1 (5) •ix 是第i 组数据的组平均值, x 是总平均值。考察全体数据对 x 的偏差平方和 ∑∑ == −= r i n j ijT i xxS 11 2)( (6) 经分解可得 ∑∑∑ == • = • −+−= r i n j iij r i iiT i xxxxnS 11 2 1 2 )()( 记 ∑ = • −= r i iiA xxnS 1 2)( (7) ∑∑ == •−= r i n j iijE i xxS 11 2)( (8) 则 EAT SSS += (9) AS 是各组均值对总方差的偏差平方和,称为组间平方和; ES 是各组内的数据对均值偏 差平方和的总和。 AS 反映 A 不同水平间的差异, ES 则表示在同一水平下随机误差的 大小。 注意到 ∑ = •− in j iij xx 1 2)( 是总体 ),( 2σμiN 的样本方差的 1−in 倍,于是有 )1(~)( 2 1 22 −−∑ = • i n j iij nxx i χσ 由 2χ 分布的可加性知 -215- ⎟ ⎠ ⎞⎜ ⎝ ⎛ −∑ = r i iE nS 1 22 )1(~ χσ 即 )(~ 22 rnSE −χσ 且有 2)( σrnESE −= (10) 对 AS 作进一步分析可得 ∑ = +−= r i iiA nrES 1 22)1( ασ (11) 当 0H 成立时 2)1( σ−= rES A (12) 可知若 0H 成立, AS 只反映随机波动,而若 0H 不成立,那它就还反映了 A 的不同水平 的效应 iα 。单从数值上看,当 0H 成立时,由(10)、(12)对于一次试验应有 1)/( )1/( ≈− − rnS rS E A 而当 0H 不成立时这个比值将远大于 1。当 0H 成立时,该比值服从自由度 11 −= rn , )(2 rnn −= 的 F 分布,即 ),1(~)/( )1/( rnrFrnS rSF E A −−− −= (13) 为检验 0H ,给定显著性水平α ,记 F 分布的 α−1 分位数为 ))(,1(1 rnrF −−−α ,检验 规则为 ))(,1(1 rnrFF −−< −α 时接受 0H ,否则拒绝。 以上对 TEA SSS ,, 的分析相当于对组间、组内等方差的分析,所以这种假设检验方法称 方差分析。 1.3 方差分析表 将试验数据按上述分析、计算的结果排成表 2 的形式,称为单因素方差分析表 (Matlab 中给出的方差分析表)。 表 2 单因素方差分析表 方差来源 平方和 自由度 均方 rp−1 分位数 概率 因素 A AS 1−r 1−= r SS A A ),1(1 rnrF rp −−− rp 误差 ES rn − rn SS E E −= 总和 TS 1−n 最后一列给出大于 F 值的概率 rp , ))(,1(11 rnrFF rp −−< −− α 相当于 α>rp 。 -216- 方差分析一般用的显著性水平是:取 01.0=α ,拒 绝 0H ,称因素 A 的影响(或 A 各水平的差异)非常显著;取 01.0=α ,不拒绝 0H ,但取 05.0=α ,拒绝 0H ,称因 素 A 的影响显著;取 05.0=α ,不拒绝 0H ,称因素 A 无显著影响。 1.4 Matlab 实现 Matlab 统计工具箱中单因素方差分析的命令是 anoval。 若各组数据个数相等,称为均衡数据。若各组数据个数不等,称非均衡数据。 (1)均衡数据 处理均衡数据的用法为: p=anoval(x) 返回值 p 是一个概率,当 p α> 时接受 0H ,x 为 rm× 的数据矩阵,x 的每一列是一个 水平的数据(这里各个水平上的样本容量 mni = )。另外,还输出一个方差表和一个 Box 图。 例 1 为考察 5 名工人的劳动生产率是否相同,记录了每人 4 天的产量,并算出其 平均值,如表 3。你能从这些数据推断出他们的生产率有无显著差别吗? 表 3 工人 天 1A 2A 3A 4A 5A 1 256 254 250 248 236 2 242 330 277 280 252 3 280 290 230 305 220 4 298 295 302 289 252 平均产量 269 292.25 264.75 280.5 240 解 编写程序如下: x=[256 254 250 248 236 242 330 277 280 252 280 290 230 305 220 298 295 302 289 252]; p=anova1(x) 求得 05.01109.0 =>= αp ,故接受 0H ,即 5 名工人的生产率没有显著差异。方 差表对应于上面的单因素方差分析表的 4~1 列, 262.2=F 是 )15,4(F 分布的 p−1 分 位数,可以验证 fcdf(2.262,4,15)=0.8891=1-p Box 图反映了各组数据的特征。 注:接受 0H ,是将 5 名工人的生产率作为一个整体进行假设检验的结果,并不表 明取其中 2 个工人的生产率作两总体的均值检验时,也一定接受均值相等的假设。实际 上,读者可以用 ttest2 对本题作 520 : μμ =H 的检验,看看会得到什么结果。 (2)非均衡数据 处理非均衡数据的用法为: p=anova1(x,group) x 为向量,从第 1 组到第 r 组数据依次排列;group 为与 x 同长度的向量,标志 x 中数 据的组别(在与 x 第i 组数据相对应的位置处输入整数 ),,2,1( rii L= )。 -217- 例 2 用 4 种工艺生产灯泡,从各种工艺制成的灯泡中各抽出了若干个测量其寿命, 结果如下表,试推断这几种工艺制成的灯泡寿命是否有显著差异。 表 4 工艺 1A 2A 3A 4A 序号 1 1620 1580 1460 1500 2 1670 1600 1540 1550 3 1700 1640 1620 1610 4 1750 1720 1680 5 1800 解 编写程序如下: x=[1620 1580 1460 1500 1670 1600 1540 1550 1700 1640 1620 1610 1750 1720 1680 1800]; x=[x(1:4),x(16),x(5:8),x(9:11),x(12:15)]; g=[ones(1,5),2*ones(1,4),3*ones(1,3),4*ones(1,4)]; p=anova1(x,g) 求得 0.01 nFF α ,则否定 0H ,接受 1H 。这时认为 1β 显著不为零,可以用 x 的 线性关系来解释 y 。习惯上说,线性回归方程的 F 检验通过了。 需要注意的是,即使 F 检验通过了,也不说明 iii xy εββ ++= 10 -237- 就是一个恰当的回归模型,事实上,当 0H 假设被拒绝后,只能说明 y 与 x 之间存在显 著的线性关系,但很有可能在模型中还包括更多的回归变量,而不仅仅是一个回归变量 x 。 一般地,回归方程的假设检验包括两个方面:一个是对模型的检验,即检验自变量 与因变量之间的关系能否用一个线性模型来表示,这是由 F 检验来完成的;另一个检 验是关于回归参数的检验,即当模型检验通过后,还要具体检验每一个自变量对因变量 的影响程度是否显著。这就是下面要讨论的t 检验。在一元线性分析中,由于自变量的 个数只有一个,这两种检验是统一的,它们的效果完全是等价的。但是,在多元线性回 归分析中,由于变量的个数只有一个,这两种检验是统一的,它们的效果完全是等价的。 但是,在多元线性回归分析中,这两个建议的意义是不同的。从逻辑上说,一般常在 F 检验通过后,再进一步进行t 建议。 2.4.2 回归系数的显著性建议 回归参数的建议是考察每一个自变量对因变量的影响是否显著。换句话说,就是要 检验每一个总体参数是否显著不为零。 首先看对 01 =β 的检验。 1β 代表 ix 变化一个单位对 iy 的影响程度。对 1β 的检验 就是要看这种影响程度与零是否有显著差异。 由于 ) )( ,(~ˆ 1 2 2 11 ∑ = − n i i xx N σββ ∑ = − = n i i xx 1 2 2 1 )( )ˆ(Var σβ 的点估计为 ∑ = − = n i i xx MSES 1 2 1 2 )( )ˆ(β 容易证明统计量 )2(~ )ˆ( ˆ 1 11 −− nt S β ββ 事实上,由于 )ˆ(Var/)ˆ( )ˆ(Var/)ˆ( )ˆ( ˆ 11 111 1 11 ββ βββ β ββ SS −=− 其分子 )ˆ(Var/)ˆ( 111 βββ − 服从标准正态分布,而分母项有 )2()(/ )(/ )ˆ(Var )ˆ( 22 1 22 1 2 1 1 2 −== − − = ∑ ∑ = = n SSEMSE xx xxMSES n i i n i i σσσβ β 已知 )2(~/ 22 −nSSE χσ ,所以 -238- )2(~ )ˆ( ˆ 1 11 −− nt S β ββ 1 ˆβ 的抽样分布清楚后,可以进行 1β 是否显著为零的检验。 0: 10 =βH , 0: 11 ≠βH 检验统计量为 )ˆ( ˆ 1 1 1 β β S t = 检验统计量 1t 在 01 =β 假设为真时,服从自由度为 )2( −n 的t 分布。 对于给定的检验水平α ,则通过t 分布表可查到统计量 1t 的临界值 )2( 2 −ntα 。决 策规则是: 若 )2( 2 1 −≤ ntt α ,则接受 0H ,认为 1β 显著为零; 若 )2( 2 1 −> ntt α ,则拒绝 0H ,认为 1β 显著不为零。 当拒绝了 0H ,认为 1β 显著不为零时,又称 1β 通过了t 检验。 另一方面,由于 α β ββ α −= ⎪⎭ ⎪⎬ ⎫ ⎪⎩ ⎪⎨ ⎧ −<− 1)2( )ˆ( ˆ 21 11 nt S P 还可以确定 1β 的置信度为 α−1 的置信区间为 )ˆ()2(ˆ)ˆ()2(ˆ 1 2 111 2 1 βββββ αα SntSnt −+≤≤−− (18) 同样地,也可以对总体参数 0β 进行显著性检验,并且求出它的置信区间。它的最 小二乘估计量 0 ˆβ 的抽样分布为正态分布,即 ]) )( 1[,(~ˆ 1 2 2 2 00 ∑ = − + n i i xx x nN σββ )ˆ(Var 0β 的估计量为 ] )( 1[)ˆ( 1 2 2 0 2 ∑ = − += n i i xx x nMSES β 可以推出 )2(~ )ˆ( ˆ 0 00 −− nt S β ββ 为检验 0β 是否显著为零,提出假设 0: 00 =βH , 0: 01 ≠βH -239- 检验统计量为 )ˆ( ˆ 0 0 0 β β S t = 在 00 =β 时,检验统计量 0t 服从自由度为 )2( −n 的t 分布。 对于给定的检验水平α ,则通过t 分布表可查到统计量 0t 的临界值 )2( 2 −ntα 。决 策准则为: 若 )2( 2 0 −≤ ntt α ,则接受 0H ,认为 0β 显著为零; 若 )2( 2 0 −> ntt α ,则拒绝 0H ,认为 0β 显著不为零。 此外,根据 α β ββ α −= ⎪⎭ ⎪⎬ ⎫ ⎪⎩ ⎪⎨ ⎧ −<− 1)2( )ˆ( ˆ 20 00 nt S P 还可以确定 0β 的置信度为 α−1 的置信区间为 )ˆ()2(ˆ)ˆ()2(ˆ 0 2 000 2 0 βββββ αα SntSnt −+≤≤−− (19) §3 多元线性回归 3.1 模型 多元线性回归分析的模型为 ⎩ ⎨ ⎧ ++++= ),0(~ 2 110 σε εβββ N xxy mmL (20) 式中 2 10 ,,,, σβββ mL 都是与 mxxx ,,, 21 L 无关的未知参数,其中 mβββ ,,, 10 L 称为回 归系数。 现得到 n 个独立观测数据 ),,,( 1 imii xxy L , mnni >= ,,,1 L ,由(20)得 ⎩ ⎨ ⎧ = ++++= niN xxy i iimmii ,,1),,0(~ 2 110 L L σε εβββ (21) 记 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = nmn m xx xx X L MLMM L 1 111 1 1 , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = ny y Y M 1 (22) T n ][ 1 εεε L= , T m ][ 10 ββββ L= (20)表为 ⎩ ⎨ ⎧ += ),0(~ 2 nEN XY σε εβ (23) 其中 nE 为 n 阶单位矩阵。 -240- 3.2 参数估计 模型(20)中的参数 mβββ ,,, 10 L 仍用最小二乘法估计,即应选取估计值 jβˆ ,使 当 jj ββ ˆ= 时, mj ,,2,1,0 L= 时,误差平方和 ∑∑ == −−−−== n i n i immiii xxyQ 11 2 110 2 )( βββε L (24) 达到最小。为此,令 0=∂ ∂ j Q β , nj ,,2,1,0 L= 得 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ==−−−−−=∂ ∂ =−−−−−=∂ ∂ ∑ ∑ = = mjxxxyQ xxyQ n i ijimmii j n i immii ,,2,1,0)(2 0)(2 1 110 1 110 0 LL L ββββ ββββ (25) 经整理化为以下正规方程组 ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ =++++ =++++ =++++ ∑∑∑∑∑ ∑∑∑∑∑ ∑∑∑∑ ===== ===== ==== n i iim n i imm n i iim n i iim n i im n i ii n i imim n i ii n i i n i i n i i n i imm n i i n i i yxxxxxxx yxxxxxxx yxxxn 11 2 1 22 1 11 1 0 1 1 1 1 1 212 1 2 11 1 10 111 22 1 110 ββββ ββββ ββββ L L L (26) 正规方程组的矩阵形式为 YXXX TT =β (27) 当矩阵 X 列满秩时, XX T 为可逆方阵,(27)式的解为 YXXX TT 1)(ˆ −=β (28) 将 βˆ 代回原模型得到 y 的估计值 mm xxy βββ ˆˆˆˆ 110 +++= L (29) 而这组数据的拟合值为 βˆˆ XY = ,拟合误差 YYe ˆ−= 称为残差,可作为随机误差ε 的 估计,而 ∑∑ == −== n i n i iii yyeQ 11 22 )ˆ( (30) 为残差平方和(或剩余平方和),即 )ˆ(βQ 。 3.3 统计分析 不加证明地给出以下结果: (i)βˆ 是 β 的线性无偏最小方差估计。指的是 βˆ 是Y 的线性函数;βˆ 的期望等于 β ;在 β 的线性无偏估计中, βˆ 的方差最小。 -241- (ii) βˆ 服从正态分布 ))(,(~ˆ 12 −XXN Tσββ (31) 记 nnij T cXX × − = )()( 1 。 (iii)对残差平方和Q , 2)1( σ−−= mnEQ ,且 )1(~ 2 2 −− mnQ χσ (32) 由此得到 2σ 的无偏估计 22 ˆ 1 σ=−−= mn Qs (33) 2s 是剩余方差(残差的方差), s 称为剩余标准差。 (iv)对总平方和 ∑ = −= n i i yySST 1 2)( 进行分解,有 UQSST += , ∑ = −= n i i yyU 1 2)ˆ( (34) 其中Q 是由(24)定义的残差平方和,反映随机误差对 y 的影响,U 称为回归平方和, 反映自变量对 y 的影响。上面的分解中利用了正规方程组。 3.4 回归模型的假设检验 因变量 y 与自变量 mxx ,,1 L 之间是否存在如模型(20)所示的线性关系是需要检 验的,显然,如果所有的 |ˆ| jβ ),,1( mj L= 都很小, y 与 mxx ,,1 L 的线性关系就不 明显,所以可令原假设为 ),,1(0:0 mjH j L==β 当 0H 成立时由分解式(34)定义的 QU, 满足 )1,(~)1/( / −−−−= mnmFmnQ mUF (35) 在显著性水平α 下有上α 分位数 )1,( −− mnmFα ,若 )1,( −−< mnmFF α ,接受 0H ;否则,拒绝。 注意 接受 0H 只说明 y 与 mxx ,,1 L 的线性关系不明显,可能存在非线性关系, 如平方关系。 还有一些衡量 y 与 mxx ,,1 L 相关程度的指标,如用回归平方和在总平方和中的比 值定义复判定系数 S UR =2 (36) 2RR = 称为复相关系数, R 越大, y 与 mxx ,,1 L 相关关系越密切,通常, R 大于 0.8(或 0.9)才认为相关关系成立。 3.5 回归系数的假设检验和区间估计 当上面的 0H 被拒绝时, jβ 不全为零,但是不排除其中若干个等于零。所以应进 -242- 一步作如下 m 个检验 ),,1,0( mj L= : 0:)( 0 =j jH β 由(31)式, ),(~ˆ 2 jjjj cN σββ , jjc 是 1)( −XX T 中的第 ),( jj 元素,用 2s 代替 2σ , 由(31)~(33)式,当 )( 0 jH 成立时 )1(~ )1/( /ˆ −− −− = mnt mnQ c t jjj j β (37) 对给定的α ,若 )1(|| 2 −−< mntt j α ,接受 )( 0 jH ;否则,拒绝。 (37)式也可用于对 jβ 作区间估计( mj ,,1,0 L= ),在置信水平 α−1 下, jβ 的 置信区间为 ])1(ˆ,)1(ˆ[ 22 jjjjjj csmntcsmnt −−+−−− αα ββ (38) 其中 1−−= mn Qs 。 3.6 利用回归模型进行预测 当回归模型和系数通过检验后,可由给定的 ),,( 0010 mxxx L= 预测 0y , 0y 是随机 的,显然其预测值(点估计)为 mm xxy 001100 ˆˆˆˆ βββ +++= L (39) 给定α 可以算出 0y 的预测区间(区间估计),结果较复杂,但当 n 较大且 ix0 接近平均 值 ix 时, 0y 的预测区间可简化为 ]ˆ,ˆ[ 2 0 2 0 szyszy αα +− (40) 其中 2 αz 是标准正态分布的上 2 α 分位数。 对 0y 的区间估计方法可用于给出已知数据残差 iii yye ˆ−= ),,1( ni L= 的置信区 间, ie 服从均值为零的正态分布,所以若某个 ie 的置信区间不包含零点,则认为这个 数据是异常的,可予以剔除。 §4 Matlab 中的回归分析 4.1 多元线性回归 Matlab 统计工具箱用命令 regress 实现多元线性回归,用的方法是最小二乘法,用 法是: b=regress(Y,X) 其中 Y, X 为按(22)式排列的数据,b 为回归系数估计值 mβββ ˆ,,ˆ,ˆ 10 L 。 [b,bint,r,rint,stats]=regress(Y,X,alpha) 这里 Y, X 同上,alpha 为显著性水平(缺省时设定为 0.05),b,bint 为回归系数估计值和 它们的置信区间,r,rint 为残差(向量)及其置信区间,stats 是用于检验回归模型的统 计量,有四个数值,第一个是 2R (见(36)式),第二个是 F (见(35)式),第三个 -243- 是与 F 对应的概率 p , α

−= xx xrdt dx m ,这说明 )(tx 是单调增加的,又由 (19)式知:当 2 mxx < 时, 02 2 >dt xd , )(txx = 为凹,当 2 mxx > 时, 02 2

− bbx ,它的作用是使纯增长率减少。如果一个国家工业化程度较高,食品供应 较充足,能够提供更多的人生存,此时b 较小;反之b 较大,故建立方程 ⎪⎩ ⎪⎨ ⎧ = >−= ,)( ),0,()( 00 xtx babxaxdt dx (20) 其解为 )( 00 0 0)( )( ttaebxabx axtx −−−+ = (21) 由(21)式,得 xbxabxadt xd ))(2(2 2 −−= (22) 对(20)~(22)式进行分析,有 (i)对任意 0tt > ,有 0)( >tx ,且 b atx t = +∞→ )(lim (ii)当 b ax <<0 时, 0)(' >tx , )(tx 递增;当 b ax = 时, 0)(' =tx ;当 b atx >)( 时, 0)(' tx , )(tx 为凹,当 b axb a <<2 时, 0)('' k 时, y 方获胜。当 0k ,即 -162- 02 0 2 0 >− bxay 考虑到假设(i),上式可写为 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ >⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ y x y x p p r r x y 2 0 0 (25) (25)式是 y 方占优势的条件。若交战双方都训练有素,且都处于良好的作战状态。则 xr 与 yr , zp 与 yp 相差不大,(25)式右边近似为 1。(25)式左边表明,初始兵力比例被 平方地放大了。即双方初始兵力之比 0 0 x y ,以平方的关系影响着战争的结局。比如说, 如果 y 方的兵力增加到原来的 2 倍,x 方兵力不变,则影响着战争的结局的能力将增加 4 倍。此时,x 方要想与 y 方抗衡,须把其士兵的射击率 xr 增加到原来的 4 倍( yyx prp ,, 均不变)。 以上是研究双方之间兵力的变化关系。下面将讨论每一方的兵力随时间的变化关 系。 对(24)式两边对t 求导,得 abxdt dyadt xd =−=2 2 , 即 02 2 =− abxdt xd (27) 初始条件为 000 ,)0( aydt dxxx t −== = 解之,得 )(sh)(ch)( 00 tabyb atabxtx −= 同理可求得 )(ty 的表达式为 )(sh)(ch)( 00 tabxa btabyty −= 。 3.2 模型二 游击战模型 模型假设 (i) y 方士兵看不见 x 方士兵, x 方士兵在某个面积为 xS 的区域内活动。 y 方士 兵不是向 x 方士兵射击,而是向该区域射击。此时,x 方士兵的战斗减员不仅与 y 方兵 力有关,而且随着 x 方兵力增加而增加。因为在一个有限区域内,士兵人数越多,被杀 伤的可能性越大。可设, x 方的战斗减员率为 cxy ,其中 c 为 y 方战斗效果系数, x ry yyy S Srprc == ,其中 yr 仍为射击率,命中率 yp 为 y 方一次射击的有效面积( ryS ) 与 x 方活动面积( xS )之比。 -163- 假设(ii),(iii)同模型一的假设(ii),(iii)。 模型与求解 由假设,可得方程 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ +−−= +−−= )( )( tvydxydt dy tuxcxydt dx β α (28) 其中 y rx xxx S Srprd == 是 x 方战斗效果系数。 为了使(28)式容易求解,可以做一些简化:设交战双方在作战中均无非战斗减员 和增援。此时,有 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ −= −= dxydt dy cxydt dx (29) 两式相除,得 c d dx dy = , 其解为 )()( 00 xxdyyc −=− 令 00 dxcyl −= ,上式可化为 ldxcy =− (30) 当 0=l ,双方打成平局。当 0>l 时, y 方获胜。当 0 0 0 即初始兵力之比 0 0 x y 以线性关系影响战斗的结局。当双方的射击率 yx rr , 与有效射击面积 ryrx SS , 一定时,增加活动面积 yS 与增加初始兵力 0y 起着同样的作用。 3.3 模型三 混合战模型 模型假设 (i) x 方为游击队, y 方为正规部队。 (ii)交战双方均无战斗减员与增援。 模型与求解 借鉴模型一与二的思想,可得 -164- ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ == −= −= 00 )0(,)0( yyxx bxdt dy cxydt dx (31) 其解为 mbxcy =− 22 (32) 其中 0 2 0 2bxcym −= 。 经验表明,只有当兵力 0 0 x y 远远大于 1 时,正规部队 y 才能战胜游击队。当 0>m 时, y 方胜,此时 00 2 0 0 22 xSr Spr cx b x y ryy xxx=>⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ (33) 一般来说,正规部队以火力强而见长,游击队以活动灵活,活动范围大而见长。这 可以通过一些具体数据进行计算。 不妨设 1000 =x ,命中率 1.0=xp , 2 1= y x r r ,活动区域的面积 610=xS m2, y 方 有效射击面积 1=ryS m2,则由(33), y 方取胜的条件为 10010012 101.01.02 62 0 0 =×× ×××>⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ x y 00 10xy > , y 方的兵力是 x 方的 10 倍。 美国人曾用这个模型分析越南战争。根据类似于上面的计算以及四五十年代发生在 马来亚、菲律宾、印尼、老挝等地的混合战争的实际情况估计出,正规部队一方要想取 胜必须至少投入 8 倍于游击部队一方的兵力,而美国至多只能派出 6 倍于越南的兵力。 越南战争的结局是美国不得不接受和谈并撤军,越南人民取得最后的胜利。 3.4 模型四 一个战争实例 J. H. Engel 用二次大战末期美日硫黄岛战役中的美军战地记录,对正规战争模型进 行了验证,发现模型结果与实际数据吻合得很好。 硫黄岛位于东京以南 660 英里的海面上,是日军的重要空军基地。美军在 1945 年 2 月开始进攻,激烈的战斗持续了一个月,双方伤亡惨重,日方守军 21500 人全部阵亡 或被俘,美方投入兵力 73000 人,伤亡 20265 人,战争进行到 28 天时美军宣布占领该 岛,实际战斗到 36 天才停止。美军的战地记录有按天统计的战斗减员和增援情况。日 军没有后援,战地记录则全部遗失。 用 )(tA 和 )(tJ 表示美军和日军第t 天的人数,忽略双方的非战斗减员,则 -165- ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ == −= +−= 21500)0(,0)0( )( JA bAdt dJ tuaJdt dA (34) 美军战地记录给出增援率 )(tu 为 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ <≤ <≤ <≤ = 其它 ,0 65,13000 32,6000 10,54000 )( t t t tu 并可由每天伤亡人数算出 )(tA , 36,,2,1 L=t 。下面要利用这些实际数据代入(34) 式,算出 )(tA 的理论值,并与实际值比较。 利用给出的数据,对参数 ba, 进行估计。对(34)式两边积分,并用求和来近似代 替积分,有 ∑∑ == +−=− tt uJaAtA 11 )()()0()( ττ ττ (35) ∑ = −=− t AbJtJ 1 )()0()( τ τ (36) 为估计b 在(36)式中取 36=t ,因为 0)36( =J ,且由 )(tA 的实际数据可得 ∑ = = 36 1 2037000)( t tA ,于是从(36)式估计出 0106.0=b 。再把这个值代入(36)式即可 算出 )(tJ , 36,,2,1 L=t 。 然后从(35)式估计 a 。令 36=t ,得 ∑ ∑ = = − = 36 1 36 1 )( )36()( τ τ τ τ J Au a (37) 其中分子是美军的总伤亡人数,为 20265 人,分母可由已经算出的 )(tJ 得到,为 372500 人,于是从(37)式有 0544.0=a 。把这个值代入(35)式得 ∑∑ == +−= tt uJtA 11 )()(0544.0)( ττ ττ (38) 由(38)式就能够算出美军人数 )(tA 的理论值,与实际数据吻合得很好。 习 题 十 三 1. 设位于坐标原点的甲舰向位于 x 轴上点 )0,1(A 处的乙舰发射导弹,导弹始终对 准乙舰。如果乙舰以最大的速度 0v ( 0v 是常数)沿平行于 y 轴的直线行驶,导弹的速 -166- 度是 05v ,求导弹运行的曲线。又乙舰行驶多远时,导弹将它击中? 2. 有高为 1m 的半球形容器,水从它的底部小孔流出。小孔横截面积为 1cm2。开 始时容器内盛满了水,求水从小孔流出过程中容器里水面的高度 h(水面与孔口中心的 距离)随时间t 变化的规律。 3. 在交通十字路口,都会设置红绿灯。为了让那些正行驶在交叉路口或离交叉路 口太近而无法停下的车辆通过路口,红绿灯转换中间还要亮起一段时间的黄灯。对于一 位驶近交叉路口的驾驶员来说,万万不可处于这样的进退两难的境地:要安全停车则离 路口太近;要想在红灯亮之前通过路口又觉太远。 那么,黄灯应亮多长时间才最为合理呢? 4. 我们知道现在的香烟都有过滤嘴,而且有的过滤嘴还很长,据说过滤嘴可以起 到减少毒物进入体内。你认为呢?过滤嘴的作用到底有多大,与使用的材料和过滤嘴的 长度有无关系?请你建立一个描述吸烟过程的数学模型,分析人体吸入的毒量与哪些因 素有关,以及它们之间的数量表达式。 5. 根据经验当一种新商品投入市场后,随着人们对它的拥有量的增加,其销售量 )(ts 下降的速度与 )(ts 成正比。广告宣传可给销量添加一个增长速度,它与广告费 )(ta 成正比,但广告只能影响这种商品在市场上尚未饱和的部分(设饱和量为 M )。建立一 个销售 )(ts 的模型。若广告宣传只进行有限时间τ ,且广告费为常数 a ,问 )(ts 如何变 化? -167- 第十四章 稳定状态模型 虽然动态过程的变化规律一般要用微分方程建立的动态模型来描述,但是对于某些 实际问题,建模的主要目的并不是要寻求动态过程每个瞬时的性态,而是研究某种意义 下稳定状态的特征,特别是当时间充分长以后动态过程的变化趋势。譬如在什么情况下 描述过程的变量会越来越接近某些确定的数值,在什么情况下又会越来越远离这些数值 而导致过程不稳定。为了分析这种稳定与不稳定的规律常常不需要求解微分方程,而可 以利用微分方程稳定性理论,直接研究平衡状态的稳定性就行了。 本章先介绍平衡状态与稳定性的概念,然后列举几个这方面的建模例子。 §1 微分方程稳定性理论简介 定义 1 称一个常微分方程(组)是自治的,如果方程(组) ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ == )( ),( ),( 1 tf txf txFdt dx N M (1) 中的 )(),( xFtxF = ,即在 F 中不含时间变量t 。 事实上,如果增补一个方程,一个非自治系统可以转化自治系统,就是说,如果定 义 ⎥⎦ ⎤ ⎢⎣ ⎡= t xy , ⎥⎦ ⎤ ⎢⎣ ⎡= 1 ),()( txFyG 且引入另一个变量 s ,则方程(1)与下述方程 )(yGds dy = 是等价的。这就是说自治系统的概念是相对的。下面仅考虑自治系统,这样的系统也称 为动力系统。 定义 2 系统 )(xFdt dx = (2) 的相空间是以 ),,( 1 nxx L 为坐标的空间 nR ,特别,当 2=n 时,称相空间为相平面。 空间 nR 中的点集 },,1,)2()(|),,{( 1 nitxxxx iin LL == 满足 称为系统(2)的轨线,所有轨线在相空间中的分布图称为相图。 定义 3 相空间中满足 0)( 0 =xF 的点 0x 称为系统(2)的奇点(或平衡点)。 奇点可以是孤立的,也可以是连续的点集。例如,系统 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ += += dycxdt tdy byaxdt tdx )( )( (3) 当 0=− bcad 时,有一个连续的奇点的集合。当 0≠− bcad 时, )0,0( 是这个系统的 唯一的奇点。下面仅考虑孤立奇点。为了知道何时有孤立奇点,给出下述定理: -168- 定理 1 设 )(xF 是实解析函数,且 0x 系统(2)的奇点。若 )(xF 在点 0x 处的 Jacobian 矩阵 ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ∂ ∂= j i x fxJ )( 0 是非奇异的,则 0x 是该系统的孤立奇点。 定义 4 设 0x 是(2)的奇点,称 (i) 0x 是稳定的,如果对于任意给定的 0>ε ,存在一个 0>δ ,使得如果 δ<− |)0(| 0xx ,则 ε<− |)(| 0xtx 对所有的t 都成立。 (ii) 0x 是渐近稳定的,如果它是稳定的,且 0|)(|lim 0 =− ∞→ xtx t 。 这样,如果当系统的初始状态靠近于奇点,其轨线对所有的时间t 仍然接近它,于 是说 0x 是稳定的。另一方面,如果当 ∞→t 时这些轨线趋于 0x ,则 0x 是渐近稳定的。 定义 5 一个奇点不是稳定的,则称这个奇点是不稳定的。 对于常系数齐次线性系统(3)有下述定理。 定理 2 设 )(txx = 是系统(3)的通解。则 (i)如果系统(3)的系数矩阵 A 的一切特征根的实部都是负的,则系统(3)的 零解是渐近稳定的。 (ii)如果 A 的特征根中至少有一个根的实部是正的,则系统(3)的零解是不稳 定的。 (iii)如果 A 的一切特征根的实部都不是正的,但有零实部,则系统(3)的零解 可能是稳定的,也可能是不稳定的,但总不会是渐近稳定的。 定理 2 告诉我们:系统(3)的零解渐近稳定的充分必要条件是 A 的一切特征根的 实部都是负的。 对于非线性系统,一般不可能找出其积分曲线或轨迹,也就不可能直接导出奇点的 稳定性。为克服这一困难,在奇点附近用一个线性系统来近似这个非线性系统,用这个 近似系统的解来给出这个奇点的稳定解。 定义 6 设 0x 是系统(2)的一个孤立奇点。称系统在 0x 点几乎是线性的,如果 F 在 0x 的 Jacobian 矩阵是非奇异的,即 0)(det 0 ≠xJ 。 设 )(xF 在 0=x 的某邻域内连续,并有直到二阶连续偏导数,则由多元函数的 Taylor 公式,可将 )(xF 展开成 )|(|)( 2xOAxxF += ,其中 ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ ∂ ∂ ∂ ∂ = n nn n x f x f x f x f A L MMM L 1 1 1 1 是一个常数矩阵,这样得到的线性系统 Axdt dx = (4) 称为系统(2)的线性近似。一开始,人们以为总可以用线性近似系统来代替所研究的 -169- 原系统。但后来人们发现,这种看法是不对的,或至少说是不全面的,非线性系统中的 许多性质,在它的线性近似中不再保留。即使象零解稳定性这样一个问题,也要在一定 条件下,才可用它的线性近似系统代替原系统来研究。关于这个问题,我们有下述定理: 定理 3 如果系统(4)的零解是渐近稳定的,或不稳定的,则原系统的零解也是 渐近稳定的或不稳定的。然而,如果系统(4)的零解是稳定的,则原系统的零解是不 定的,即此时不能从线性化的系统来导出原系统的稳定性。 系统(3)在其系数矩阵 ⎥⎦ ⎤ ⎢⎣ ⎡= dc baA 的行列式 0det ≠A 的条件下,可知 )0,0( 是 系统(3)的唯一的平衡点,它的稳定性由特征方程: 0)det( =− IA λ 的根 λ (特征根)决定。 定理 4 设线性系统(3)所对应的特征方程是 02 =++ qpλλ 其中 )( dap +−= , bcadq −= 。设 1λ 和 2λ 是它的根,则当 0≠q 时关于奇点 )0,0(O 有下述结论: (i) 021 << λλ ,O 是稳定结点; (ii) 021 <= λλ ,O 是稳定退化结点; (iii) 021 >> λλ ,O 是不稳定结点; (iv) 021 >= λλ ,O 是不稳定退化结点; (v) 21 0 λλ << ,O 是不稳定鞍点; (vi) 0,2,1 <±= αβαλ i ,O 是稳定焦点; (vii) 0,2,1 >±= αβαλ i ,O 是不稳定焦点; (viii) 0,2,1 =±= αβαλ i ,O 是不稳定中心。 定理 5 设非线性系统 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ ++= ++= ),( ),( yxbyaxdt dy yxbyaxdt dx ψ ϕ (5) 中的ϕ 和ψ 满足条件: (i)在点O 的某邻域内存在连续的一阶偏导数。 (ii)存在常数 0>δ ,使得 0),(lim),(lim 1010 == +→+→ δδ ψϕ r yx r yx rr ,( 22 yxr += ) 又设系统(5)的一次近似系统(3)的特征方程的根没有零实部,则(5)式与(3)式 的奇点O 的类型相同,并有相同的稳定性或不稳定性。 §2 再生资源的管理和开发 渔业资源是一种再生资源,再生资源要注意适度开发,不能为了一时的高产“竭泽 而渔”,应该在持续稳产的前提下追求最高产量或最优的经济效益。 -170- 这是一类可再生资源管理与开发的模型,这类模型的建立一般先考虑在没有收获的 情况下资源自然增长模型,然后再考虑收获策略对资源增长情况的影响。 2.1 资源增长模型 考虑某种鱼的种群的动态。在建立模型之前,做如下的基本假设: (i)鱼群的数量本身是离散变量,谈不到可微性。但是,由于突然增加或减少的 只是单一个体或少数几个个体,与全体数量相比,这种增长率是微小的。所以,可以近 似地假设鱼群的数量随时间连续地,甚至是可微地变化。 (ii)假设鱼群生活在一个稳定的环境中,即其增长率与时间无关。 (iii)种群的增长是种群个体死亡与繁殖共同作用的结果。 (iv)资源有限的生存环境对种群的繁衍,生长有抑制作用,而且这一作用与鱼群 的数量是成正比的。 记时刻t 渔场中鱼量为 )(tx ,我们可以得到 )(tx 所满足的 Logistic 模型: ⎪⎩ ⎪⎨ ⎧ = −= 0)0( )1()( Nx N xrxtx& (6) 其中 r 是固有增长率, N 是环境容许的最大鱼量。由分离变量法求得方程(6)解为 00 /)(1)( NNNe Ntx rt −+= − (6)式有两个平衡点,即 01 =x , Nx =2 ,其中 1x 是不稳定的, 2x 在正半轴内全局 稳定。 2.2 资源开发模型 建立一个在捕捞情况下渔场鱼量遵从的方程,分析鱼量稳定的条件,并且在稳定的 前提下,讨论如何控制捕捞使持续产量或经济效益达到最大。 设单位时间的捕捞量与渔场鱼量 )(tx 成正比,比例系数 k 表示单位时间捕捞率,k 可以进一步分解分解为 qEk = ,E 称为捕捞强度,用可以控制的参数如出海渔船数来 度量; q 称为捕捞系数,表示单位强度下的捕捞率。为方便取 1=q ,于是单位时间的 捕捞量为 )()( tExxh = 。 =)(xh 常数,表示一个特定的捕捞策略,即要求捕鱼者每天 只能捕捞一定的数量。这样,捕捞情况下渔场鱼量满足方程 ExN xrxtx −−= )1()(& (7) 这是一个一阶非线性方程,且是黎卡提型的。也称为 Scheafer 模型。 希望知道渔场的稳定鱼量和保持稳定的条件,即时间t 足够长以后渔场鱼量 )(tx 的 趋向,并且由此确定最大持续产量。在平衡点处有 0=dt dx ,方程(7)有两个平衡点 01 =x , )1(2 r ENx −= 。显然,它们均是方程的解。 在 rE < 的情况下, 2x 是一正平衡点。(7)式可改写为 )()( 2xxxtx −−=& (8) 易知,当 20 xx << 时, 0)( >tx& ; 2xx > 时, 0)( 时, 0)( σ 表示在消耗供养甲的资源中,乙的消耗多于甲,对 12 >σ 可作相应的理解。一 般来说, 21,σσ 之间没有确定的关系,在此我们仅讨论 21,σσ 相互独立的情形。 目的是研究两个种群相互竞争的结局,即 ∞→t 时, )(),( 21 txtx 的趋向,不必要 解方程组(9)和(10),只需对它的平衡点进行稳定性分析。为此我们解代数方程 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =−−= =−−= 0)1(),( 0)1(),( 2 2 1 1 22221 2 2 1 1 1 1121 N x N xxrxxg N x N xxrxxf σ σ (11) -173- 得到四个平衡点分别为 )0,( 11 NP , ),0( 22 NP , )1 )1(,1 )1(( 21 22 21 11 3 σσ σ σσ σ − − − − NNP , )0,0(4P 。 为分析这些点的稳定性,需使用相空间的技巧。首先找出在 21xx 平面上使 0)( >txi& 或 0)( −− N x N xxr σ 时 0)(1 >tx& ,但要 使 01 >x 和 0)(1 >tx& ,当且仅当 0,01 1 2 2 1 1 1 >>−− xN x N x σ 类似地 0)(1 <−− xN x N x σ 这样我们得到在 21xx 平面中,直线 01 2 2 1 1 1 =−−= N x N x σϕ (12) 把平面划分为 0)(1 >tx& 和 0)(1 tx& ,当且仅当 0,01 2 2 2 1 1 2 >>−− xN x N xσ (ii) 0)(2 <−− xN x N xσ (iii)直线 01 2 2 1 1 2 =−−= N x N xσφ (13) 将 21xx 平面划分为 0)(2 >tx& 和 0)(2 < σσ ,由图(b)知,两直线将平面 )0,0( 21 >> xx 划分为三个区 域: 0)(,0)(: 211 >> txtxS && (14) 0)(,0)(: 212 <> txtxS && (15) 0)(,0)(: 213 << txtxS && (16) 可以说明不论轨线从哪个区域出发, ∞→t 时都将趋向 )0,( 11 NP 。若轨线从 1S 出 发,由(14)式可知随着t 的增加轨线向右上方运动,必然进入 2S ;若轨线从 2S 出发, 由(15)式可知轨线向下方运动,那么它或者趋向 1P 点,或者进入 3S ,但进入 3S 是不 可能的。因为,如果设轨线在某时刻 1t 经直线(12)式进入 3S ,则 0)( 11 =tx& ,由式(9)、 -174- (10)不难看出。 )()()( 121 2 11 11 txtxN rtx &&& σ−= 由式(15)、(16)知 0)( 12 tx&& ,表明 )( 11 tx 在 1t 达到极小值,而这是不 可能的,因为在 2S 中 0)(1 >tx& ,即 )( 11 tx 一直是增加的。若轨线从 3S 出发,由(16) 式可知轨线向左下方运动,那么它或者趋向 1P 点,或者进入 2S ,而进入 2S 后,根据上 面的分析最终也将趋向 1P 。综合上述分析可以画出轨线示意图。因为直线(12)式上 01 =dx ,所以在(12)式上轨线方向垂直于 x 轴;在(13)式上 02 =dx ,轨线方向 平行于 1x 轴。 (ii) 1,1 21 <> σσ ,类似的分析可知 ),0(2 NP 稳定。 (iii) 1,1 21 << σσ , 3P 稳定。 (iv) 1,1 21 >> σσ , 3P 不稳定(鞍点)。 因为轨线的初始位置不同,其走向也不同或趋于 1P 或趋于 2P 。根据建模过程中 21,σσ 的含义,可以说明 321 ,, PPP 点稳定在生态学上的意义: ① 1,1 21 >< σσ : 11 <σ 意味着在对供养甲的资源的竞争中乙弱于甲, 12 >σ 意 味着在对供养乙的资源的竞争中甲强于乙,于是种群乙终将灭绝,种群甲趋向最大容量, 即 )(),( 21 txtx 趋向平衡点 )0,( 11 NP 。 ② 1,1 21 <> σσ :情况与①正好相反。 ③ 1,1 21 << σσ :因为在竞争甲的资源中乙较弱,而在竞争乙的资源中甲较弱, 于是可以达到一个双方共存的稳定的平衡状态 3P ,这是种群竞争中很少出现的情况。 ④ 1,1 21 >> σσ :留作习题。 §3 Volterra 模型 -175- 意大利生物学家 D'Ancona 曾致力于鱼类种群相互制约关系的研究,在研究过程中 他无意中发现了第一次世界大战期间地中海各港口捕获的几种鱼类占捕获总量百分比 的资料,从这些资料中他发现各种软骨掠肉鱼,如鲨鱼、鲢鱼等我们称之为捕食者的一 些不是很理想的鱼占总渔获量的百分比,在 1914~1923 年期间,意大利阜姆港收购的 捕食者所占的比例有明显的增加: 年代 1914 1915 1916 1917 1918 百分比 11.9 21.4 22.1 21.2 36.4 年代 1919 1920 1921 1922 1923 百分比 27.3 16.0 15.9 14.8 10.7 他知道,捕获的各种鱼的比例基本上代表了地中海渔场中各种鱼类的比例。战争中捕获 量大幅度下降,当然使渔场中食用鱼(食饵)增加,以此为生的鲨鱼也随之增加。但是 捕获量的下降为什么会使鲨鱼的比例增加,即对捕食者而不是对食饵有利呢?他无法解 释这个现象,于是求助于著名的意大利数学家 V. Volterra,希望建立一个食饵—捕食者 系统的数学模型,定量地回答这个问题。 3.l 形成模型 为建立这样的模型,我们分别用 )(1 tx 和 )(2 tx 记食饵和捕食者在时刻t 的数量。因 为大海中鱼类的资源丰富,可以假设如果食饵独立生存则食饵将以增长率 1r 按指数规律 增长,即有 )()( 111 txrtx =& 。捕食者的存在使食饵的增长率降低,设降低的程度与捕食 者数量成正比,于是 )(1 tx 满足方程 )()( 21111 xrxtx λ−=& (17) 比例系数反映捕食者掠取食饵的能力。 捕食者离开食饵无法生存,若设它独自存在时死亡率为 2r ,即 )()( 222 txrtx −=& , 而食饵为它提供食物的作用相当于使死亡率降低,或使之增长。设这个作用与食饵数量 成正比,于是 )(2 tx 满足 )()( 12222 xrxtx λ+−=& (18) 比例系数 2λ 反映食饵对捕食者的供养能力。 方程(17)和(18)是在没有人工捕获情况下自然环境中食饵与捕食者之间的制约 关系,是 Volterra 提出的最简单的模型。这个模型没有引入竞争项。 3.2 模型分析 这是一个非线性模型,不能求出其解析解,所以我们还是通过平衡点的稳定性分析, 研究 )(),( 21 txtx 的变化规律。容易得到方程(17)和(18)的平衡点为 )0,0(1P , ),( 1 1 2 2 2 λλ rrP (19) 当然,平衡解 )0,0(1P 对我们来说是没有意义的。这个方程组还有一族解 treCtx 1 11 )( = , 0)(2 =tx 和 0)(1 =tx , treCx 2 22 −= 。因此, 1x 轴和 2x 轴都是方程组 (17),(18)的轨线。这意味着:方程(17)、(18)在 0tt = 由第一象限 0,0 21 >> xx 出发的每一个解 )(),( 21 txtx 在以后一切时间 0tt ≥ 都保持在第一象限内。当 0, 21 >xx 时,方程(17)、(18)的轨线是一阶方程 -176- )( )( 1222 2111 2 1 xrx xrx dx dx λ λ +− −= 的解曲线。用分离变量方法解得 cexex xrxr =−− ))(( 211122 21 λλ (20) c 是任意常数。因此,方程(17),(18)的轨线是由式(20)定义的曲线族,我们来证 明这些曲线是封闭的。 引理 1 当 0, 21 >xx 时,方程(20)定义了一组封闭曲线。 证明 我们首先来确定当 0, 21 >xx 时函数 122 11 )( xr exx λϕ −= 和 211 22 )( xr exx λφ −= 的性状。利用微积分方法可以作出ϕ 和φ 的图形。如下图所示。 若它们的极大值分别记作 mϕ 和 mφ ,则不难确定 0 2 0 1 xx 、 满足 mx ϕϕ =)( 0 1 , 2 20 1 λ rx = (21) mx φφ =)( 0 2 , 1 10 2 λ rx = (22) 显然,仅当(20)式右端常数 mmc φϕ≤ 时相轨线才有定义。 当 mmc φϕ= 时, 0 11 xx = , 0 22 xx = ,将式(21)和(22)与(19)式比较可知 ),( 0 2 0 1 xx 正是平衡点 2P ,所以 2P 是相轨线的退化点。 为了考察 mmc φϕ< 时 )0( >c 轨线的形状,我们只需考虑 mc λφ= 的情况,其中 mϕλ <<0 。首先注意到:方程 λλ =− 122 1 xr ex 具有一个解 0 111 ' xxx <= 和另一个解 0 111 '' xxx >= 。因此,当 11 'xx < 或 11 ''xx > 时,方程 mxr xr exexx φλφ λ λ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛== − − 122 211 1 22 )( 没有解 2x 。当 11 'xx = 或 11 ''xx = 时,这个方程具有唯一的解 0 22 xx = ,而对于 111 ''' xxx << ,则具有两个解 )(' 12 xx 和 )('' 12 xx 。较小的解 )(' 12 xx 总是小于 0 2x ,较 大的解总是大于 0 2x 。当 1x 趋于 1'x 或 1''x 时, )(' 12 xx 和 )('' 12 xx 都趋向于 0 2x 。因此, -177- 当 1x 和 2x 是正数时,由(20)所定义的曲线都是封闭的。而且,这些封闭曲线中的每 一条(除 0 11 xx = 和 0 22 xx = 以外), 都不含(17)和(18)的任何平衡点。所以(17) 和(18)的具有初始条件 0)0(1 >x , 0)0(2 >x 的所有的解 )(1 tx , )(2 tx 都是时间的 周期函数。也就是说,(17)和(18)的具有初始条件 0)0(1 >x , 0)0(2 >x 的每一个 解 )(1 tx , )(2 tx 都具有这样的性质: )()( 11 txTtx =+ , )()( 22 txTtx =+ ,其中T 是某 一正数。 D'Ancona 所用的数据实际上是捕食者的百分比 在每一年中的平均值。因此,为了把这些数据同方程 组( 17)和( 18)的结果进行比较,对于(17)和( 18) 的任何解 )(1 tx , )(2 tx ,我们必须算出 )(1 tx 和 )(2 tx 的“平均值”。值得注意的是,即使还没有准确地求 得 )(1 tx 和 )(2 tx ,我们仍然能够算出这些平均值。 引理 2 设 )(1 tx , )(2 tx 是( 17)和( 18)的周期解,其周期 0>T , )(1 tx 和 )(2 tx 的平均值定义为 ∫= T dttxTx 0 11 )(1 , ∫= T dttxTx 0 22 )(1 这时, 0 11 xx = , 0 22 xx = 。换句话说, )(1 tx 和 )(2 tx 的平均值是平衡解。 证明 把(17)的两端除以 1x ,得到 211 1 1 )( xrx tx λ−=& ,于是 ∫∫ −= TT dttxrTdttx tx T 0 2110 1 1 )]([1 )( )(1 λ& 由于 ∫ =−=T xTxdttx tx 0 11 1 1 0)0(ln)(ln)( )(& 因此, ∫∫==TT rdtrTdttxT 0 10 121 1)(1 λ , 于是, 1 1 2 λ rx = 。类似地,把(18)的两端除以 )(2 tTx ,由 0 到T 积分,我们得到 2 2 1 λ rx = 。 下面,我们考虑渔业对于上述数学模型的影响。注意到渔业使得食饵总数以速率 1xε 减少,而使得捕食者的总数以速率 2xε 减少。常数ε 反映渔业的水平;即反映了海 上的渔船数和下水的网数。因此,真实的状态由下列修正的微分方程组来描述: ⎩ ⎨ ⎧ ++−=−+−= −−=−−= 21222212222 21111121111 )()()( )()()( xxxrxxrxtx xxxrxxrxtx λεελ λεελ & & (23) 这个方程组同(17),(18)完全一样(当 01 >−εr 时),只是其中 1r 换成 ε−1r ,而 2r 换成 ε+2r 。因此,现在 )(1 tx 和 )(2 tx 的平均值是 -178- 2 2 1 λ ε+= rx , 1 1 2 λ ε−= rx 平均说来,中等捕鱼量 )( 1r<ε 实际上会增加食饵的数目,而减少捕食者的数目。相反, 捕鱼量的降低,平均说来,会增加捕食者的数目,而减少食饵的数目。这个值得注意的 结果称为 Volterra 原理,它解释了 D'Ancona 的数据。 值得注意的是 Volterra 模型是非常粗糙的,有兴趣的读者可以作进一步的探讨。 习 题 十 四 1. 单棵树木的商品价值V 是由这棵树能够生产的木材体积和质量所决定的。显然 )(tVV = 依赖于树木的年龄 t 。假设曲线 )(tV 已知, c 为树木砍伐成本。试给出砍伐 树木(更确切地说砍伐相同年龄的树木)的最优年龄。如果考虑到森林轮种问题,即一 旦树木从某一处砍掉,这块土地便可以种植新树,假定各轮种周期具有相等的长度,试 建模讨论最优砍伐轮种的森林管理策略的问题。 2. 如果两个种群都能独立生存,共处时又能相互提供食物,试建立种群依存模型 并讨论平衡点及稳定性,解释稳定的意义。 3. 如果两个种群都不能独立生存,但共处时可以相互提供食物,试建模以讨论共 处的可能性。 4. 如果在食饵—捕食者系统中,捕食者掠夺的对象只是成年的食饵,而未成年的 食饵因体积太小免遭捕获。在适当的假设下建立这三者之间关系的模型,求平衡点。 -179- 第十五章 常微分方程的解法 建立微分方程只是解决问题的第一步,通常需要求出方程的解来说明实际现象,并 加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线 性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以肯定得到这样的解, 而绝大多数变系数方程、非线性方程都是所谓“解不出来”的,即使看起来非常简单的 方程如 22 xydx dy += ,于是对于用微分方程解决实际问题来说,数值解法就是一个十 分重要的手段。 §1 常微分方程的离散化 下面主要讨论一阶常微分方程的初值问题,其一般形式是 ⎪⎩ ⎪⎨ ⎧ = ≤≤= 0)( ),( yay bxayxfdx dy (1) 在下面的讨论中,我们总假定函数 ),( yxf 连续,且关于 y 满足李普希兹(Lipschitz)条 件,即存在常数 L ,使得 |||),(),(| yyLyxfyxf −≤− 这样,由常微分方程理论知,初值问题(1)的解必定存在唯一。 所谓数值解法,就是求问题(1)的解 )(xy 在若干点 bxxxxa N =<<<<= L210 处的近似值 ),,2,1( Nnyn L= 的方法, ),,2,1( Nnyn L= 称为问题(1)的数值解, nnn xxh −= +1 称为由 nx 到 1+nx 的步长。今后如无特别说明,我们总取步长为常量 h 。 建立数值解法,首先要将微分方程离散化,一般采用以下几种方法: (i)用差商近似导数 若用向前差商 h xyxy nn )()( 1 −+ 代替 )(' nxy 代入(1)中的微分方程,则得 ),1,0())(,()()( 1 L=≈−+ nxyxfh xyxy nn nn 化简得 ))(,()()( 1 nnnn xyxhfxyxy +≈+ 如果用 )( nxy 的近似值 ny 代入上式右端,所得结果作为 )( 1+nxy 的近似值,记为 1+ny , 则有 ),1,0(),(1 L=+=+ nyxhfyy nnnn (2) 这样,问题(1)的近似解可通过求解下述问题 ⎩ ⎨ ⎧ = =+=+ )( ),1,0(),( 0 1 ayy nyxhfyy nnnn L (3) 得到,按式(3)由初值 0y 可逐次算出 L,, 21 yy 。式(3)是个离散化的问题,称为差 分方程初值问题。 -180- 需要说明的是,用不同的差商近似导数,将得到不同的计算公式。 (ii)用数值积分方法 将问题(1)的解表成积分形式,用数值积分方法离散化。例如,对微分方程两端 积分,得 ∫ + ==−+ 1 ),1,0())(,()()( 1 n n x xnn ndxxyxfxyxy L (4) 右边的积分用矩形公式或梯形公式计算。 (iii)Taylor 多项式近似 将函数 )(xy 在 nx 处展开,取一次 Taylor 多项式近似,则得 ))(,()()(')()( 1 nnnnnn xyxhfxyxhyxyxy +=+≈+ 再将 )( nxy 的近似值 ny 代入上式右端,所得结果作为 )( 1+nxy 的近似值 1+ny ,得到离 散化的计算公式 ),(1 nnnn yxhfyy +=+ 以上三种方法都是将微分方程离散化的常用方法,每一类方法又可导出不同形式的 计算公式。其中的 Taylor 展开法,不仅可以得到求数值解的公式,而且容易估计截断 误差。 §2 欧拉(Euler)方法 2.1 Euler 方法 Euler 方法就是用差分方程初值问题(3)的解来近似微分方程初值问题(1)的解, 即由公式(3)依次算出 )( nxy 的近似值 ),2,1( L=nyn 。这组公式求问题(1)的数值 解称为向前 Euler 公式。 如果在微分方程离散化时,用向后差商代替导数,即 h xyxyxy nn n )()()(' 1 1 −≈ + + , 则得计算公式 ⎩ ⎨ ⎧ = =+= +++ )( ),1,0(),( 0 111 ayy nyxhfyy nnnn L (5) 用这组公式求问题(1)的数值解称为向后 Euler 公式。 向后 Euler 法与 Euler 法形式上相似,但实际计算时却复杂得多。向前 Euler 公式 是显式的,可直接求解。向后 Euler 公式的右端含有 1+ny ,因此是隐式公式,一般要用 迭代法求解,迭代公式通常为 ⎪⎩ ⎪⎨ ⎧ =+= += ++ + + + ),2,1,0(),( ),( )( 11 )1( 1 )0( 1 Lkyxhfyy yxhfyy k nnn k n nnnn (6) 2.2 Euler 方法的误差估计 对于向前 Euler 公式(3)我们看到,当 L,2,1=n 时公式右端的 ny 都是近似的, 所以用它计算的 1+ny 会有累积误差,分析累积误差比较复杂,这里先讨论比较简单的 所谓局部截断误差。 假定用(3)式时右端的 ny 没有误差,即 )( nn xyy = ,那么由此算出 ))(,()(1 nnnn xyxhfxyy +=+ (7) -181- 局部截断误差指的是,按(7)式计算由 nx 到 1+nx 这一步的计算值 1+ny 与精确值 )( 1+nxy 之差 11 )( ++ − nn yxy 。为了估计它,由 Taylor 展开得到的精确值 )( 1+nxy 是 )()(''2)(')()( 3 2 1 hOxyhxhyxyxy nnnn +++=+ (8) (7)、(8)两式相减(注意到 ),(' yxfy = )得 )()()(''2)( 23 2 11 hOhOxyhyxy nnn ≈+=− ++ (9) 即局部截断误差是 2h 阶的,而数值算法的精度定义为: 若一种算法的局部截断误差为 )( 1+phO ,则称该算法具有 p 阶精度。 显然 p 越大,方法的精度越高。式(9)说明,向前 Euler 方法是一阶方法,因此 它的精度不高。 §3 改进的 Euler 方法 3.1 梯形公式 利用数值积分方法将微分方程离散化时,若用梯形公式计算式(4)中之右端积分, 即 ))](,())(,([2))(,( 11 1 +++≈∫ + nnnn x x xyxfxyxfhdxxyxfn n 并用 1, +nn yy 代替 )(),( 1+nn xyxy ,则得计算公式 )],(),([2 111 +++ ++= nnnnnn yxfyxfhyy 这就是求解初值问题(1)的梯形公式。 直观上容易看出,用梯形公式计算数值积分要比矩形公式好。梯形公式为二阶方法。 梯形公式也是隐式格式,一般需用迭代法求解,迭代公式为 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ = ++= += ++ + + + ),2,1,0( )],(),([2 ),( )( 11 )1( 1 )0( 1 Lk yxfyxfhyy yxhfyy k nnnnn k n nnnn (10) 由于函数 ),( yxf 关于 y 满足 Lipschitz 条件,容易看出 ||2|| )1( 1 )( 1 )( 1 )1( 1 − +++ + + −≤− k n k n k n k n yyhLyy 其中 L 为 Lipschitz 常数。因此,当 120 << hL 时,迭代收敛。但这样做计算量较大。 如果实际计算时精度要求不太高,用公式(10)求解时,每步可以只迭代一次,由此导 出一种新的方法—改进 Euler 法。 3.2 改进 Euler 法 按式(5)计算问题(1)的数值解时,如果每步只迭代一次,相当于将 Euler 公式 与梯形公式结合使用:先用 Euler 公式求 1+ny 的一个初步近似值 1+ny ,称为预测值,然 后用梯形公式校正求得近似值 1+ny ,即 -182- ⎪⎩ ⎪⎨ ⎧ ++= += +++ + 校正 预测 ] ),(),([2 ),( 111 1 nnnnnn nnnn yxfyxfhyy yxhfyy (11) 式(11)称为由 Euler 公式和梯形公式得到的预测—校正系统,也叫改进 Euler 法。 为便于编制程序上机,式(11)常改写成 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ += ++= += + )(2 1 ),( ),( 1 qpn pnnq nnnp yyy yhxhfyy yxhfyy (12) 改进 Euler 法是二阶方法。 §4 龙格—库塔(Runge—Kutta)方法 回到 Euler 方法的基本思想—用差商代替导数—上来。实际上,按照微分中值定理 应有 10),(')()( 1 <<+=−+ θθhxyh xyxy n nn 注意到方程 ),(' yxfy = 就有 ))(,()()( 1 hxyhxhfxyxy nnnn θθ +++=+ (13) 不妨记 ))(,( hxyhxfK nn θθ ++= ,称为区间 ],[ 1+nn xx 上的平均斜率。可见给出一种 斜率 K ,(13)式就对应地导出一种算法。 向前 Euler 公式简单地取 ),( nn yxf 为 K ,精度自然很低。改进的 Euler 公式可理 解为 K 取 ),( nn yxf , ),( 11 ++ nn yxf 的平均值,其中 ),(1 nnnn yxhfyy +=+ ,这种处 理提高了精度。 如上分析启示我们,在区间 ],[ 1+nn xx 内多取几个点,将它们的斜率加权平均作为 K ,就有可能构造出精度更高的计算公式。这就是龙格—库塔方法的基本思想。 4.1 首先不妨在区间 ],[ 1+nn xx 内仍取 2 个点,仿照(13)式用以下形式试一下 ⎪⎩ ⎪⎨ ⎧ <<++= = ++=+ 1,0),,( ),( )( 12 1 22111 βαβα λλ hkyhxfk yxfk kkhyy nn nn nn (14) 其中 βαλλ ,,, 21 为待定系数,看看如何确定它们使(14)式的精度尽量高。为此我们 分析局部截断误差 11 )( ++ − nn yxy ,因为 )( nn xyy = ,所以(14)可以化为 -183- ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ ++ += ++= == ++=+ )())(,( ))(,())(,( ))(,( )('))(,( )()( 2 1 12 1 22111 hOxyxfhk xyxhfxyxf hkxyhxfk xyxyxfk kkhxyy nny nnxnn nn nnn nn β α βα λλ (15) 其中 2k 在点 ))(,( nn xyx 作了 Taylor 展开。(15)式又可表为 )()()(')()( 32 2211 hOfffhxhyxyy yxnnn +++++=+ α βαλλλ 注意到 )()(''2)(')()( 3 2 1 hOxyhxhyxyxy nnnn +++=+ 中 fy =' , yx fffy +='' ,可见为使误差 )()( 3 11 hOyxy nn =− ++ ,只须令 121 =+ λλ , 2 1 2 =αλ , 1=α β (16) 待定系数满足(16)的(15)式称为 2 阶龙格—库塔公式。由于(16)式有 4 个未知数 而只有 3 个方程,所以解不唯一。不难发现,若令 2 1 21 == λλ , 1== βα ,即为改 进的 Euler 公式。可以证明,在 ],[ 1+nn xx 内只取 2 点的龙格—库塔公式精度最高为 2 阶。 4.2 4 阶龙格—库塔公式 要进一步提高精度,必须取更多的点,如取 4 点构造如下形式的公式: ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ ++++= +++= ++= = ++++=+ ),( ),( ),( ),( )( 36251434 231223 1112 1 443322111 hkhkhkyhxfk hkhkyhxfk hkyhxfk yxfk kkkkhyy nn nn nn nn nn βββα ββα βα λλλλ (17) 其中待定系数 iii βαλ ,, 共 13 个,经过与推导 2 阶龙格—库塔公式类似、但更复杂的计 算,得到使局部误差 )()( 5 11 hOyxy nn =− ++ 的 11 个方程。取既满足这些方程、又较简 单的一组 iii βαλ ,, ,可得 -184- ⎪⎪ ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎪ ⎨ ⎧ ++= ++= ++= = +++=+ ),( )2,2( )2,2( ),( )22(6 34 2 3 1 2 1 43211 hkyhxfk hkyhxfk hkyhxfk yxfk kkkkhy nn nn nn nn n (18) 这就是常用的 4 阶龙格—库塔方法(简称 RK 方法)。 §5 线性多步法 以上所介绍的各种数值解法都是单步法,这是因为它们在计算 1+ny 时,都只用到 前一步的值 ny ,单步法的一般形式是 )1,,1,0(),,(1 −=+=+ Nnhyxhyy nnnn Lϕ (19) 其中 ),,( hyxϕ 称为增量函数,例如 Euler 方法的增量函数为 ),( yxf ,改进 Euler 法的 增量函数为 ))],(,(),([2 1),,( yxhfyhxfyxfhyx +++=ϕ 如何通过较多地利用前面的已知信息,如 rnnn yyy −− ,,, 1 L ,来构造高精度的算法 计算 1+ny ,这就是多步法的基本思想。经常使用的是线性多步法。 让我们试验一下 1=r ,即利用 1, −nn yy 计算 1+ny 的情况。 从用数值积分方法离散化方程的(4)式 ∫ +=−+ 1 ))(,()()( 1 n n x xnn dxxyxfxyxy 出发,记 nnn fyxf =),( , 111 ),( −−− = nnn fyxf ,式中被积函数 ))(,( xyxf 用二节点 ),( 11 −− nn fx , ),( nn fx 的插值公式得到(因 )nxx ≥ ,所以是外插。 ])()[(1 ))(,( 11 1 1 1 1 −− − − − − −−−= − −+− −= nnnn nn n n nn n n fxxfxxh xx xxfxx xxfxyxf (20) 此式在区间 ],[ 1+nn xx 上积分可得 122 3))(,(1 −−=∫ + nn x x fhfhdxxyxfn n 于是得到 )3(2 11 −+ −+= nnnn ffhyy (21) 注意到插值公式(20)的误差项含因子 ))(( 1 nn xxxx −− − ,在区间 ],[ 1+nn xx 上积分后 -185- 得出 3h ,故公式(21)的局部截断误差为 )( 3hO ,精度比向前 Euler 公式提高 1 阶。 若取 L,3,2=r 可以用类似的方法推导公式,如对于 3=r 有 )9375955(24 3211 −−−+ −+−+= nnnnnn ffffhyy (22) 其局部截断误差为 )( 5hO 。 如果将上面代替被积函数 ))(,( xyxf 用的插值公式由外插改为内插,可进一步减 小误差。内插法用的是 11 ,,, +−+ rnnn yyy L ,取 1=r 时得到的是梯形公式,取 3=r 时 可得 )5199(24 2111 −−++ +−++= nnnnnn ffffhyy (23) 与(22)式相比,虽然其局部截断误差仍为 )( 5hO ,但因它的各项系数(绝对值)大 为减小,误差还是小了。当然,(23)式右端的 1+nf 未知,需要如同向后 Euler 公式一 样,用迭代或校正的办法处理。 §6 一阶微分方程组与高阶微分方程的数值解法 6.1 一阶微分方程组的数值解法 设有一阶微分方程组的初值问题 ⎩ ⎨ ⎧ = = 0 21 )( ),,,,(' ii mii yay yyyxfy L ),,2,1( mi L= (24) 若记 T myyyy ),,,( 21 L= , T myyyy ),,,( 020100 L= , T mffff ),,,( 21 L= ,则初值 问题(24)可写成如下向量形式 ⎩ ⎨ ⎧ = = 0)( ),(' yay yxfy (25) 如果向量函数 ),( yxf 在区域 D : mRybxa ∈≤≤ , 连续,且关于 y 满足 Lipschitz 条件,即存在 0>L ,使得对 ],[ bax ∈∀ , mRyy ∈21, , 都有 2121 ),(),( yyLyxfyxf −≤− 那么问题(25)在 ],[ ba 上存在唯一解 )(xyy = 。 问题(25)与(1)形式上完全相同,故对初值问题(1)所建立的各种数值解法可 全部用于求解问题(25)。 6.2 高阶微分方程的数值解法 高阶微分方程的初值问题可以通过变量代换化为一阶微分方程组初值问题。 设有 m 阶常微分方程初值问题 ⎩ ⎨ ⎧ === ≤≤= −− − )1( 0 )1()1( 00 )1()( )(,,)(',)( ),,',,( mm mm yayyayyay bxayyyxfy L L (26) 引入新变量 )1( 21 ,,', −=== m m yyyyyy L ,问题(26)就化为一阶微分方程初值问题 -186- ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ == == == == − − −− )1( 01 )2( 011 )1( 0232 0121 )( ),,,(' )( ' )( ' )( ' m mmm m mmm yayyyxfy yayyy yayyy yayyy L MM (27) 然后用 6.1 中的数值方法求解问题(27),就可以得到问题(26)的数值解。 最后需要指出的是,在化学工程及自动控制等领域中,所涉及的常微分方程组初值 问题常常是所谓的“刚性”问题。具体地说,对一阶线性微分方程组 )(xAydx dy Φ+= (28) 其中 ARy m ,, ∈Φ 为 m 阶方阵。若矩阵 A 的特征值 ),,2,1( mii L=λ 满足关系 ),,2,1(0Re mii L=<λ |Re|min|Re|max 11 imiimi λλ ≤≤≤≤ >> 则称方程组(28)为刚性方程组或 Stiff 方程组,称数 |Re|min/|Re|max 11 imiimi s λλ ≤≤≤≤ = 为刚性比。对刚性方程组,用前面所介绍的方法求解,都会遇到本质上的困难,这是由 数值方法本身的稳定性限制所决定的。理论上的分析表明,求解刚性问题所选用的数值 方法最好是对步长 h 不作任何限制。 §7 Matlab 解法 7.1 Matlab 数值解 7.1.1 非刚性常微分方程的解法 Matlab 的工具箱提供了几个解非刚性常微分方程的功能函数,如 ode45,ode23, ode113,其中 ode45 采用四五阶 RK 方法,是解非刚性常微分方程的首选方法,ode23 采用二三阶 RK 方法,ode113 采用的是多步法,效率一般比 ode45 高。 Matlab 的工具箱中没有 Euler 方法的功能函数。 (I)对简单的一阶方程的初值问题 ⎩ ⎨ ⎧ = = 00 )( ),(' yxy yxfy 改进的 Euler 公式为 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ += ++= += + )(2 1 ),( ),( 1 qpn pnnq nnnp yyy yhxhfyy yxhfyy 我们自己编写改进的 Euler 方法函数 eulerpro.m 如下: function [x,y]=eulerpro(fun,x0,xfinal,y0,n); if nargin<5,n=50;end -187- h=(xfinal-x0)/n; x(1)=x0;y(1)=y0; for i=1:n x(i+1)=x(i)+h; y1=y(i)+h*feval(fun,x(i),y(i)); y2=y(i)+h*feval(fun,x(i+1),y1); y(i+1)=(y1+y2)/2; end 例1 用改进的Euler方法求解 xxyy 222' 2 ++−= , )5.00( ≤≤ x , 1)0( =y 解 编写函数文件 doty.m 如下: function f=doty(x,y); f=-2*y+2*x^2+2*x; 在Matlab命令窗口输入: [x,y]=eulerpro('doty',0,0.5,1,10) 即可求得数值解。 (II)ode23,ode45,ode113的使用 Matlab的函数形式是 [t,y]=solver('F',tspan,y0) 这里solver为ode45,ode23,ode113,输入参数 F 是用M文件定义的微分方程 ),(' yxfy = 右端的函数。tspan=[t0,tfinal]是求解区间,y0是初值。 例2 用RK方法求解 xxyy 222' 2 ++−= , )5.00( ≤≤ x , 1)0( =y 解 同样地编写函数文件 doty.m 如下: function f=doty(x,y); f=-2*y+2*x^2+2*x; 在Matlab命令窗口输入: [x,y]=ode45('doty',0,0.5,1) 即可求得数值解。 7.1.2 刚性常微分方程的解法 Matlab的工具箱提供了几个解刚性常微分方程的功能函数,如ode15s,ode23s, ode23t,ode23tb,这些函数的使用同上述非刚性微分方程的功能函数。 7.1.3 高阶微分方程 ),,',,( )1()( −= nn yyytfy L 解法 例 3 考虑初值问题 1)0(''1)0('0)0(0'''3''' −====−− yyyyyyy 解 (i)如果设 '',', 321 yyyyyy === ,那么 ⎪⎩ ⎪⎨ ⎧ −=+= == == 1)0( 3' 1)0( ' 0)0( ' 31233 232 121 yyyyy yyy yyy 初值问题可以写成 0)0(),,(' YYYtFY == 的形式,其中 ];;[ 321 yyyY = 。 (ii)把一阶方程组写成接受两个参数t 和 y ,返回一个列向量的 M 文件 F.m: function dy=F(t,y); -188- dy=[y(2);y(3);3*y(3)+y(2)*y(1)]; 注意:尽管不一定用到参数t 和 y ,M—文件必须接受此两参数。这里向量 dy 必须是列 向量。 (iii)用 Matlab 解决此问题的函数形式为 [T,Y]=solver('F',tspan,y0) 这里 solver 为 ode45、ode23、ode113,输入参数 F 是用 M 文件定义的常微分方程组, tspan=[t0 tfinal]是求解区间,y0 是初值列向量。在 Matlab 命令窗口输入 [T,Y]=ode45('F',[0 1],[0;1;-1]) 就得到上述常微分方程的数值解。这里Y 和时刻 T 是一一对应的,Y(:,1)是初值问题的 解,Y(:,2)是解的导数,Y(:,3)是解的二阶导数。 例 4 求 van der Pol 方程 0')1('' 2 =+−− yyyy μ 的数值解,这里 0>μ 是一参数。 解 (i)化成常微分方程组。设 ', 21 yyyy == ,则有 ⎩ ⎨ ⎧ −−= = 12 2 12 21 )1(' ' yyyy yy μ (ii)书写 M 文件(对于 1=μ )vdp1.m: function dy=vdp1(t,y); dy=[y(2);(1-y(1)^2)*y(2)-y(1)]; (iii)调用 Matlab 函数。对于初值 0)0(',2)0( == yy ,解为 [T,Y]=ode45('vdp1',[0 20],[2;0]); (iv)观察结果。利用图形输出解的结果: plot(T,Y(:,1),'-',T,Y(:,2),'--') title('Solution of van der Pol Equation,mu=1'); xlabel('time t'); ylabel('solution y'); legend('y1','y2'); 0 2 4 6 8 10 12 14 16 18 20 -3 -2 -1 0 1 2 3 Solution of van der Pol Equation,mu=1 time t solution y y1 y2 例 5 van der Pol 方程, 1000=μ (刚性) 解 (i)书写 M 文件 vdp1000.m: -189- function dy=vdp1000(t,y); dy=[y(2);1000*(1-y(1)^2)*y(2)-y(1)]; (ii)观察结果 [t,y]=ode15s('vdp1000',[0 3000],[2;0]); plot(t,y(:,1),'o') title('Solution of van der Pol Equation,mu=1000'); xlabel('time t'); ylabel('solution y(:,1)'); 7.2 常微分方程的解析解 在 Matlab 中,符号运算工具箱提供了功能强大的求解常微分方程的符号运算命令 dsolve。常微分方程在 Matlab 中按如下规定重新表达: 符号 D 表示对变量的求导。Dy 表示对变量 y 求一阶导数,当需要求变量的 n 阶导 数时,用 Dn 表示,D4y 表示对变量 y 求 4 阶导数。 由此,常微分方程 yyy =+ '2'' 在 Matlab 中,将写成'D2y+2*Dy=y'。 7.2.1 求解常微分方程的通解 无初边值条件的常微分方程的解就是该方程的通解。其使用格式为: dsolve('diff_equation') dsolve(' diff_equation','var') 式中 diff_equation 为待解的常微分方程,第 1 种格式将以变量 t 为自变量进行求解, 第 2 种格式则需定义自变量 var。 例 6 试解常微分方程 0')2(2 =−++ yyxyx 解 编写程序如下: syms x y diff_equ='x^2+y+(x-2*y)*Dy=0'; dsolve(diff_equ,'x') 7.2.2 求解常微分方程的初边值问题 求解带有初边值条件的常微分方程的使用格式为: dsolve('diff_equation','condition1,condition2,…','var') 其中 condition1,condition2,… 即为微分方程的初边值条件。 例 7 试求微分方程 xyy =− ''''' , 4)2('',7)1(',8)1( === yyy 的解。 解 编写程序如下: y=dsolve('D3y-D2y=x','y(1)=8,Dy(1)=7,D2y(2)=4','x') 7.2.3 求解常微分方程组 求解常微分方程组的命令格式为: dsolve('diff_equ1,diff_equ2,…','var') dsolve('diff_equ1,diff_equ2,…','condition1,condition2,…','var') 第 1 种格式用于求解方程组的通解,第 2 种格式可以加上初边值条件,用于具体求解。 例 8 试求常微分方程组: ⎩ ⎨ ⎧ =+ =+ xfg xgf cos'' sin3'' -190- 的通解和在初边值条件为 1)5(,3)3(,0)2(' === gff 的解。 解 编写程序如下: clc,clear equ1='D2f+3*g=sin(x)'; equ2='Dg+Df=cos(x)'; [general_f,general_g]=dsolve(equ1,equ2,'x') [f,g]=dsolve(equ1,equ2,'Df(2)=0,f(3)=3,g(5)=1','x') 7.2.4 求解线性常微分方程组 (i)一阶齐次线性微分方程组 AXX =' , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = nx x X M 1 , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = nnn n aa aa A L MMM L 1 111 这里的’表示对t 求导数。 Ate 是它的基解矩阵。 AXX =' , 00 )( XtX = 的解为 0 )( 0)( XetX ttA −= 。 例 9 试解初值问题 XX ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ −= 200 120 312 ' , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 2 1 )0(X 解 编写程序如下: syms t a=[2,1,3;0,2,-1;0,0,2]; x0=[1;2;1]; x=expm(a*t)*x0 (ii)非齐次线性方程组 由参数变易法可求得初值问题 )(' tfAXX += , 00 )( XtX = 的解为 ∫ −− += t t stAttA dssfeXetX 0 0 )()( )( 0 )( . 例 10 试解初值问题 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ + ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ −= te XX t 2cos 0 0 123 212 001 ' , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 1 0 )0(X 。 解 编写程序如下: clc,clear syms t s a=[1,0,0;2,1,-2;3,2,1];ft=[0;0;exp(t)*cos(2*t)]; x0=[0;1;1]; x=expm(a*t)*x0+int(expm(a*(t-s))*subs(ft,s),s,0,t); x=simple(x) -191- 习 题 十 五 1. 用欧拉方法和龙格—库塔方法求微分方程数值解,画出解的图形,对结果进行 分析比较。 (i) π ππ 2 2',22,0)(''' 222 −=⎟⎠ ⎞⎜⎝ ⎛=⎟⎠ ⎞⎜⎝ ⎛=−++ yyynxxyyx (Bessel 方程,令 )2 1=n ,精确解 xxy π2sin= 。 (ii) 0)0(',1)0(,0cos'' ===+ yyxyy ,幂级数解 L−+−+−= 8642 !8 55 !6 9 !4 2 !2 11 xxxxy 2. 一只小船渡过宽为 d 的河流,目标是起点 A 正对着的另一岸 B 点。已知河水 流速 1v 与船在静水中的速度 2v 之比为 k 。 (i)建立小船航线的方程,求其解析解。 (ii)设 100=d m, 11 =v m/s, 22 =v m/s,用数值解法求渡河所需时间、任 意时刻小船的位置及航行曲线,作图,并与解析解比较。 -192- 第十六章 差分方程模型 离散状态转移模型涉及的范围很广,可以用到各种不同的数学工具。下面我们对差 分方程作一简单的介绍,下一章我们将介绍马氏链模型。 §1 差分方程 1.1 差分方程简介 规定t 只取非负整数。记 ty 为变量 y 在t 点的取值,则称 ttt yyy −=Δ +1 为 ty 的一 阶向前差分,简称差分,称 ttttttt yyyyyyy +−=Δ−Δ=ΔΔ=Δ +++ 121 2 2)( 为 ty 的二 阶差分。类似地,可以定义 ty 的 n 阶差分 t n yΔ 。 由 tyt、 及 ty 的差分给出的方程称为 ty 的差分方程,其中含 ty 的最高阶差分的阶 数称为该差分方程的阶。差分方程也可以写成不显含差分的形式。例如,二阶差分方程 02 =+Δ+Δ ttt yyy 也可改写成 012 =+− ++ ttt yyy 。 满足一差分方程的序列 ty 称为差分方程的解。类似于微分方程情况,若解中含有 的独立常数的个数等于差分方程的阶数时,称此解为该差分方程的通解。若解中不含任 意常数,则称此解为满足某些初值条件的特解。 称如下形式的差分方程 )(110 tbyayaya tntntn =+++ −++ L (1) 为 n 阶常系数线性差分方程,其中 naaa ,,, 10 L 是常数, 00 ≠a 。其对应的齐次方程为 0110 =+++ −++ tntntn yayaya L (2) 容易证明,若序列 )1( ty 与 )2( ty 均为(2)的解,则 )2( 2 )1( 1 ttt ycycy += 也是方程(2)的 解,其中 21,cc 为任意常数。若 )1( ty 是方程(2)的解, )2( ty 是方程(1)的解,则 )2()1( ttt yyy += 也是方程(1)的解。 方程(1)可用如下的代数方法求其通解: (I)先求解对应的特征方程 00 1 10 =+++ − aaa nn Lλλ (3) (II)根据特征根的不同情况,求齐次方程(2)的通解。 (i)若特征方程(3)有 n 个互不相同的实根 nλλ ,,1 L ,则齐次方程(2)的通解 为 t nn t cc λλ ++L11 ( ncc ,,1 L 为任意常数) (ii)若 λ 是特征方程(3)的 k 重根,通解中对应于 λ 的项为 tk k tcc λ)( 1 1 −++L , ),,1( kici L= 为任意常数。 ( iii)若特征方程(3 )有单重复根 iβαλ ±= ,通解中对应它们的项为 tctc tt ϕρϕρ sincos 21 + ,其中 22 βαρ += 为 λ 的模, α βϕ arctg= 为 λ 的幅角。 (iv)若 iβαλ ±= 是特征方程(3)的 k 重复根,则通解对应于它们的项为 ttccttcc tk kk tk k ϕρϕρ sin)(cos)( 1 21 1 1 − + − +++++ LL -193- )2,,1( kici L= 为任意常数。 (III)求非齐次方程(1)的一个特解 ty 。若 ty 为方程(2)的通解,则非齐次方 程(1)的通解为 tt yy + 。 求非齐次方程(1)的特解一般要用到常数变易法,计算较繁。对特殊形式的 )(tb 也可使用待定系数法。例如,当 )()( tpbtb k t= , )(tpk 为t 的 k 次多项式时可以证明: 若 b 不是特征根,则非齐次方程(1)有形如 )(tqb k t 的特解, )(tqk 也是 t 的 k 次多项 式;若b 是 r 重特征根,则方程(1)有形如 )(tqtb k rt 的特解。进而可利用待定系数法 求出 )(tqk ,从而得到方程(1)的一个特解 ty 。 例 1 求解两阶差分方程 tyy tt =++2 。 解 对应齐次方程的特征方程为 012 =+λ ,其特征根为 i±=2,1λ ,对应齐次方程 的通解为 tctcyt 2sin2cos 21 ππ += 原方程有形如 bat + 的特解。代入原方程求得 2 1=a , 2 1−=b ,故原方程的通解 为 2 1 2 1 2sin2cos 21 −++ ttctc ππ 例 2 在信道上传输仅用三个字母 cba ,, 且长度为 n 的词,规定有两个 a 连续出现 的词不能传输,试确定这个信道容许传输的词的个数。 解 令 )(nh 表示容许传输且长度为 n 的词的个数, L,2,1=n ,通过简单计算可 求得: 3)1( =h , 8)2( =h 。当 3≥n 时,若词的第一个字母是b 或 ,c 则词可按 )1( −nh 种方式完成;若词的第一个字母是 a ,则第二个字母是b 或 c ,该词剩下的部分可按 )2( −nh 种方式完成。于是,得差分方程 )2(2)1(2)( −+−= nhnhnh , ),4,3( L=n 其特征方程为 0222 =−− λλ 特征根 311 +=λ , 312 −=λ 则通解为 nn ccnh )31()31()( 21 −++= , ),4,3( L=n 利用条件 3)1( =h , 8)2( =h ,求得 nnnh )31( 32 32)31( 32 32)( −+−+++= , ),2,1( L=n 在应用差分方程研究问题时,我们常常需要讨论解的稳定性。对常系数非齐次线性 差分方程(1),若不论其对应齐次方程的通解中任意常数 ncc ,,1 L 如何取值,在 +∞→t 时总有 0→ty ,则称方程(1)的解是稳定的。根据通解的结构不难看出,非齐次方 -194- 程(1)稳定的充要条件为其所有特征根的模均小于 1。 1.2 常系数线性差分方程的 Z 变换解法 常系数线性差分方程采用解析解法比较容易,而且对其解的意义也容易理解,但采 用这种解法求解常系数线性非齐次差分方程比较繁琐,通常是采用 Z 变换,将差分方 程变换为代数方程去求解。 设有离散序列 )(kx , ),2,1,0( L=k ,则 )(kx 的 Z 变换定义为 ∑ ∞ = −== 0 )()]([)( k kzkxkxZzX (4) 其中 z 是复变量。显然上式右端的级数收敛域是某个圆的外部。 )(zX 的 Z 反变换记作 )]([)( 1 zXZkx −= 1.2.1 几个常用离散函数的 Z 变换 (i)单位冲激函数 )(kδ 的 Z 变换 ∑ ∞ = = −− =×== 0 0 1]1[)()]([ k k kk zzkkZ δδ 即单位冲激函数的 Z 变换为 1。 (ii)单位阶跃函数 )(kU 的 Z 变换 ∑∑ ∞ = ∞ = −− ×== 00 1)()]([ kk kk zzkUkUZ , 即 )1|(|1)]([ >−= zz zkUZ (iii)单边指数函数 kakf =)( 的 Z 变换( a 为不等于 1 的正常数) ∑ ∞ = − >−== 0 )|(|][ k kkk azaz zzaaZ 1.2.2 Z 变换的性质 (i)线性性质 设 )()]([ 11 zFkfZ = , )()]([ 22 zFkfZ = ,则 )()()]()([ 2121 zbFzaFkbfkafZ +=+ 其中 ba, 为常数。收敛域为 )(1 zF 和 )(2 zF 的公共区域。 (ii)平移性 设 )()]([ zFkfZ = ,则 )]0()([)]1([ fzFzkfZ −=+ , ])()([)]([ 1 0 ∑ − = −−=+ N k kN zkfzFzNkfZ , ])1()([)]1([ 1 zfzFzkfZ −+=− − , ])()([)]([ 1 1 ∑ − = − −+=− N k kN zkfzFzNkfZ 例 3 求齐次差分方程 -195- 0)(2)1(3)2( =++++ kxkxkx , 0)0( =x , 1)1( =x 的解。 解 令 )()]([ zXkxZ = ,对差分方程取 Z 变换,得 0)(2)(3)(2 =++− zXzzXzzXz , 2123)( 2 +−+=++= z z z z zz zzX , 对上式取 z 反变换,便得差分方程的解为 kkkx )2()1()( −−−= 。 §2 蛛网模型 2.1 问题提出 在自由竞争的社会中,很多领域会出现循环波动的现象。在经济领域中,可以从自 由集市上某种商品的价格变化看到如下现象:在某一时期,商品的上市量大于需求,引 起价格下跌,生产者觉得该商品无利可图,转而经营其它商品;一段时间之后,随着产 量的下降,带来的供不应求又会导致价格上升,又有很多生产商会进行该商品的生产; 随之而来的,又会出现商品过剩,价格下降。在没有外界干扰的情况下,这种现象将会 反复出现。 如何从数学的角度来描述上述现象呢? 2.2 模型假设 (i)设 k 时段商品数量为 kx ,其价格为 ky 。这里,把时间离散化为时段,一个时 期相当于商品的一个生产周期。 (ii)同一时段的商品的价格取决于该时段商品的数量,把 )( kk xfy = (5) 称之为需求函数。出于对自由经济的理解,商品的数量越多,其价格就越低,故可以假 设:需求函数为一个单调下降函数。 (iii)下一时段商品数量由上一个时段的商品的价格决定,把 )(1 kk ygx =+ (6) 称之为供应函数。由于价格越高可以导致产量越大,故可假设供应函数是一个单调上升 的函数。 2.3 模型求解 在同一个坐标系中做出需求函数与供应函数的图形,设两条曲线相交于 ),( 000 yxP ,则 0P 为平衡点。因为此时 )( 00 ygx = , )( 00 xfy = ,若某个 k ,有 0xxk = , 则可推出 0yyl = , 0xxl = , ),1,( L+= kkl 即商品的数量保持在 0x ,价格保持在 0y ,不妨设 01 xx ≠ ,下面考虑 kk yx , 在图上的变 化 ),2,1( L=k 。如下图所示,当 1x 给定后,价格 1y 由 f 上的 1P -196- 点决定,下一时段的数量 2x 由 g 上的 2P 点决定, 2y 又可由 f 上的 3P 点决定。依此类 推,可得一系列的点 ),( 111 yxP , ),( 122 yxP , ),( 223 yxP , ),( 234 yxP ,图上的箭头 表示求出 kP 的次序,由图知: ),(),(lim 000 yxPyxPkk = +∞→ , 即市场经济将趋于稳定。 并不是所有的需求函数和供应函数都趋于稳定,若给定的 f 与 g 的图形如下图所 示,得出的 L,, 21 PP 就不趋于 0P ,此时,市场经济趋向不稳定。 上两图中的折线 L,,, 433221 PPPPPP 形似蛛网,故把这种模型称为蛛网模型。在进 行市场经济分析中, f 取决于消费者对某种商品的需要程度及其消费水平, g 取决于 生产者的生产、管理等能力。 当已经知道需求函数和供应函数之后,可以根据 f 和 g 的性质判断平衡点 0P 的稳 定性。利用结论:当 || 01 xx − 较小时, 0P 点的稳定性取决于 f 与 g 在 0P 点的斜率,即 当 |)('||)('| 00 ygxf < (7) 时, 0P 点稳定,当 |)('||)('| 00 ygxf > (8) 时, 0P 点不稳定。 这一结论的直观解释是:需求曲线越平,供应曲线越陡,越有利于经济稳定。 设 |)('| 0xf=α , |)('|1 0yg=β ,在 0P 点附近取 f 与 g 的线性近似,由(5),(6) 式得 -197- )( 00 xxyy kk −−=− α (9) )( 001 yyxx kk −=−+ β (10) 上两式中消去 ky ,得 01 )1( xxx kk αβαβ ++−=+ (11) (11)式对 L,2,1=k 均成立,有 01 )1( xxx kk αβαβ ++−=+ 01 2 )1)(()()( xxx kk αβαβαβαβ +−+−=− − 0 2 2 3 1 2 )1()()()( xxx kk αβαβαβαβ +−+−=− −− ……………………………………………… 0 2 2 1 3 2 )1()()()( xxx kkk αβαβαβαβ +−+−=− −−− 0 1 12 1 )1()()()( xxx kkk αβαβαβαβ +−+−=− −− 以上 k 个式子相加,有 01 1 01 ])(1[)( ])()(1[)1()( xx xxx kk kk k αβαβ αβαβαβαβ −−+−= −++−+++−= − L (12) 此为(11)式的解。 若 0P 是稳定点,则应有: 01lim xxkk =++∞→ 结合(12)式考虑, 0P 点稳定的条件是 1<αβ (13) 即 βα 1< 同理, 0P 点不稳定的条件是 1>αβ (14) 即 βα 1> 此时, ∞=++∞→ 1lim kk x 。这与(7),(8)式是一致的。 2.4 模型的修正 在上面模型假设的第(iii)点中引进了供应函数,并且知道 g 取决于管理者的生产、 管理水平。如果生产者的管理水平更高一些,他们在决定该商品生产数量 1+kx 时,不仅 考虑了前一时期的价格 ky ,而且也考虑了价格 1−ky 。为了简化起见,不妨设 1+kx 由 )(2 1 1−+ kk yy 决定,则供应函数可写成 -198- ⎥⎦ ⎤ ⎢⎣ ⎡ += −+ )(2 1 11 kkk yygx 在 0P 附近取线性近似,则有 )2(2 0101 yyyxx kkk −+=− −+ β (15) 由(9)式有 )( 00 xxyy kk −−= α )( 0101 xxyy kk −−= −− α 将上两式代入(15)式,整理得 011 )1(2 xxxx kkk αβαβαβ +=++ −+ , ),3,2( L=k 这是一个二阶线性差分方程,其特征方程为 02 2 =++ αβαβλλ 经计算,可得其特征根 4 8)( 2 2,1 αβαβαβλ −±−= (16) 结论:若方程的特征根均在单位圆内,即 1|| 1 <λ , 1|| 2 <λ ,则 0P 为稳定点。 当 8>αβ 时,(16)式有两个实根,因 44 8)( 2 2 αβαβαβαβλ −<−−−= , 则有 2|| 2 >λ ,故此时 0P 不是稳定点。 当 8<αβ 时,(16)式有两个共轭复根,此时 2)(84 1 4|| 2 1 2 2 2 2,1 αβαβαβαβλ = ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ⎟⎠ ⎞⎜⎝ ⎛ −+⎟⎠ ⎞⎜⎝ ⎛= 要使 0P 为稳定点,只需 2<αβ 与(13)式相比,α 与 β 的范围扩大了。这是由于经营者经营管理水平的提高带来的 结果。 §3 商品销售量预测 在利用差分方程建模研究实际问题时,常常需要根据统计数据并用最小二乘法来拟 合出差分方程的系数。其系统稳定性讨论要用到代数方程的求根。对问题的进一步研究 又常需考虑到随机因素的影响,从而用到相应的概率统计知识。 例 4 某商品前 5 年的销售量见表。现希望根据前 5 年的统计数据预测第 6 年起该 商品在各季度中的销售量。 年份 季度 第一年 第二年 第三年 第四年 第五年 1 2 11 12 13 15 16 16 18 20 24 25 -199- 3 4 25 26 27 30 32 12 14 15 15 17 从表中可以看出,该商品在前 5 年相同季节里的销售量呈增长趋势,而在同一年中 销售量先增后减,第一季度的销售量最小而第三季度的销售量最大。预测该商品以后的 销售情况,根据本例中数据的特征,可以用回归分析方法按季度建立四个经验公式,分 别用来预测以后各年同一季度的销售量。例如,如认为第一季度的销售量大体按线性增 长,可设销售量 batyt +=)1( ,由 x=[[1:5]',ones(5,1)];y=[11 12 13 15 16]';z=x\y 求得 3.1)1( == za , 5.9)2( == zb 。 根据 5.93.1)1( += tyt ,预测第六年起第一季度的销售量为 3.17)1( 6 =y , 6.18)1( 7 =y ,…。由于数据少,用回归分析效果不一定好。 如认为销售量并非逐年等量增长而是按前一年或前几年同期销售量的一定比例增 长的,则可建立相应的差分方程模型。仍以第一季度为例,为简单起见不再引入上标, 以 ty 表示第t 年第一季度的销售量,建立形式如下的差分公式: 211 ayay tt += − 或 32211 ayayay ttt ++= −− 等等。 上述差分方程中的系数不一定能使所有统计数据吻合,较为合理的办法是用最小二 乘法求一组总体吻合较好的数据。以建立二阶差分方程 32211 ayayay ttt ++= −− 为例, 选取 321 ,, aaa 使 ∑ = −− ++− 5 3 2 32211 )]([ t ttt ayayay 最小。编写 Matlab 程序如下: y0=[11 12 13 15 16]'; y=y0(3:5);x=[y0(2:4),y0(1:3),ones(3,1)]; z=x\y 求得 1)1(1 −== za , 3)2(2 == za , 8)3(3 −== za 。即所求二阶差分方程为 83 21 −+−= −− ttt yyy 。 虽然这一差分方程恰好使所有统计数据吻合,但这只是一个巧合。根据这一方程, 可迭代求出以后各年第一季度销售量的预测值 216 =y , 197 =y ,…等。 上述为预测各年第一季度销售量而建立的二阶差分方程,虽然其系数与前 5 年第一 季度的统计数据完全吻合,但用于预测时预测值与事实不符。凭直觉,第六年估计值明 显偏高,第七年销售量预测值甚至小于第六年。稍作分析,不难看出,如分别对每一季 度建立一差分方程,则根据统计数据拟合出的系数可能会相差甚大,但对同一种商品, 这种差异应当是微小的,故应根据统计数据建立一个共用于各个季度的差分方程。为此, 将季度编号为 20,,2,1 L=t ,令 241 ayay tt += − 或 38241 ayayay ttt ++= −− 等,利用 全体数据来拟合,求拟合得最好的系数。以二阶差分方程为例,为求 321 ,, aaa 使得 -200- ∑ = −− ++−= 20 9 2 38241321 )]([),,( t ttt ayayayaaaQ 最小,编写 Matlab 程序如下: y0=[11 16 25 12 12 18 26 14 13 20 27 15 15 24 30 15 16 25 32 17]'; y=y0(9:20); x=[y0(5:16),y0(1:12),ones(12,1)]; z=x\y 求得 8737.0)1(1 == za , 1941.0)2(2 == za , 6957.0)3(3 == za ,故求得二 阶差分方程 6957.01941.08737.0 84 ++= −− ttt yyy , )21( ≥t 根据此式迭代,可求得第六年和第七年第一季度销售量的预测值为 5869.1721 =y , 1676.1925 =y 还是较为可信的。 §4 遗传模型 随着人类的进化,人们为了揭示生命的奥妙,越来越重视遗传学的研究,特别是遗 传特征的逐代传播,引起人们更多的注意。无论是人,还是动植物都会将本身的特征遗 传给下一代,这主要是因为后代继承了双亲的基因,形成自己的基因对,基因对将确定 后代所表现的特征。下面,我们来研究两种类型的遗传:常染色体遗传和 −x 链遗传。 根据亲体基因遗传给后代的方式,建立模型,利用这些模型可以逐代研究一个总体基因 型的分布。 4.1 常染色体遗传模型 常染色体遗传中,后代从每个亲体的基因对中各继承一个基因,形成自己的基因对, 基因对也称为基因型。如果我们所考虑的遗传特征是由两个基因 A 和 a 控制的,那么 就有三种基因对,记为 aaAaAA ,, 。例如,金鱼草由两个遗传基因决定花的颜色,基 因型是 AA 的金鱼草开红花, Aa 型的开粉红色花,而 aa 型的开白花。又如人类眼睛 的颜色也是通过常染色体遗传控制的。基因型是 AA或 Aa 的人,眼睛为棕色,基因型 是 aa 的人,眼睛为蓝色。这里因为 AA和 Aa 都表示了同一外部特征,我们认为基因 A 支配基因 a ,也可以认为基因 a 对于 A 来说是隐性的。当一个亲体的基因型为 Aa ,而 另一个亲体的基因型是 aa 时,那么后代可以从 aa 型中得到基因 a ,从 Aa 型中或得到 基因 A ,或得到基因 a 。这样,后代基因型为 Aa 或 aa 的可能性相等。下面给出双亲 体基因型的所有可能的结合,以及其后代形成每种基因型的概率,如下表所示。 父体—母体的基因型 AAAA − AaAA − aaAA − AaAa − aaAa − aaaa − AA 1 1/2 0 1/4 0 0 Aa 0 1/2 1 1/2 1/2 0 后代 基因 型 aa 0 0 0 1/4 1/2 1 例 5 农场的植物园中某种植物的基因型为 AaAA, 和 aa 。农场计划采用 AA型的 植物与每种基因型植物相结合的方案培育植物后代。那么经过若干年后,这种植物的任 一代的三种基因型分布如何? (a)假设 令 L,2,1,0=n 。 -201- (i)设 nn ba , 和 nc 分别表示第 n 代植物中,基因型为 AaAA, 和 aa 的植物占植物 总数的百分率。令 )(nx 为第 n 代植物的基因型分布: []T nnn n cbax =)( 当 0=n 时 []Tcbax 000 )0( = 表示植物基因的初始分布(即培育开始时的分布),显然有 1000 =++ cba (ii)第 n 代的分布与第 1−n 代的分布之间的关系是通过上面的表格确定的。 (b)建模 根据假设(ii),先考虑第 n 代中的 AA型。由于第 1−n 代的 AA型与 AA型结合, 后代全部是 AA型;第 1−n 代的 Aa 型与 AA型结合,后代是 AA型的可能性为 2 1 ;而 第 1−n 代的 aa 型与 AA型结合,后代不可能是 AA 型。因此当 L,2,1=n 时 111 02 11 −−− ⋅++⋅= nnnn cbaa 即 11 2 1 −− += nnn baa (17) 类似可推出 112 1 −− += nnn cbb (18) 0=nc (19) 将(17),(18),(19)式相加,得 111 −−− ++=++ nnnnnn cbacba 根据假设(i),有 1000 =++=++ cbacba nnn 对于(17),(18),(19)式,我们采用矩阵形式简记为 )1()( −= nn Mxx , L,2,1=n (20) 其中 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 000 12 10 02 11 M 由(20)式递推,得 )0()2(2)1()( xMxMMxx nnnn ==== −− L (21) (21)式给出第 n 代基因型的分布与初始分布的关系。 -202- 编写如下 Matlab 程序: syms n a0 b0 c0 M=sym('[1,1/2,0;0,1/2,1;0,0,0]'); [p,lamda]=eig(M); x=p*lamda.^n*p^(-1)*[a0;b0;c0]; x=simple(x) 求得 ⎪ ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ = ⎟⎠ ⎞⎜⎝ ⎛+⎟⎠ ⎞⎜⎝ ⎛= ⎟ ⎠ ⎞⎜ ⎝ ⎛−⎟ ⎠ ⎞⎜ ⎝ ⎛−= − − 0 2 1 2 1 2 1 2 11 0 1 0 0 1 0 n nn n nn n c cbb cba (22) 当 ∞→n 时, 02 1 →⎟ ⎠ ⎞⎜ ⎝ ⎛ n ,所以从(22)式得到 1→na , 0→nb , 0=nc 即在极限的情况下,培育的植物都是 AA 型。 (c)模型的讨论 若在上述问题中,不选用基因 AA 型的植物与每一植物结合,而是将具有相同基因 型植物相结合,那么后代具有三种基因型的概率如下表所示。 父体—母体的基因型 AAAA− AaAa − aaaa − AA 1 1/4 0 Aa 0 1/2 0 后代 基因 型 aa 0 1/4 1 并且 )0()( xMx nn = ,其中 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 14 10 02 10 04 11 M 编写如下 Matlab 程序: syms n a0 b0 c0 M=sym('[1,1/4,0;0,1/2,0;0,1/4,1]'); [p,lamda]=eig(M); x=p*lamda.^n*p^(-1)*[a0;b0;c0]; x=simple(x) -203- 求得 ⎪ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎧ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ⎟⎠ ⎞⎜⎝ ⎛−+= ⎟⎠ ⎞⎜⎝ ⎛= ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡ ⎟ ⎠ ⎞⎜ ⎝ ⎛−+= + + 0 1 0 0 0 1 0 2 1 2 1 2 1 2 1 2 1 bcc bb baa n n n n n n (23) 当 ∞→n 时, 00 2 1 baan +→ , 0→nb , 00 2 1 bccn +→ 。因此,如果用基因型相同 的植物培育后代,在极限情况下,后代仅具有基因 AA和 aa 。 4.2 常染色体隐性病模型 现在世界上已经发现的遗传病有将近 4000 种。在一般情况下,遗传病与特殊的种 族、部落及群体有关。例如,遗传病库利氏贫血症的患者以居住在地中海沿岸为多,镰 状网性贫血症一般流行在黑人中,家族黑蒙性白痴症则流行在东欧犹太人中间。患者经 常未到成年就痛苦地死去,而他们的父母则是疾病的病源。假若我们能识别这些疾病的 隐性患者,并且规定两个隐性患者不能结合(因为两个隐性患者结合,他们的后代就可 能成为显性患者),那么未来的儿童,虽然有可能是隐性患者,但决不会出现显性特征, 不会受到疾病的折磨。现在,我们考虑在控制结合的情况下,如何确定后代中隐性患者 的概率。 (a)假设 (i)常染色体遗传的正常基因记为 A ,不正常基因记为 a ,并以 aaAaAA ,, 分别 表示正常人,隐性患者,显性患者的基因型。 (ii)设 nn ba , 分别表示第 n 代中基因型为 AaAA, 的人占总人数的百分比,记 ⎥⎦ ⎤ ⎢⎣ ⎡= n nn b ax )( , L,2,1=n (iii)为使每个儿童至少有一个正常的父亲或母亲,因此隐性患者必须与正常人结 合,其后代的基因型概率由下表给出: 父母的基因型 AAAA− AaAA− AA 1 1/2 后代 基因型 Aa 0 1/2 (b)建模 由假设(iii),从第 1−n 代到第 n 代基因型分布的变化取决于方程 11 2 1 −− += nnn baa 11 2 10 −− +⋅= nnn bab 所以 )1()( −= nn Mxx , L,2,1=n ,其中 -204- ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 2 10 2 11 M 如果初始分布 )0(x 已知,那么第 n 代基因型分布为 )0()( xMx nn = , L,2,1=n 。 易知 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ⎟ ⎠ ⎞⎜ ⎝ ⎛= ⎟⎠ ⎞⎜⎝ ⎛−= 0 0 2 1 2 11 bb ba n n n n L,2,1=n (24) 当 ∞→n 时, 1→na , 0→nb ,隐性患者逐渐消失。从(24)式中可知 12 1 −= nn bb 这说明每代隐性患者的概率是前一代隐性患者概率的 2 1 。 (c)模型讨论 研究在随机结合的情况下,隐性患者的变化是很有意思的,但随机结合导致了非线 性化问题,超出了本章范围,然而用其它技巧,在随机结合的情况下可以把(24)式改 写为 1 1 2 11 − − + = n n n b bb (25) 下面给出数值的例子: 某地区有 10%的黑人是镰状网性贫血症隐性患者,如果控制结合,根据(24)式 可知下一代(大约 27 年)的隐性患者将减少到 5%;如果随机结合,根据(25)式, 可以预言下一代人中有 9.5%是隐性患者,并且可计算出大约每出生 400 个黑人孩子, 其中有一个是显性患者。 4.3 −X 链遗传模型 −X 链遗传是指雄性具有一个基因 A 或 a ,雌性具有两个基因 AA,或 Aa ,或 aa 。 其遗传规律是雄性后代以相等概率得到母体两个基因中的一个,雌性后代从父体中得到 一个基因,并从母体的两个基因中等可能地得到一个。下面,研究与 −X 链遗传有关 的近亲繁殖过程。 (a)假设 (i)从一对雌雄结合开始,在它们的后代中,任选雌雄各一个成配偶,然后在它 们产生的后代中任选两个结成配偶。如此继续下去。 (ii)父体与母体的基因型组成同胞对,同胞对的形式有 ),( AAA , ),( AaA , ),( aaA , ),( AAa , ),( Aaa , ),( aaa 六种。初始一对雌雄的同胞对,是这六种类型 中的任一种,其后代的基因型如下表所示。 父体—母体的基因型 ),( AAA ),( AaA ),( aaA ),( AAa ),( Aaa ),( aaa -205- A 1 1/2 0 1 1/2 0 a 0 1/2 1 0 1/2 1 AA 1 1/2 0 0 0 0 Aa 0 1/2 1 1 1/2 0 后 代 基 因 型 aa 0 0 0 0 1/2 1 (iii)在每一代中,配偶的同胞对也是六种类型之一,并有确定的概率。为计算这 些概率,设 nnnnnn fedcba ,,,,, 分别是第 n 代中配偶的同胞对为 ),( AAA , ),( AaA , ),( aaA , ),( AAa , ),( Aaa , ),( aaa 型的概率, L,1,0=n 。令 []T nnnnnn n fedcbax =)( , L,1,0=n (iv)如果第 1−n 代配偶的同胞对是 ),( AaA 型,那么它们的雄性后代将等可能地 得到基因 A 和 a ,它们的雌性后代的基因型将等可能地是 AA 或 Aa 。又由于第 n 代雌 雄结合是随机的,那么第 n 代配偶的同胞对将等可能地为四种类型 ),( AAA , ),( AaA , ),( AAa , ),( Aaa 之一。对于其它类型的同胞对,我们可以进行同样分析,因此有 )1()( −= nn Mxx , L,2,1=n (26) 其中 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 14 10000 04 1014 10 00004 10 04 10000 04 1104 10 00004 11 M 从(26)式中易得 )0()( xMx nn = , L,2,1=n 编写如下 Matlab 程序: syms n a0 b0 c0 d0 e0 f0 M=[1 1/4 0 0 0 0;0 1/4 0 1 1/4 0;0 0 0 0 1/4 0; 0 1/4 0 0 0 0;0 1/4 1 0 1/4 0;0 0 0 0 1/4 1]; M=sym(M); [p,lamda]=eig(M); x=p*lamda.^n*p^(-1)*[a0;b0;c0;d0;e0;f0]; x=simple(x) 由上述程序计算结果可以看出 -206- 当 ∞→n 时, ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ++++ ++++ → 00000 00000 )( 3 2 3 1 3 2 3 1 0 0 0 0 3 1 3 2 3 1 3 2 fedcb edcba x n , 因此,在极限情况下所有同胞对或者是 ),( AAA 型,或者是 ),( aaa 型。如果初始的父 母体同胞对是 ),( AaA 型,即 10 =b ,而 000000 ===== fedca ,于是,当 ∞→n 时 T nx ⎥⎦ ⎤ ⎢⎣ ⎡→ 3 100003 2)( 即同胞对是 ),( AAA 型的概率是 3 2 ,是 ),( aaa 型的概率是 3 1 。 习 题 十 六 1. (汉诺塔问题)n 个大小不同的圆盘依其半径大小依次套在桩 A 上,大的在下, 小的在上。现要将此 n 个盘移到空桩 B 或C 上,但要求一次只能移动一个盘且移动过 程中,始终保持大盘在下,小盘在上。移动过程中桩 A 也可利用。设移动 n 个盘的次 数为 na ,试建立关于 na 的差分方程,并求 na 的通项公式。 2. 设第一月初有雌雄各一的一对小兔。假定两月后长成成兔,同时(即第三月) 开始每月初产雌雄各一的一对小兔,新增小兔也按此规律繁殖。设第 n 月末共有 nF 对 兔子,试建立关于 nF 的差分方程,并求 nF 的通项公式。 3. 在常染色体遗传的问题中,假设植物总是和基因型是 Aa 的植物结合。求在第 n 代中,基因型为 AaAA, 和 aa 的植物的百分率,并求当 n 趋于无穷大时,基因型分布 的极限。 -207- 第十七章 马氏链模型 §1 随机过程的概念 一个随机试验的结果有多种可能性,在数学上用一个随机变量(或随机向量)来描 述。在许多情况下,人们不仅需要对随机现象进行一次观测,而且要进行多次,甚至接 连不断地观测它的变化过程。这就要研究无限多个,即一族随机变量。随机过程理论就 是研究随机现象变化过程的概率规律性的。 定义 1 设 },{ Ttt ∈ξ 是一族随机变量,T 是一个实数集合,若对任意实数 tTt ξ,∈ 是一个随机变量,则称 },{ Ttt ∈ξ 为随机过程。 T 称为参数集合,参数t 可以看作时间。 tξ 的每一个可能取值称为随机过程的一个 状态。其全体可能取值所构成的集合称为状态空间,记作 E 。当参数集合T 为非负整 数集时,随机过程又称随机序列。本章要介绍的马尔可夫链就是一类特殊的随机序列。 例 1 在一条自动生产线上检验产品质量,每次取一个,“废品”记为 1,“合格品” 记为 0。以 nξ 表示第 n 次检验结果,则 nξ 是一个随机变量。不断检验,得到一列随机 变量 L,, 21 ξξ ,记为 },2,1,{ L=nnξ 。它是一个随机序列,其状态空间 }1,0{=E 。 例 2 在 m 个商店联营出租照相机的业务中(顾客从其中一个商店租出,可以到 m 个商店中的任意一个归还),规定一天为一个时间单位,“ jt =ξ ”表示“第 t 天开始营 业时照相机在第 j 个商店”, mj ,,2,1 L= 。则 },2,1,{ L=nnξ 是一个随机序列,其状 态空间 },,2,1{ mE L= 。 例 3 统计某种商品在t 时刻的库存量,对于不同的t ,得到一族随机变量, )},0[,{ +∞∈ttξ 是一个随机过程,状态空间 ],0[ RE = ,其中 R 为最大库存量。 我们用一族分布函数来描述随机过程的统计规律。一般地,一个随机过程 },{ Ttt ∈ξ ,对于任意正整数 n 及T 中任意 n 个元素 ntt ,,1 L 相应的随机变量 ntt ξξ ,,1 L 的联合分布函数记为 },,{),,( 11 11 nttntt xxPxxF nn ≤≤= ξξ LLL (1) 由于 n 及 ),,1( niti L= 的任意性,(1)式给出了一族分布函数。记为 },2,1;,,1,),,,({ 11 LLLL ==∈ nniTtxxF intt n 称它为随机过程 },{ Ttt ∈ξ 的有穷维分布函数族。它完整地描述了这一随机过程的统计 规律性。 §2 马尔可夫链 2.1 马尔可夫链的定义 现实世界中有很多这样的现象:某一系统在已知现在情况的条件下,系统未来时刻 的情况只与现在有关,而与过去的历史无直接关系。比如,研究一个商店的累计销售额, 如果现在时刻的累计销售额已知,则未来某一时刻的累计销售额与现在时刻以前的任一 时刻累计销售额无关。上节中的几个例子也均属此类。描述这类随机现象的数学模型称 为马氏模型。 定义 2 设 },2,1,{ L=nnξ 是一个随机序列,状态空间 E 为有限或可列集,对于任 意的正整数 nm, ,若 )1,,1(,, −=∈ nkEiji k L ,有 -208- }|{},,,|{ 1111 ijPiiijP nmnnnnmn ======= +−−+ ξξξξξξ L (2) 则称 },2,1,{ L=nnξ 为一个马尔可夫链(简称马氏链),(2)式称为马氏性。 事实上,可以证明若等式(2)对于 1=m 成立,则它对于任意的正整数 m 也成立。 因此,只要当 1=m 时(2)式成立,就可以称随机序列 },2,1,{ L=nnξ 具有马氏性, 即 },2,1,{ L=nnξ 是一个马尔可夫链。 定义 3 设 },2,1,{ L=nnξ 是一个马氏链。如果等式(2)右边的条件概率与 n 无 关,即 )(}|{ mpijP ijnmn ===+ ξξ (3) 则称 },2,1,{ L=nnξ 为时齐的马氏链。称 )(mpij 为系统由状态i 经过 m 个时间间隔(或 m 步)转移到状态 j 的转移概率。(3)称为时齐性。它的含义是:系统由状态i 到状态 j 的转移概率只依赖于时间间隔的长短,与起始的时刻无关。本章介绍的马氏链假定都 是时齐的,因此省略“时齐”二字。 2.2 转移概率矩阵及柯尔莫哥洛夫定理 对于一个马尔可夫链 },2,1,{ L=nnξ ,称以 m 步转移概率 )(mpij 为元素的矩阵 ))(()( mpmP ij= 为马尔可夫链的 m 步转移矩阵。当 1=m 时,记 PP =)1( 称为马尔可 夫链的一步转移矩阵,或简称转移矩阵。它们具有下列三个基本性质: (i)对一切 Eji ∈, , 1)(0 ≤≤ mpij ; (ii)对一切 Ei ∈ , ∑ ∈ = Ej ij mp 1)( ; (iii)对一切 Eji ∈, , ⎩ ⎨ ⎧ ≠ === 时当 时当 , ji jip ijij 0 ,1)0( δ 。 当实际问题可以用马尔可夫链来描述时,首先要确定它的状态空间及参数集合,然 后确定它的一步转移概率。关于这一概率的确定,可以由问题的内在规律得到,也可以 由过去经验给出,还可以根据观测数据来估计。 例 4 某计算机机房的一台计算机经常出故障,研究者每隔 15 分钟观察一次计算 机的运行状态,收集了 24 小时的数据(共作 97 次观察)。用 1 表示正常状态,用 0 表 示不正常状态,所得的数据序列如下: 1110010011111110011110111111001111111110001101101 111011011010111101110111101111110011011111100111 解 设 )97,,1( L=nX n 为第 n 个时段的计算机状态,可以认为它是一个时齐马氏 链,状态空间 }1,0{=E ,编写如下 Matlab 程序: a1='1110010011111110011110111111001111111110001101101'; a2='111011011010111101110111101111110011011111100111'; a=[a1 a2]; f00=length(findstr('00',a)) f01=length(findstr('01',a)) f10=length(findstr('10',a)) f11=length(findstr('11',a)) 或者把上述数据序列保存到纯文本文件data1.txt中,存放在Matlab下的work 子目录中,编写程序如下: clc,clear -209- format rat fid=fopen('data1.txt','r'); a=[]; while (~feof(fid)) a=[a fgetl(fid)]; end for i=0:1 for j=0:1 s=[int2str(i),int2str(j)]; f(i+1,j+1)=length(findstr(s,a)); end end fs=sum(f'); for i=1:2 f(i,:)=f(i,:)/fs(i); end f 求得 96 次状态转移的情况是: 00 → ,8 次; 10 → ,18 次; 01→ ,18 次; 11→ ,52 次, 因此,一步转移概率可用频率近似地表示为 13 4 188 8}0|0{ 100 =+≈=== + nn XXPp 13 9 188 18}0|1{ 101 =+≈=== + nn XXPp 35 9 5218 18}1|0{ 110 =+≈=== + nn XXPp 35 26 5218 52}1|1{ 111 =+≈=== + nn XXPp 例 5 设一随机系统状态空间 }4,3,2,1{=E ,记录观测系统所处状态如下: 4 3 2 1 4 3 1 1 2 3 2 1 2 3 4 4 3 3 1 1 1 3 3 2 1 2 2 2 4 4 2 3 2 3 1 1 2 4 3 1 若该系统可用马氏模型描述,估计转移概率 ijp 。 解 首先将不同类型的转移数 ijn 统计出来分类记入下表 ji → 转移数 ijn 1 2 3 4 行和 in 1 2 3 4 4 4 1 1 3 2 4 2 4 4 2 1 0 1 4 2 10 11 11 7 各类转移总和 ∑∑ ij ijn 等于观测数据中马氏链处于各种状态次数总和减 1,而行和 in 是 -210- 系统从状态i 转移到其它状态的次数, ijn 是由状态i 到状态 j 的转移次数,则 ijp 的估 计值 i ij ij n np = 。计算得 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 7/27/47/10 11/111/211/411/4 11/211/411/211/3 10/110/15/25/2 ˆP Matlab 计算程序如下: format rat clc a=[4 3 2 1 4 3 1 1 2 3 ... 2 1 2 3 4 4 3 3 1 1 ... 1 3 3 2 1 2 2 2 4 4 ... 2 3 2 3 1 1 2 4 3 1]; for i=1:4 for j=1:4 f(i,j)=length(findstr([i j],a)); end end f ni=(sum(f'))' for i=1:4 p(i,:)=f(i,:)/ni(i); end p 例 6(带有反射壁的随机徘徊)如果在原点右边距离原点一个单位及距原点 )1( >ss 个单位处各立一个弹性壁。一个质点在数轴右半部从距原点两个单位处开始随机徘徊。 每次分别以概率 )10( << pp 和 )1( pqq −= 向右和向左移动一个单位;若在+1 处,则 以概率 p 反射到 2,以概率 q 停在原处;在 s 处,则以概率 q 反射到 1−s ,以概率 p 停 在原处。设 nξ 表示徘徊 n 步后的质点位置。 },2,1,{ L=nnξ 是一个马尔可夫链,其状 态空间 },,2,1{ sE L= ,写出转移矩阵 P 。 解 ⎩ ⎨ ⎧ ≠ === 时当 时当 , 20 2,1}{ 0 i iiP ξ ⎪⎩ ⎪⎨ ⎧ = = = 其它 时当 时当 ,0 2, 1, 1 jp jq p j ⎪⎩ ⎪⎨ ⎧ −= = = 其它 时当 时当 ,0 1, , sjq sjp psj -211- ⎪⎩ ⎪⎨ ⎧ −=−=− =− = 其它 时当 时当 ,0 )1,,3,2(1, 1, siijq ijp pij L 因此, P 为一个 s 阶方阵,即 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = pq pq q pq pq P 0000 0000 0000 000 000 LLLLLL L L L 。 定理 1 (柯尔莫哥洛夫—开普曼定理)设 },2,1,{ L=nnξ 是一个马尔可夫链,其 状态空间 },2,1{ L=E ,则对任意正整数 nm, 有 ∑ ∈ =+ Ek kjikij mpnpmnp )()()( 其中的 Eji ∈, 。 定理 2 设 P 是一个马氏链转移矩阵( P 的行向量是概率向量), )0(P 是初始分布 行向量,则第 n 步的概率分布为 nn PPP )0()( = 。 例 7 若顾客的购买是无记忆的,即已知现在顾客购买情况,未来顾客的购买情况 不受过去购买历史的影响,而只与现在购买情况有关。现在市场上供应 CBA 、、 三个 不同厂家生产的 50 克袋状味精,用“ 1=nξ ”、“ 2=nξ ”、“ 3=nξ ”分别表示“顾客 第 n 次购买 CBA 、、 厂的味精”。显然, },2,1,{ L=nnξ 是一个马氏链。若已知第一 次顾客购买三个厂味精的概率依次为 0.2,0.4,0.4。又知道一般顾客购买的倾向由表 2 给出。求顾客第四次购买各家味精的概率。 表 2 下 次 购 买 A B C 上次 购买 A B C 0.8 0.5 0.5 0.1 0.1 0.3 0.1 0.4 0.2 解 第一次购买的概率分布为 []4.04.02.0)1( =P 转移矩阵 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 2.03.05.0 4.01.05.0 1.01.08.0 P 则顾客第四次购买各家味精的概率为 [ ]1636.0136.07004.03)1()4( == PPP 。 2.3 转移概率的渐近性质—极限概率分布 -212- 现在我们考虑,随 n 的增大, nP 是否会趋于某一固定向量?先考虑一个简单例子: 转移矩阵 ⎥⎦ ⎤ ⎢⎣ ⎡= 3.07.0 5.05.0P ,当 +∞→n 时, ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ → 12 5 12 7 12 5 12 7 nP 又若取 ⎥⎦ ⎤ ⎢⎣ ⎡= 12 5 12 7u ,则 uuP = , Tu 为矩阵 TP 的对应于特征值 1=λ 的特征(概 率)向量, u 也称为 P 的不动点向量。哪些转移矩阵具有不动点向量?为此我们给出 正则矩阵的概念。 定义4 一个马氏链的转移矩阵 P 是正则的,当且仅当存在正整数 k ,使 kP 的每 一元素都是正数。 定理3 若 P 是一个马氏链的正则阵,那么: (i) P 有唯一的不动点向量W ,W 的每个分量为正。 (ii)P 的 n 次幂 nP ( n 为正整数)随 n 的增加趋于矩阵W ,W 的每一行向量均 等于不动点向量W 。 例8 信息的传播 一条新闻在 LL ,,,, 21 naaa 等人中间传播,传播的方式是 1a 传 给 2a , 2a 传给 3a ,…如此继续下去,每次传播都是由 ia 传给 1+ia 。每次传播消息的失 真概率是 p , 10 << p ,即 ia 将消息传给 1+ia 时,传错的概率是 p ,这样经过长时间 传播,第 n 个人得知消息时,消息的真实程度如何? 设整个传播过程为随机转移过程,消息经过一次传播失真的概率为 p ,转移矩阵 ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎣ ⎡= − − pp pp P 1 1 真 假 真假 P 是正则矩阵。又设V 是初始分布,则消息经过 n 次传播后,其可靠程度的概率分布 为 nPV ⋅ 。 一般地,设时齐马氏链的状态空间为 E ,如果对于所有 Eji ∈, ,转移概率 )(npij 存在极限 jijn np π= ∞→ )(lim ,(不依赖于i ) 或 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎯⎯→⎯= ∞→ LLLLL LL LLLLL LL LL j j j n nPnP πππ πππ πππ 21 21 21 )()( , -213- 则称此链具有遍历性。又若 ∑ = j j 1π ,则同时称 ),,( 21 Lπππ = 为链的极限分布。 下面就有限链的遍历性给出一个充分条件。 定理 4 设时齐(齐次)马氏链 },2,1,{ L=nnξ 的状态空间为 },,{ 1 NaaE L= , )( ijpP = 是它的一步转移概率矩阵,如果存在正整数 m ,使对任意的 Eaa ji ∈, ,都 有 0)( >mpij , Nji ,,2,1, L= 则此链具有遍历性;且有极限分布 ),,( 1 Nπππ L= ,它是方程组 Pππ = 或即 ∑ = = N i ijij p 1 ππ , Nj ,,1 L= 的满足条件 0>jπ , 1 1 =∑ = N j jπ 的唯一解。 例 9 根据例 7 中给出的一般顾客购买三种味精倾向的转移矩阵,预测经过长期的 多次购买之后,顾客的购买倾向如何? 解 这个马氏链的转移矩阵满足定理 4 的条件,可以求出其极限概率分布。为此, 解下列方程组: ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =++ ++= ++= ++= 1 2.04.01.0 3.01.01.0 5.05.08.0 321 3213 3212 3211 ppp pppp pppp pppp 编写如下的 Matlab 程序: format rat p=[0.8 0.1 0.1;0.5 0.1 0.4;0.5 0.3 0.2]; a=[p'-eye(3);ones(1,3)]; b=[zeros(3,1);1]; p_limit=a\b 或者利用求转移矩阵 P 的转置矩阵 TP 的特征值 1 对应的特征(概率)向量,求得极 限概率。编写程序如下: p=[0.8 0.1 0.1;0.5 0.1 0.4;0.5 0.3 0.2]; p=sym(p'); [x,y]=eig(p) for i=1:3 x(:,i)=x(:,i)/sum(x(:,i)); end x 求得 7 5 1 =p , 84 11 2 =p , 84 13 3 =p 。 这说明,无论第一次顾客购买的情况如何,经过长期多次购买以后, A 厂产的味 -214- 精占有市场的 7 5 , CB, 两厂产品分别占有市场的 84 11 , 84 13 。 2.4 吸收链 马氏链还有一种重要类型—吸收链。 若马氏链的转移矩阵为 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 1000 4.03.03.00 0.30.20.30.2 0.400.30.3 4 3 2 1 4 3 2 1 P , P 的最后一行表示的是,当转移到状态 4 时,将停留在状态 4,状态 4 称为吸收状态。 如果马氏链至少含有一个吸收状态,并且从每一个非吸收状态出发,都可以到达某 个吸收状态,那么这个马氏链被称为吸收链。 具有 r 个吸收状态, )( rnss −= 个非吸收状态的吸收链,它的 nn × 转移矩阵的标 准形式为 ⎥⎦ ⎤ ⎢⎣ ⎡= SR OIP r (4) 其中 rI 为 r 阶单位阵,O 为 sr × 零阵, R 为 rs × 矩阵, S 为 ss × 矩阵。从(4)得 ⎥⎦ ⎤ ⎢⎣ ⎡= n rn SQ OIP (5) (5)式中的子阵 nS 表示以任何非吸收状态作为初始状态,经过 n 步转移后,处于 s 个 非吸收状态的概率。 在吸收链中,令 1)( −−= SIF ,则 F 称为基矩阵。 对于具有标准形式(即(4)式)转移矩阵的吸收链,可以证明以下定理: 定理 5 吸收链的基矩阵 F 中的每个元素,表示从一个非吸收状态出发,过程到达 每个非吸收状态的平均转移次数。 定理 6 设 FCN = , F 为吸收链的基矩阵, [ ]TC 111 L= ,则 N 的每个 元素表示从非吸收状态出发,到达某个吸收状态被吸收之前的平均转移次数。 定理 7 设 )( ijbFRB == ,其中 F 为吸收链的基矩阵, R 为(4)式中的子阵, 则 ijb 表示从非吸收状态i 出发,被吸收状态 j 吸收的概率。 例 10 智力竞赛问题 甲、乙两队进行智力竞赛。竞赛规则规定:竞赛开始时, 甲、乙两队各记 2 分,在抢答问题时,如果甲队赢得 1 分,那么甲队的总分将增加 1 分,同时乙队总分将减少 1 分。当甲(或乙)队总分达到 4 分时,竞赛结束,甲(或乙) 获胜。根据队员的智力水平,知道甲队赢得 1 分的概率为 p ,失 去 1 分的概率为 p−1 , 求:(i)甲队获胜的概率是多少?(ii)竞赛从开始到结束,分数转移的平均次数是多 少?(iii)甲队获得 1、2、3 分的平均次数是多少? 分析 甲队得分有 5 种可能,即 0、1、2、3、4,分别记为状态 43210 ,,,, aaaaa , 其中 0a 和 4a 是吸收状态, 21,aa 和 3a 是非吸收状态。过程是以 2a 作为初始状态。根据 -215- 甲队赢得 1 分的概率为 p ,建立转移矩阵: ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − − − = 10000 0100 0010 0001 00001 4 3 2 1 0 43210 pp pp pp a a a a a P aaaaa (6) 将(6)式改记为标准形式: ⎥⎦ ⎤ ⎢⎣ ⎡= SR OIP 2 其中 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − = p p R 0 00 01 , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − −= 010 01 00 p pp p S , 计算 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − − −=−= − pqqq pq pppq pqSIF 1 1 1 21 1)( 2 2 1 3 其中 pq −= 1 。 因为 2a 是初始状态,根据定理 5,甲队获得 1,2,3 分的平均次数为 pq q 21− , pq21 1 − , pq p 21− 。又 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − − −== pqqq pq pppq pqFCN 1 1 1 21 1 2 2 []22 2122121 1 pppq ++−= 根据定理 6,以 2a 为初始状态,甲队最终获胜的分数转移的平均次数为 pq21 2 − 。 又因为 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − − −== ppqq pq pppq pqFRB )1( )1( 21 1 3 22 3 -216- 根据定理 7,甲队最后获胜的概率 pq pb 21 2 22 −= 。 Matlab 程序如下: syms p q r=[q,0;0,0;0,p]; s=[0,p,0;q,0,p;0,q,0]; f=(eye(3)-s)^(-1);f=simple(f) n=f*ones(3,1);n=simple(n) b=f*r;b=simple(b) §3 马尔可夫链的应用 应用马尔可夫链的计算方法进行马尔可夫分析,主要目的是根据某些变量现在的情 况及其变动趋向,来预测它在未来某特定区间可能产生的变动,作为提供某种决策的依 据。 例 11(服务网点的设置问题)为适应日益扩大的旅游事业的需要,某城市的甲、 乙、丙三个照相馆组成一个联营部,联合经营出租相机的业务。游客可由甲、乙、丙三 处任何一处租出相机,用完后,还在三处中任意一处即可。估计其转移概率如下表所示: 还 相 机 处 甲 乙 丙 租相机处 甲 乙 丙 0.2 0.8 0.1 0.8 0 0.3 0 0.2 0.6 今欲选择其中之一附设相机维修点,问该点设在哪一个照相馆为最好? 解 由于旅客还相机的情况只与该次租机地点有关,而与相机以前所在的店址无 关,所以可用 nX 表示相机第 n 次被租时所在的店址;“ 1=nX ”、“ 2=nX ”、“ 3=nX ” 分别表示相机第 n 次被租用时在甲、乙、丙馆。则 },2,1,{ L=nX n 是一个马尔可夫链, 其转移矩阵 P 由上表给出。考虑维修点的设置地点问题,实际上要计算这一马尔可夫 链的极限概率分布。 转移矩阵满足定理 4 的条件,极限概率存在,解方程组 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =++ += += ++= 1 6.02.0 3.08.0 1.08.02.0 321 323 312 3211 ppp ppp ppp pppp 得极限概率 41 17 1 =p , 41 16 2 =p , 41 8 3 =p 。 由计算看出,经过长期经营后,该联营部的每架照相机还到甲、乙、丙照相馆的概 率分别为 41 17 、 41 16 、 41 8 。由于还到甲馆的照相机较多,因此维修点设在甲馆较好。但 由于还到乙馆的相机与还到甲馆的相差不多,若是乙的其它因素更为有利的话,比如, 交通较甲方便,便于零配件的运输,电力供应稳定等等,亦可考虑设在乙馆。 习 题 十 七 -217- 1. 在英国,工党成员的第二代加入工党的概率为 0.5,加入保守党的概率为 0.4, 加入自由党的概率为 0.1。而保守党成员的第二代加入保守党的概率为 0.7,加入工党的 概率为 0.2,加入自由党的概率为 0.1。而自由党成员的第二代加入保守党的概率为 0.2, 加入工党的概率为 0.4,加入自由党的概率为 0.4。求自由党成员的第三代加入工党的概 率是多少?在经过较长的时间后,各党成员的后代加入各党派的概率分布是否具有稳定 性? 2. 社会学的某些调查结果指出:儿童受教育的水平依赖于他们父母受教育的水 平。调查过程是将人们划分为三类:E 类,这类人具有初中或初中以下的文化程度;S 类,这类人具有高中文化程度;C 类,这类人受过高等教育。当父或母(指文化程度 较高者)是这三类人中某一类型时,其子女将属于这三种类型中的任一种的概率由下面 给出 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ 7.02.01.0 2.04.04.0 1.02.07.0 C S E CSE 母 或 父 子女 问:(i)属于 S 类的人们中,其第三代将接受高等教育的概率是多少? (ii)假设不同的调查结果表明,如果父母之一受过高等教育,那么他们的子女总 可以进入大学,修改上面的转移矩阵。 (iii)根据(ii)的解,每一类型人的后代平均要经过多少代,最终都可以接受高 等教育? 3. 色盲是 −X 链遗传,由两种基因 A 和 a 决定。男性只有一个基因 A 或 a ,女性 有两个基因 AaAA、 或 aa ,当基因为 a 或 aa 时呈现色盲。基因遗传规律为:男性等 概率地取母亲的两个基因之一,女性取父亲的基因外又等概率地取母亲的两个基因之 一。由此可知,母亲色盲则儿子必色盲但女儿不一定。试用马氏链研究: (i)若近亲结婚,其后代的发展趋势如何?若父亲非色盲而母亲色盲,问平均经 多少代,其后代就会变为全色盲或全不色盲,两者的概率各为多少? (ii)若不允许双方均色盲的人结婚,情况会怎样? -218- 第十八章 动态优化模型 动态过程的另一类问题是所谓的动态优化问题,这类问题一般要归结为求最优控制 函数使某个泛函达到极值。当控制函数可以事先确定为某种特殊的函数形式时,问题又 简化为求普通函数的极值。求解泛函极值问题的方法主要有变分法和最优控制理论方 法。 §1 变分法简介 变分法是研究泛函极值问题的一种经典数学方法,有着广泛的应用。下面先介绍变 分法的基本概念和基本结果,然后介绍动态系统最优控制问题求解的必要条件和最大值 原理。 1.1 变分法的基本概念 1.1.1 泛函 设 S 为一函数集合,若对于每一个函数 Stx ∈)( 有一个实数 J 与之对应,则称 J 是 对应在 S 上的泛函,记作 ))(( txJ 。 S 称为 J 的容许函数集。 通俗地说,泛函就是“函数的函数”。 例如对于 xy 平面上过定点 ),( 11 yxA 和 ),( 22 yxB 的每一条光滑曲线 )(xy ,绕 x 轴 旋转得一旋转体,旋转体的侧面积是曲线 )(xy 的泛函 ))(( xyJ 。由微积分知识不难写 出 dxxyxyxyJ x x )('1)(2))(( 2 1 2∫ += π (1) 容许函数集可表示为 })( ,)(],,[)(|)({ 221121 1 yxyyxyxxCxyxyS ==∈= (2) 最简单的一类泛函表为 ∫= 2 1 ),,())(( t t dtxxtFtxJ & (3) 被积函数 F 包含自变量t ,未知函数 x 及导数 x& 。(1)式是最简泛函。 1.1.2 泛函的极值 泛函 ))(( txJ 在 Stx ∈)(0 取得极小值是指,对于任意一个与 )(0 tx 接近的 Stx ∈)( ,都 有 ))(())(( 0 txJtxJ ≥ 。所谓接近,可以用距离 ε<))(),(( 0 txtxd 来度量, 而距离定义为 |})()(||,)()({|max))(),(( 000 21 txtxtxtxtxtxd ttt && −−= ≤≤ 泛函的极大值可以类似地定义。 )(0 tx 称为泛函的极值函数或极值曲线。 1.1.3 泛函的变分 如同函数的微分是增量的线性主部一样,泛函的变分是泛函增量的线性主部。作为 泛函的自变量,函数 )(tx 在 )(0 tx 的增量记为 )()()( 0 txtxtx −=δ 也称函数的变分。由它引起的泛函的增量记作 ))(())()(( 00 txJtxtxJJ −+=Δ δ 如果 JΔ 可以表为 -219- ))(),(())(),(( 00 txtxrtxtxLJ δδ +=Δ 其中 L 为 xδ 的线性项,而 r 是 xδ 的高阶项,则 L 称为泛函在 )(0 tx 的变分,记作 ))(( 0 txJδ 。用变动的 )(tx 代替 )(0 tx ,就有 ))(( txJδ 。 泛函变分的一个重要形式是它可以表为对参数α 的导数: 0))()(())(( =+∂ ∂= ααδαδ txtxJtxJ (4) 这是因为当变分存在时,增量 )),(()),(())(())(( xtxrxtxLtxJxtxJJ αδαδαδ +=−+=Δ 根据 L 和 r 的性质有 )),(()),(( xtxLxtxL δααδ = 0)),((lim)),((lim 00 == →→ xx xtxrxtxr δαδ αδ α αδ αα 所以 α αδαδα αα )()(lim)( 00 xJxxJxxJ −+=+∂ ∂ →= )(),(),(),(lim 0 xJxxLxxrxxL δδα αδαδ α ==+= → 1.1.4 极值与变分 利用变分的表达式(4)可以得到泛函极值与变分的关系: 若 ))(( txJ 在 )(0 tx 达到极值(极大或极小),则 0))(( 0 =txJδ (5) 这是因为对任意给定的 xδ , )( 0 xxJ αδ+ 是变量α 的函数,该函数在 0=α 处达到极 值。根据函数极值的必要条件知 0)( 00 =+∂ ∂ =ααδα xxJ 于是由(4)式直接得到(5)式。 1.1.5. 变分法的基本引理 引理 ],[)( 21 xxCx ∈ϕ , ],[)( 21 1 xxCx ∈∀η , 0)()( 21 == xx ηη ,有 ∫ ≡2 1 0)()(x x dxxx ηϕ , 则 ],[ ,0)( 21 xxxx ∈≡ϕ 。 1.2 无约束条件的泛函极值 求泛函 ∫= ft t dttxtxtFJ 0 ))(),(,( & (6) 的极值,一般是用泛函极值的必要条件去寻找一条曲线 )(tx ,使给定的二阶连续可微 函数 F 沿该曲线的积分达到极值。常称这条曲线为极值曲线(或轨线),记为 )(* tx 。 1.2.1 端点固定的情况 设容许曲线 )(tx 满足边界条件 -220- 00 )( xtx = , ff xtx =)( (7) 且二次可微。 首先计算(6)式的变分: 0))()(( =+∂ ∂= ααδαδ txtxJJ ∫ =++∂ ∂= ft t dttxtxtxtxtF 0 0))()(),()(,( ααδαδα && ∫ += ft t xx dtxxxtFxxxtF 0 ]),,(),,([ &&& & δδ (8) 对上式右端第二项做分布积分,并利用 0)()( 0 == ftxtx δδ ,有 ∫∫ −= ff t t x t t x xdtxxtFdt ddtxxxtF 00 ),,(),,( δδ &&& && , 再代回到(8)式,并利用泛函取极值的必要条件,有 ∫ =−= ft t xx xdtFdt dFJ 0 0][ δδ & 因为 xδ 的任意性,及 0)()( 0 == ftxtx δδ ,所以由基本引理得到著名的欧拉方程 0=− xx Fdt dF & (9) 它是这类最简泛函取极值的必要条件。 (9)式又可记作 0=−−− xFxFFF xxxxxtx &&& &&&& (10) 通常这是 )(tx 的二阶微分方程,其通解的两个任意常数由(7)式中的两个端点条件确 定。 1.2.2 最简泛函的几种特殊情形 (i) F 不依赖于 x& ,即 ),( xtFF = 这时 0≡xF& ,欧拉方程为 0),( =xtFx ,这个方程以隐函数形式给出 )(tx ,但它一 般不满足边界条件,因此,变分问题无解。 (ii) F 不依赖 x ,即 ),( xtFF &= 欧拉方程为 0),( =xtFdt d x && 将上式积分一次,便得首次积分 1),( cxtFx =&& ,由此可求出 ),( 1ctx ϕ=& ,积分后得到 可能的极值曲线族 ()dtctx ∫= 1,ϕ (iii) F 只依赖于 x& ,即 )(xFF &= 这时 0,0,0 === xxxtx FFF && ,欧拉方程为 0=xxFx &&&& 由此可设 0=x&& 或 0=xxF && ,如果 0=x&& ,则得到含有两个参数的直线族 21 ctcx += 。 -221- 另外若 0=xxF && 有一个或几个实根时,则除了上面的直线族外,又得到含有一个参数 c 的 直线族 cktx += ,它包含于上面含有两个参数的直线族 21 ctcx += 中,于是,在 )(xFF &= 情况下,极值曲线必然是直线族。 (iv) F 只依赖于 x 和 x& ,即 ),( xxFF &= 这时有 0=xtF & ,故欧拉方程为 0=−− xxxxx FxFxF &&& &&& 此方程具有首次积分为 1cFxF x =− && 事实上,注意到 F 不依赖于t ,于是有 0)()( =−=−−+=− xxxxxxx Fdt dFxFdt dxFxxFxFFxFdt d &&&&& &&&&&&&& 。 例 1 (最速降线问题)最速降线问题是历史上变分法开始发展的第一个问题。它是 约翰·贝努里(J. Bernoulli)于 1696 年提出的。问题的提法是这样的:设 A 和 B 是铅 直平面上不在同一铅直线上的两点,在所有连结 A 和 B 的平面曲线中,求一曲线,当 质点仅受重力作用,且初速为零,沿此曲线从 A 滑行至 B 时,使所需时间最短。 解 将 A 点取为坐标原点, x 轴水平向右, y 轴垂直向下,B 点为 ),( 22 yxB 。根 据能量守恒定律,质点在曲线 )(xy 上任一点处的速度 dt ds 满足( s 为弧长) mgydt dsm =⎟ ⎠ ⎞⎜ ⎝ ⎛ 2 2 1 将 dxxyds )('1 2+= 代入上式得 dxgy ydt 2 '1 2+= 于是质点滑行时间应表为 )(xy 的泛函 dxgy yxyJ x ∫ += 2 0 2 2 '1))(( 端点条件为 22 )(,0)0( yxyy == 最速降线满足欧拉方程,因为 y yyyF 2'1)',( += 不含自变量 x ,所以方程(10)可写作 0''' ''' =−− yFyFF yyyyy 等价于 0)'( ' =− yFyFdx d 作一次积分得 -222- 1 2 )'1( cyy =+ 令 ,2' θctgy = 则方程化为 )cos1(22sin'1 12 12 1 θθ −==+= ccy cy 又因 θθθ θθθ dc ctg dc y dydx )cos1(2 2 2cos2sin ' 1 1 −=== 积分之,得 2 1 )sin(2 ccx +−= θθ 由边界条件 0)0( =y ,可知 02 =c ,故得 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ −= −= ).cos1(2 )sin(2 1 1 θ θθ cy cx 这是摆线(圆滚线)的参数方程,其中常数 1c 可利用另一边界条件 22( yxy =) 来确定。 例 2 最小旋转面问题 dxxyxyxyJ x x )('1)(2))(( 2 1 2∫ += π })( ,)(],,[|{ 221121 1 yxyyxyxxCyyS ==∈= 解 因 '1 2yyF += 不包含 x ,故有首次积分 12 2 ' '1 '''1' c y yyyyyFyF y = + −+=− 化简得 2 1 '1 ycy += 令 shty =' ,代入上式, chtctshcy 1 2 1 1 =+= 由于 dtcsht shtdtc y dydx 1 1 ' === 积分之,得 21 ctcx += 消去t ,就得到 1 2 1 c cxchcy −= 。 这是悬链线方程。 1.2.3 最简泛函的推广 最简泛函取极值的必要条件可以推广到其它情况。 (ⅰ)含多个函数的泛函 -223- 使泛函 ∫= 2 1 )',,',,())(),(( x x dxzzyyxFxzxyJ 取极值且满足固定边界条件 .)(,)(,)(,)( 22112211 zxzzxzyxyyxy ==== 的极值曲线 )(),( xzzxyy == 必满足欧拉方程组 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ =− =− 0 0 ' ' zz yy Fdx dF Fdx dF (ii)含高阶导数的泛函 使泛函 ∫= 2 1 )",',,())(( x x dxyyyxFxyJ 取极值且满足固定边界条件 11)( yxy = , 221122 ')(',')(' yxyyxyyxy === ,)( 的极值曲线 )(xyy = 必满足微分方程 0"2 2 ' =+− yyy Fdx dFdx dF (iii) 含多元函数的泛函 设 Dyxcyxz ∈∈ ),(,),( 2 ,使泛函 ∫∫= D yx dxdyzzzyxFyxzJ ),,,,()),(( 取极值且在区域 D 的边界线l 上取已知值的极值函数 ),( yxzz = 必满足方程 0=∂ ∂−∂ ∂− yx zzz FyFxF 上式称为奥式方程。 1.2.4 端点变动的情况(横截条件) 设容许曲线 )(tx 在 0t 固定,在另一端点 ftt = 时不固定,是沿着给定的曲线 )(tx ψ= 上变动。于是端点条件表示为 ⎩ ⎨ ⎧ = = )()( )( 00 ttx xtx ψ 这里t 是变动的,不妨用参数形式表示为 ff dttt α+= 寻找端点变动情况的必要条件,可仿照前面端点固定情况进行推导,即有 0),,(0 0 = + ++∂ ∂== ∫ α α αδαδαδ dtxxxxtFJ ff dtt t && fttttx t t xx dtFxFxdtFdt dF ff f == ++−= ∫ δδ &&0 )( (11) -224- 再对(11)式做如下分析: (i)对每一个固定的 ft , )(tx 都满足欧拉方程,即(11)式右端的第一项积分为 零; (ii)为考察(11)式的第二、第三项,建立 fdt 与 fttx =δ 之间的关系,因为 )()()( ffffff dttdttxdttx αψααδα +=+++ 对α 求导并令 0=α 得 ffttff dttxdttx f )()( ψδ && =+ = 即 ffftt dttxtx f )]()([ && −== ψδ (12) 把(12)代入(11)并利用 fdt 的任意性,得 0])([ =−+ = fttxFxF &&&ψ (13) (13)式就是确定欧拉方程通解中另一常数的定解条件,称为横截条件。 横截条件有两种常见的特殊情况: (i)当 )(tx ψ= 是垂直横轴的直线时, ft 固定, )( ftx 自由,并称 )( ftx 为自由 端点。此时(11)式中 0=fdt 及 fttx =δ 的任意性,便得自由端点的横截条件 0== fttxF& (14) (ii)当 )(tx ψ= 是平行横轴的直线时, ft 自由, )( ftx 固定,并称 )( ftx 为平动 端点。此时 0=ψ& ,(13)式的横截条件变为 0=− = fttxFxF && (15) 注意,横截条件与欧拉方程联立才能构成泛函极值的必要条件。 1.3 有约束条件的泛函极值 在最优控制系统中,常常要涉及到有约束条件泛函的极值问题,其典型形式是对动 态系统 ))(),(,()( tutxtftx =& (16) 寻求最优性能指标(目标函数) ∫+= ft tff dttutxtFtxttuJ 0 ))(),(,())(,())(( ϕ (17) 其中 )(tu 是控制策略, )(tx 是轨线, 0t 固定, ft 及 )( ftx 自由, nRtx ∈)( , mRtu ∈)( (不受限,充满 mR 空间), Ff ,,ϕ 连续可微。 下面推导取得目标函数极值的最优控制策略 )(* tu 和最优轨线 )(* tx 的必要条件。 采用拉格朗日乘子法,化条件极值为无条件极值,即考虑 ∫ −++= ft t T ff dtxuxtftuxtFtxtuxJ 0 )]),,()((),,([))(,(),,(1 &λϕλ (18) 的无条件极值,首先定义(16)式和(17)式的哈密顿(Hamilton)函数为 ),,()(),,(),,,( uxtftuxtFuxtH Tλλ += (19) 将其代入(18)式,得到泛函 -225- ∫ −+= ft t T ff dtxuxtHtxtuxJ 0 ]),,,([))(,(),,(1 &λλϕλ (20) 下面先对其求变分 ))()(,({1 ffff txtxdttJ αδαϕαδ ++∂ ∂= 0})]()(),,,([ 0 = + ++−++++ ∫ α α αδαδλλαδλλαδαδ dtxxuuxxtH Tdtt t ff && [] ffff tt TT ftt T ft T ftx T f xdtuxtHdtdttx == −++= )()(),,,()()()( )( &λλϕϕδ dtxxHHuHx TTT u T x Tt t f ])()()()([ 0 && δλδλδλδδ λ −−+++ ∫ )()]([]),,,([)( fff tx T fttt T f txtuxtFdt ϕδϕ ++= = ∫∫ +−−+++ = f f f t t T ttf Tt t TT u T x T dtxxtdtxHHuHx 00 )()(])()()()[( λδδλδλδλδδ λ && 注意到 )( ftt txx f δδ ≠= , ffftt dttxtxx f )()( &−== δδ ,因而 fff ttx T fttt T f txuxtHdtJ == −++= )()]([]),,,([)(1 λϕδλϕδ ∫ +−+++ ft t u TT x T dtHuxHHx 0 ])()()()()[( δδλλδ λ && 再令 01 =Jδ ,由 δλδδδ ,,),(, uxtxdt ff 的任意性,便得 (i) **,λx 必满足正则方程: ① 状态方程 ),,( uxtfHx == λ& ② 协态方程 xH−=λ& 。 (ii)哈密顿函数 ),,,( ** λuxtH 作为u 的函数,也必满足 0=uH 并由此方程求得 *u 。 (iii)求 *** ,, ux λ 时,必利用边界条件 ① 00 )( xtx = , (用于确定 *x ) ② )()( ftxft ϕλ = , (用于确定 *λ ) ③ ff ttt uxtH =−= ),,,( λϕ , (确定 ft ) 1.4 最大(小)值原理 如果受控系统 ),,( uxtfx =& , 00 )( xtx = 其控制策略 )(tu 的全体构成有界集U ,求 Utu ∈)( ,使性能指标 ∫+= ft tff dtuxtFtxttuJ 0 ),,())(,())(( ϕ 达到最大(小)值。 最大(小)值原理:如果 ),,( uxtf , ))(,( ff txtϕ 和 ),,( uxtF 都是连续可微的, -226- 那么最优控制策略 )(* tu 和相应的最优轨线 )(* tx 由下列的必要条件决定: (i)最优轨线 )(* tx ,协态向量 )(* tλ 由下列的必要条件决定: ),,( uxtfdt dx = , Utu ∈)( , x H dt d ∂ ∂−=λ . (ii)哈密顿函数 ),,()(),,(),,,( ***** uxtftuxtFuxtH Tλλ += 作为 )(tu 的函数,最优策略 )(* tu 必须使 ),,,(max),,,( ***** λλ uxtHuxtH Uu∈ = 或使 ),,,(min),,,( ***** λλ uxtHuxtH Uu∈ = (最小值原理) (iii)满足相应的边界条件 ① 若两端点固定,则正则方程的边界条件为 0)0( xx = , ff xtx =)( 。 ② 若始端固定,终端 ft 也固定,而 )( ftx 自由,则正则方程的边界条件为 0)0( xx = , ))(,()( )( fftxf txtt f ϕλ = 。 ③ 若始端固定,终端 )(, ff txt 都自由,则正则方程的边界条件为 0)0( xx = , ))(,()( )( fftxf txtt f ϕλ = , 0))(,())(),(),(,( =+ fftffff txtttutxtH f ϕλ 。 §2 生产设备的最大经济效益 某工厂购买了一台新设备投入到生产中。一方面该设备随着运行时间的推移其磨损 程度愈来愈大,因此其转卖价将随着使用设备的时间增加而减小;另一方面生产设备总 是要进行日常保养,花费一定的保养费,保养可以减缓设备的磨损程度,提高设备的转 卖价。那么,怎样确定最优保养费和设备转卖时间,才能使这台设备的经济效益最大。 2.1 问题分析与假设 (i)设备的转卖价是时间t 的函数,记为 )(tx 。 )(tx 的大小与设备的磨损程度和 保养费的多少密切相关。记初始转卖价 0)0( xx = 。 (ii)设备随其运行时间的推移,磨损程度越来越大。t 时刻设备的磨损程度可以 用t 时刻转卖价的损失值来刻画,常称其为磨损函数或废弃函数,记为 )(tm 。 (iii)保养设备可以减缓设备的磨损速度,提高转卖价。如果 )(tu 是单位时间的保 养费, )(tg 是t 时刻的保养效益系数(每用一元保养费所增加的转卖价),那么单位时 间的保养效益为 )()( tutg 。另外,保养费不能过大(如单位时间保养费超过单位时间产 值时,保养失去了意义),只能在有界函数集中选取,记有界函数集为W ,则 Wtu ∈)( 。 (iv)设单位时间的产值与转卖价的比值记为 p ,则 )(tpx 表示在t 时刻单位时间 的产值,即t 时刻的生产率。 -227- (v)转卖价 )(tx 及单位时间的保养费 )(tu 都是时间 t 的连续可微函数。为了统一 标准,采用它们的贴现值。对于贴现值的计算,例如转卖价 )(tx 的贴现值计算,如果 它的贴现因子为δ (经过单位时间的单位费用贴现),那么由 ⎪⎩ ⎪⎨ ⎧ = = 1)( )()( 1 1 1 tx txdt tdx δ 解得 )( 1 1)( ttetx −−= δ 令 01 =t ,便得 t 时刻单位费用的贴现(称贴现系数)为 te δ− ,所以设备在t 时刻转卖价 )(tx 的贴现为 tetx δ−)( 。仿此计算, )(tu 的贴现为 tetu δ−)( ,单位时间产值的贴现为 tetpx δ−)( 。 (vi)欲确定的转卖时间 ft 和转卖价 )( ftx 都是自由的。 2.2 模型构造 根据以上的分析与假设可知:考察的对象是设备在生产中的磨损—保养系统;转卖 价体现了磨损和保养的综合指标,可以选作系统的状态变量;在生产中设备磨损的不可 控性强,其微弱的可控性也是通过保养体现,加之保养本身具有较强的可控性,所以选 单位时间的保养费 )(tu 作为控制策略。这样,生产设备的最大经济效益模型可以构成 为在设备磨损—保养系统的(转卖价)状态方程 ⎪⎩ ⎪⎨ ⎧ = +−= 0)0( )()()()( xx tutgtmdt tdx (21) 之下,在满足 Utu ≤≤ )(0 的函数集W 中寻求最优控制策略 )(* tu ,使系统的经济效益 这一性能指标 ∫ −− −+= ff t tt f dtetutpxetxtuJ 0 )]()([)())(( δδ (22) 为最大,其中 )(, ff txt 都是自由的。 2.3 模型求解 首先写出问题的哈密顿函数 )]()()([)]()([ tmtgtmetutpxH t +−+−= − λδ (23) 再由协态方程及边界条件求出 )(tλ ,即由 ⎪⎩ ⎪⎨ ⎧ == −=−= − − f f t txf t x et peHdt td δ δ ϕλ λ )()( )( 解得 tt epept f δδ δδλ −− +−= )1()( 下面利用最大值原理求 )(* tu 。先将(23)式改变为 -228- )(])([)()( tuetgtmetpxH tt δδ λλ −− −+−= 显然, H 是对u 的线性函数,因此得到 ⎩ ⎨ ⎧ <− >−= − − 0)(,0 0)(,)(* t t etg etgUtu δ δ λ λ (24) 或 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ <−+− >−+− = −−− −−− 0)(])1[(,0 0)(])1[(, )(* ttt ttt etgepep etgepepU tu f f δδδ δδδ δδ δδ (25) 在上式中,还需解决两个问题:一是 Utu =)(* 与 0)(* =tu 的转换点 st 在什么位置, 即 st 等于多少?二是 )(* tu 是由U 到0,还是由0到U 。 转换点 st 应满足 0)(])1[( =−+− −−− ttt etgepep f δδδ δδ 即 01)(])1([ )( =−−− − tgepp fttδ δδ (26) 从而可解出 st 。 因为 )(tg 是时间t 的减函数,所以(26)式的左端也是时间t 的减函数,也就是说 )(* tu 随时间应由U 到 0。于是最优控制策略的具体表达式为 ⎩ ⎨ ⎧ ≤< <≤ = fs s ttt ttU u ,0 0,* 至于 ft , )( ftx 的求法,请见下面的例子。 例 3 在生产设备的最大经济效益的问题中,设 100)0( =x , 1=U , 2)( =tm , 1.0=p , 05.0=δ , 2 1 )1( 2)( t tg + = ,试求 ft , )( ftx 和 )(* tu 。 解 由(26)式可得求 st 的公式 )(05.02 1 24)1( fs tt s et −−=+ (27) 当 stt < 时, 1)(* == Utu ,状态方程为 2 1 )1( 22 tdt dx + +−= 当 stt > 时, 0)(* =tu ,状态方程为 2−=dt dx -229- 于是 stt > 时,有 ∫∫ ∫−+ + +−=tt t t s s dtdt t dtdt dx 00 2 1 )2(] )1( 22[ 解得 tttx s 296)1(4)( 2 1 −++= (28) 由自由边界条件 ff tttH ϕ−== 及 ft f et δλ −=)( ,得 )(2)( f ttt f txeeetpx fff δδδ δ −−− −=+− 于是 402)( =−= δptx f 当 ftt = 时,由(28)式有 fs tt 296)1(440 2 1 −++= 即 28)1(2 2 1 ++= sf tt (29) 将(27)和(29)联立求解,编写如下 Matlab 程序 [x,y]=solve('(1+ts)^(1/2)=4-2*exp(0.05*(ts-tf))','tf=2*(1+ts)^ (1/2)+28') 求得 6.10=st , 8.34=ft 于是,最优控制策略(保养费)为 ⎩ ⎨ ⎧ ≤< <≤= 8.346.10,0 6.100,1)(* t ttu 习 题 十 八 1. 求自原点(0,0)到直线 01 =−+ yx 的最速降线。 2. 求概率密度函数 )(xϕ ,使得信息量 ∫+∞ ∞− −= dxxxJ )](ln[)( νϕϕ 取最大值,且满足等周条件 1)( =∫+∞ ∞− dxxϕ , 22 )( σϕ =∫+∞ ∞− dxxx (常数)。 3. 在生产设备或科学仪器中长期运行的零部件,如滚珠、轴承、电器元件等会突 然发生故障或损坏,即使是及时更换也已经造成了一定的经济损失。如果在零部件运行 一定时期后,就对尚属正常的零件做预防性更换,以避免一旦发生故障带来的损失,从 经济上看是否更为合算?如果合算,做这种预防性更换的时间如何确定呢? -230- 第十九章 神经网络模型 §1 神经网络简介 人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及 功能的一种抽象数学模型。自 1943 年美国心理学家 W. McCulloch 和数学家 W. Pitts 提 出形式神经元的抽象数学模型—MP 模型以来,人工神经网络理论技术经过了 50 多年 曲折的发展。特别是 20 世纪 80 年代,人工神经网络的研究取得了重大进展,有关的理 论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。 它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及 专家系统等领域得到广泛的应用,提出了 40 多种神经网络模型,其中比较著名的有感 知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。在这 里我们仅讨论最基本的网络模型及其学习算法。 1.1 人工神经元模型 下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素: (i)一组连接(对应于生物神经元的突触),连接强度由各连接上的权值表示,权 值为正表示激活,为负表示抑制。 (ii)一个求和单元,用于求取各输入信号的加权和(线性组合)。 (iii)一个非线性激活函数,起非线性映射作用并将神经元输出幅度限制在一定范 围内(一般限制在 )1,0( 或 )1,1(− 之间)。 此外还有一个阈值 kθ (或偏置 kkb θ−= )。 以上作用可分别以数学式表达出来: ∑ = = p j jkjk xwu 1 , kkk uv θ−= , )( kk vy ϕ= 式中 pxxx ,,, 21 L 为输入信号, kpkk www ,,, 21 L 为神经元 k 之权值, ku 为线性组合结 果, kθ 为阈值, )(⋅ϕ 为激活函数, ky 为神经元 k 的输出。 若把输入的维数增加一维,则可把阈值 kθ 包括进去。例如 ∑ = = p j jkjk xwv 0 , )( kk uy ϕ= 此处增加了一个新的连接,其输入为 10 −=x (或 1+ ),权值为 kkw θ=0 (或 kb ),如 下图所示。 -231- 激活函数 )(⋅ϕ 可以有以下几种: (i)阈值函数 ⎩ ⎨ ⎧ < ≥= 0,0 0,1)( v vvϕ (1) 即阶梯函数。这时相应的输出 ky 为 ⎩ ⎨ ⎧ < ≥= 0,0 0,1 k k k v vy 其中 ∑ = −= p j kjkjk xwv 1 θ ,常称此种神经元为 PM − 模型。 (ii)分段线性函数 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ −≤ <<−+ ≥ = 1,0 11),1(2 1 1,1 )( v vv v vϕ (2) 它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。 (iii)sigmoid 函数 最常用的函数形式为 )exp(1 1)( vv αϕ −+= (3) 参数 0>α 可控制其斜率。另一种常用的是双曲正切函数 )exp(1 )exp(1 2tanh)( v vvv −+ −−=⎟ ⎠ ⎞⎜ ⎝ ⎛=ϕ (4) 这类函数具有平滑和渐近性,并保持单调性。 Matlab 中的激活(传递)函数如下表所示: 函数名 功 能 purelin 线性传递函数 -232- hardlim 硬限幅传递函数 hardlims 对称硬限幅传递函数 satlin 饱和线性传递函数 satlins 对称饱和线性传递函数 logsig 对数 S 形传递函数 tansig 正切 S 形传递函数 radbas 径向基传递函数 compet 竞争层传递函数 各个函数的定义及使用方法,可以参看 Matlab 的帮助(如在 Matlab 命令窗口运行 help tansig,可以看到 tantig 的使用方法,及 tansig 的定义为 11 2)( 2 −+= − vevϕ )。 1.2 网络结构及工作方式 除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。 (i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i 层的输入只与第 1−i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。 (ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解最优 化问题。 §2 蠓虫分类问题与多层前馈网络 2.1 蠓虫分类问题 蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下: Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70), (1.48,1.82),(1.54,1.82),(1.56,2.08). Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96). 现在的问题是: (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。 (ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。 (iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。 如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支 -233- Af 及 6 支 Apf 的数据集合称之为学习样本。 2.2 多层前馈网络 为解决上述问题,考虑一个其结构如下图所示的人工神经网络, 激活函数由 )exp(1 1)( vv αϕ −+= 来决定。图中最下面单元,即由• 所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是最好的途径。在我们的例子中,取三个就足够 了。最上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前传网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。 为了叙述上的方便,此处引人如下记号上的约定:令 s 表示一个确定的已知样品标 号,在蠓虫问题中, 15,,2,1 L=s ,分别表示学习样本中的 15 个样品;当将第 s 个样 品的原始数据输入网络时,相应的输出单元状态记为 )2,1( =iO s i ,隐单元状态记为 )3,2,1( =jH s j ,输入单元取值记为 )2,1( =kI s k 。请注意,此处下标 kji ,, 依次对应于 输出层、中间层及输入层。在这一约定下,从中间层到输出层的权记为 ijw ,从输入层 到中间层的权记为 jkw 。如果 ijw , jkw 均已给定,那么,对应于任何一组确定的输入 ),( 21 ss II ,网络中所有单元的取值不难确定。事实上,对样品 s 而言,隐单元 j 的输入 是 ∑ = = 2 1k s kjk s j Iwh (5) 相应的输出状态是 ∑ = == 2 1 )()( k s kjk s j s j IwhH ϕϕ (6) 由此,输出单元i 所接收到的迭加信号是 -234- ∑∑∑ === == 3 1 3 1 2 1 )( jjk s kjkij s jij s i IwwHwh ϕ (7) 网络的最终输出是 ))(()()( 3 1 2 1 3 1 ∑∑∑ === === jk s kjkij j s jij s i s i IwwHwhO ϕϕϕϕ (8) 这里,没有考虑阈值,正如前面已经说明的那样,这一点是无关紧要的。还应指出的是, 对于任何一组确定的输入,输出是所有权 },{ jkij ww 的函数。 如果我们能够选定一组适当的权值 },{ jkij ww ,使得对应于学习样本中任何一组 Af 样品的输入 ),( 21 ss II ,输出 )0,1(),( 21 =ss OO ,对应于 Apf 的输入数据,输出为 )1,0( , 那么蠓虫分类问题实际上就解决了。因为,对于任何一个未知类别的样品,只要将其触 角及翅膀长度输入网络,视其输出模式靠近 )0,1( 亦或 )1,0( ,就可能判断其归属。当然, 有可能出现介于中间无法判断的情况。现在的问题是,如何找到一组适当的权值,实现 上面所设想的网络功能。 2.3 向后传播算法 对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓向后传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。下面就来介绍这一算法。 如前所述,我们希望对应于学习样本中 Af 样品的输出是 )0,1( ,对应于 Apf 的输出 是 )1,0( ,这样的输出称之为理想输出。实际上要精确地作到这一点是不可能的,只能 希望实际输出尽可能地接近理想输出。为清楚起见,把对应于样品 s 的理想输出记为 }{ s iT ,那么 ∑ −= si s i s i OTWE , 2)(2 1)( (9) 度量了在一组给定的权下,实际输出与理想输出的差异,由此,寻找一组恰当的权的问 题,自然地归结为求适当W 的值,使 )(WE 达到极小的问题。将式(8)代入(9),有 ∑∑∑ == −= isjk s kjkij s i IwwTWE , 2 3 1 2 1 )])(([2 1)( ϕϕ (10) 易知,对每一个变量 ijw 或 ijw 而言,这是一个连续可微的非线性函数,为了求得其极 小点与极小值,最为方便的就是使用最速下降法。最速下降法是一种迭代算法,为求出 )(WE 的(局部)极小,它从一个任取的初始点 0W 出发,计算在 0W 点的负梯度方向 — )( 0WE∇ ,这是函数在该点下降最快的方向;只要 0)( 0 ≠∇ WE ,就可沿该方向移动 一小段距离,达到一个新的点 )( 001 WEWW ∇−= η ,η 是一个参数,只要η 足够小, 定能保证 )()( 01 WEWE < 。不断重复这一过程,一定能达到 E 的一个(局部)极小点。 就本质而言,这就是 BP 算法的全部内容,然而,对人工神经网络问题而言,这一算法 的具体形式是非常重要的,下面我们就来给出这一形式表达。 对于隐单元到输出单元的权 ijw 而言,最速下降法给出的每一步的修正量是 -235- ∑∑=−=∂ ∂−=Δ ss s j s i s j s i s i s i ij ij HHhOTw Ew δηϕηη )('][ (11) 此处令 ])[(' s i s i s i s i OTh −= ϕδ (12) 对输入单元到隐单元的权 jkw ∑ −=∂ ∂−=Δ is s j s jij s i s i s i jk jk IhwhOTw Ew , )(')('][ ϕϕηη ∑∑ == s s k s j is s k s jij s i IIhw δηϕδη , )(' (13) 此处 ∑= i s iij s j s j wh δϕδ )(' 从(11)和(13)式可以看出,所有权的修正量都有如下形式,即 ∑=Δ s s q s ppq vw δη (14) 指标 p 对应于两个单元中输出信号的一端,q 对应于输入信号的一端,v 或者代表 H 或 者代表 I 。形式上看来,这一修正是“局部”的,可以看作是 Hebb 律的一种表现形式。 还应注意, s iδ 由实际输出与理想输出的差及 s ih 决定,而 s jδ 则需依赖 s iδ 算出,因此, 这一算法才称为向后传播算法。稍加分析还可知道,利用由(11)~(13)式所给出的 计算安排,较之不考虑 s pδ 的向后传播,直接计算所有含 'ϕ 的原表达式,极大地降低了 计算工作量。这组关系式称作广义 −δ 法则,它们不难推广到一般的多层网络上去。 利用这一迭代算法,最终生成在一定精度内满足要求的 },{ jkij ww 的过程,称为人 工神经网络的学习过程。可以看出,这里所提供的学习机制是元与元之间权的不断调整, 学习样本中任何一个样品所提供的信息,最终将包含在网络的每一个权之中。参数η 的 大小则反映了学习效率。 为了更有效地应用 BP 算法,我们做出如下一些补充说明。 (i)在式(11)与(13)中, jkij ww ΔΔ , 表示为与所有样品 s 有关的求和计算。 实际上,我们还可以每次仅考虑输入一个样品所造成的修正,然后,按照随机选取的顺 序,将所有样品逐个输入,不断重复这一手续,直至收敛到一个满意的解为止。 (ii)在如上的算法中,利用实际输出与理想输出差的平方和作为度量 },{ jkij ww 优 劣的标准,这并不是唯一的度量方式,完全可以从其它的函数形式出发,例如从相对熵 出发,导出相应的算法。 (iii)在如上的讨论中使用的是最速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。 (iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个 -236- 随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。 2.4 蠓虫分类问题的求解 下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下: clear p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90; 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00 1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p); goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]; plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') net=newff(pr,[3,2],{'logsig','logsig'}); net.trainParam.show = 10; net.trainParam.lr = 0.05; net.trainParam.goal = 1e-10; net.trainParam.epochs = 50000; net = train(net,p,goal); x=[1.24 1.80;1.28 1.84;1.40 2.04]'; y0=sim(net,p) y=sim(net,x) §3 处理蠓虫分类的另一种网络方法 3.1 几个有关概念 在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为在教 师监督下的学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组 样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 )0,1( 或 )1,0( ,但实际输出并不如此,一般而言,两个输出单元均 同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。 3.2 最简单的无监督有竞争的学习 本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有教师的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。 -237- 考虑一个仅由输入层与输出层组成的网络系统,输入单元数目与每一样品的测量值 数目相等,输出单元数目适当选取。每一个输入单元与所有输出单元联接,第 j 个输入 元到第i 个输出元的权记为 ijw ,同层单元间无横向联接。无妨假设所有输入数值均已 规化到 ]1,1[− 之间,又因为是有竞争的学习,输出单元只取 0 或 1 两个值,且对应每一 组输入,只有一个输出元取 1。 取 1 的输出元记为 *i ,称之为优胜者.对于任何一组输入 s ,规定优胜者是有最大 净输入的输出元,即对输入 ),,( 1 nIII L= 而言, ∑ ⋅≡= j ijiji IWIwh (15) 取最大值的单元,其中 iW 是输出元i 所有权系数组成的向量,也就是说 IWIW ii ⋅≥⋅* , )( i∀ (16) 如果权向量是按照 ∑ = j ijw 12 的方式标准化的,(16)式等价于 |||| * IWIW ii −≤− , )( i∀ (17) 即优胜者是其标准化权向量最靠近输入向量的输出元。令 1* =iO ,其余的输出 0=iO 。这样的输出规定了输入向量的类别,但为了使这种分类方式有意义,问题化 为如何将学习样本中的所有样品,自然地划分为聚类,并对每一聚类找出适当的权向量。 为此,采用如下的算法:随机取定一组不大的初始权向量,注意不使它们有任何对称性。 然后,将已知样品按照随机顺序输入网络。对输入样品 s ,按上文所述确定优胜者 *i , 对所有与 *i 有关的权作如下修正 )( ** ji s jji wIw −=Δ η (18) 所有其它输出单元的权保持不变。注意到 1* =iO , )(0 *iiOi ≠= ,所有权的修正公式 可统一表示为 )( ** ji s jiji wIOw −=Δ η 这一形式也可视为 Hebb 律的一种表现。(18)式的几何意义是清楚的,每次修正将优 胜者的权向量向输入向量移近一小段距离,这使得同一样品再次输入时, *i 有更大的 获胜可能。可以合理地预期,反复重复以上步骤,使得每个输出单元对应了输入向量的 一个聚类,相应的权向量落在了该聚类样品的重心附近。当然,这只是一个极不严密的 说明。 特别应当指出,上述算法,对于事先按照 ∑ =1jI 标准化了的输入数据更为适用, 整个过程不难由计算机模拟实现。 为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。 首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,最终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。 -238- 另外一个问题是这一算法的收敛性。如果式(18)或(19)中反映学习效率的参数 η 取为一个固定常数,那么权向量永远不会真正在某一有限点集上稳定下来。因此,应 当考虑在公式中引进随学习时间而变化的收敛因子。例如,取 att −== 0)( ηηη , 10 ≤< a 。这一因子的适当选取是极为重要的,η 下降太慢,无疑增加了不必要工作 量,η 下降太快,则会使学习变得无效。 3.3 LVQ 方法 上述有竞争学习的一个最重要应用是数据压缩中的向量量子化方法(Vector Quantization)。它的基本想法是,把一个给定的输入向量集合 sI 分成 M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别 确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类 别由 M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向 量找到最靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习 直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。 一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分 类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。 在 LVQ 中,对于任一输入向量,仍按无监督有竞争的方式选出优胜者 *i ,但权的 修正规则则依输入向量的类别与 *i 所代表的是否一致而不同,确切地说,令 ⎪⎩ ⎪⎨ ⎧ −− − =Δ 不一致情况 一致情况 )( )( * * * ji s j ji s j ji wI wI w η η 前一种情况,修正和无监督的学习一致,权朝向样品方向移动一小段距离;后一种 则相反,权向离开样品方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: clear p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90; 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00 1.28,2.00;1.30,1.96]; p=[p1;p2]' pr=minmax(p) goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)] net = newlvq(pr,4,[0.6,0.4]) net = train(net,p,goal) Y = sim(net,p) x=[1.24 1.80;1.28 1.84;1.40 2.04]' sim(net,x) 习 题 十 九 1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题 -239- (i) 1001,1)( ≤≤= xxxf (ii) 20,sin)( π≤≤= xxxf 对每一函数要完成如下工作: ① 获取两组数据,一组作为训练集,一组作为测试集; ② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。 2. 给定待拟合的曲线形式为 )2sin(4.05.0)( xxf π+= 在 )(xf 上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差 05.0=σ 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。 -240- 第二十章 偏微分方程的数值解 自然科学与工程技术中种种运动发展过程与平衡现象各自遵守一定的规律。这些规 律的定量表述一般地呈现为关于含有未知函数及其导数的方程。我们将只含有未知多元 函数及其偏导数的方程,称之为偏微分方程。 方程中出现的未知函数偏导数的最高阶数称为偏微分方程的阶。如果方程中对于未 知函数和它的所有偏导数都是线性的,这样的方程称为线性偏微分方程,否则称它为非 线性偏微分方程。 初始条件和边界条件称为定解条件,未附加定解条件的偏微分方程称为泛定方程。 对于一个具体的问题,定解条件与泛定方程总是同时提出。定解条件与泛定方程作为一 个整体,称为定解问题。 §1 偏微分方程的定解问题 各种物理性质的定常(即不随时间变化)过程,都可用椭圆型方程来描述。其最典 型、最简单的形式是泊松(Poisson)方程 ),(2 2 2 2 yxfy u x uu =∂ ∂+∂ ∂=Δ (1) 特别地,当 0),( ≡yxf 时,即为拉普拉斯(Laplace)方程,又称为调和方程 02 2 2 2 =∂ ∂+∂ ∂=Δ y u x uu (2) 带有稳定热源或内部无热源的稳定温度场的温度分布,不可压缩流体的稳定无旋流动及 静电场的电势等均满足这类方程。 Poisson 方程的第一边值问题为 ⎪⎩ ⎪⎨ ⎧ Ω∂=Γ= Ω∈=∂ ∂+∂ ∂ Γ∈ ),(|),( ),(),( ),( 2 2 2 2 yxyxu yxyxfy u x u yx ϕ (3) 其中 Ω 为以Γ 为边界的有界区域,Γ 为分段光滑曲线, ΓΩ U 称为定解区域, ),(),,( yxyxf ϕ 分别为 ΓΩ, 上的已知连续函数。 第二类和第三类边界条件可统一表示成 ),(),( yxun u yx ϕα =⎟ ⎠ ⎞⎜ ⎝ ⎛ +∂ ∂ Γ∈ (4) 其中 n 为边界 Γ 的外法线方向。当 0=α 时为第二类边界条件, 0≠α 时为第三类边界 条件。 在研究热传导过程,气体扩散现象及电磁场的传播等随时间变化的非定常物理问 题时,常常会遇到抛物型方程。其最简单的形式为一维热传导方程 )0(02 2 >=∂ ∂−∂ ∂ ax uat u (5) 方程(5)可以有两种不同类型的定解问题: 初值问题(也称为 Cauchy 问题) -241- ⎪⎩ ⎪⎨ ⎧ +∞<<∞−= +∞<<∞−>=∂ ∂−∂ ∂ xxxu xtx uat u )()0,( ,002 2 ϕ (6) 初边值问题 ⎪⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ ≤≤== = <<<<=∂ ∂−∂ ∂ Tttgtlutgtu xxu lxTtx uat u 0),(),(),(),0( )()0,( 0,00 21 2 2 ϕ (7) 其中 )(),(),( 21 tgtgxϕ 为已知函数,且满足连接条件 )0()(),0()0( 21 glg == ϕϕ 问题(7)中的边界条件 )(),(),(),0( 21 tgtlutgtu == 称为第一类边界条件。第二类和 第三类边界条件为 Tttgutx u Tttgutx u lx x ≤≤=⎥⎦ ⎤ ⎢⎣ ⎡ +∂ ∂ ≤≤=⎥⎦ ⎤ ⎢⎣ ⎡ −∂ ∂ = = 0),()( 0),()( 22 1 0 1 λ λ (8) 其中 0)(,0)( 21 ≥≥ tt λλ 。当 0)()( 21 ≡= tt λλ 时,为第二类边界条件,否则称为第三 类边界条件。 双曲型方程的最简单形式为一阶双曲型方程 0=∂ ∂+∂ ∂ x uat u (9) 物理中常见的一维振动与波动问题可用二阶波动方程 2 2 2 2 2 x uat u ∂ ∂=∂ ∂ (10) 描述,它是双曲型方程的典型形式。方程(10)的初值问题为 ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ +∞<<∞−=∂ ∂ +∞<<∞−= +∞<<∞−>∂ ∂=∂ ∂ = xxt u xxxu xtx uat u t )( )()0,( ,0 0 2 2 2 2 2 φ ϕ (11) 边界条件一般也有三类,最简单的初边值问题为 -242- ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ ≤≤== ≤≤=∂ ∂= <<>∂ ∂=∂ ∂ = Tttgtlutgtu lxxt uxxu lxtx uat u t 0)(),(),(),0( 0)(),()0,( 0,0 21 0 2 2 2 2 2 φϕ 如果偏微分方程定解问题的解存在,唯一且连续依赖于定解数据(即出现在方程 和定解条件中的已知函数),则此定解问题是适定的。可以证明,上面所举各种定解问 题都是适定的。 §2 偏微分方程的差分解法 差分方法又称为有限差分方法或网格法,是求偏微分方程定解问题的数值解中应用 最广泛的方法之一。它的基本思想是:先对求解区域作网格剖分,将自变量的连续变化 区域用有限离散点(网格点)集代替;将问题中出现的连续变量的函数用定义在网格点 上离散变量的函数代替;通过用网格点上函数的差商代替导数,将含连续变量的偏微分 方程定解问题化成只含有限个未知数的代数方程组(称为差分格式)。如果差分格式有 解,且当网格无限变小时其解收敛于原微分方程定解问题的解,则差分格式的解就作为 原问题的近似解(数值解)。因此,用差分方法求偏微分方程定解问题一般需要解决以 下问题: (i)选取网格; (ii)对微分方程及定解条件选择差分近似,列出差分格式; (iii)求解差分格式; (iv)讨论差分格式解对于微分方程解的收敛性及误差估计。 下面我们只对偏微分方程的差分解法作一简要的介绍。 2.1 椭圆型方程第一边值问题的差分解法 以 Poisson 方程(1)为基本模型讨论第一边值问题的差分方法。 考虑 Poisson 方程的第一边值问题(3) ⎪⎩ ⎪⎨ ⎧ Ω∂=Γ= Ω∈=∂ ∂+∂ ∂ Γ∈ ),(|),( ),(),( ),( 2 2 2 2 yxyxu yxyxfy u x u yx ϕ 取 τ,h 分别为 x 方向和 y 方向的步长,以两族平行线 τjyykhxx jk ==== , ),2,1,0,( L±±=jk 将定解区域剖分成矩形网格。节点的全体记为 },,,|),{( 为整数jijykhxyxR jkjk τ=== 。定解区域内部的节点称为内点,记内点 集 ΩIR 为 τhΩ 。边界Γ 与网格线的交点称为边界点,边界点全体记为 τhΓ 。与节点 ),( jk yx 沿 x 方向或 y 方向只差一个步长的点 ),( 1 jk yx ± 和 ),( 1±jk yx 称为节点 ),( jk yx 的相邻节点。如果一个内点的四个相邻节点均属于 ΓΩ U ,称为正则内点,正 则内点的全体记为 )1(Ω ,至少有一个相邻节点不属于 ΓΩ U 的内点称为非正则内点, 非正则内点的全体记为 )2(Ω 。我们的问题是要求出问题(3)在全体内点上的数值解。 为简便记,记 ),(),,(),(),,(),( , jkjkjkjk yxffyxujkuyxjk === 。对正则内点 -243- )1(),( Ω∈jk ,由二阶中心差商公式 )(),1(),(2),1( 2 2 ),( 2 2 hOh jkujkujku x u jk +−+−+=∂ ∂ )()1,(),(2)1,( 2 2 ),( 2 2 τ τ Ojkujkujku y u jk +−+−+= ∂ ∂ Poisson 方程(1)在点 ),( jk 处可表示为 )( )1,(),(2)1,(),1(),(2),1( 22 , 22 τ τ ++= −+−++−+−+ hOf jkujkujku h jkujkujku jk (12) 在式(12)中略去 )( 22 τ+hO ,即得与方程(1)相近似的差分方程 jk jkjkjkjkjkjk fuuu h uuu ,2 1,,1, 2 ,1,,1 22 =+−++− −+−+ τ (13) 式(13)中方程的个数等于正则内点的个数,而未知数 jku , 则除了包含正则内点处 解u 的近似值,还包含一些非正则内点处u 的近似值,因而方程个数少于未知数个数。 在非正则内点处 Poisson 方程的差分近似不能按式(13)给出,需要利用边界条件得到。 边界条件的处理可以有各种方案,下面介绍较简单的两种。 (i) 直接转移 (ii) 线性插值 由式(13)所给出的差分格式称为五点菱形格式,实际计算时经常取 τ=h ,此时 五点菱形格式可化为 jkjkjkjkjkjk fuuuuuh ,,1,1,,1,12 )4(1 =−+++ −+−+ (14) 简记为 jkjk fuh ,,2 1 =◊ (15) 其中 jkjkjkjkjkjk uuuuuu ,1,1,,1,1, 4−+++=◊ −+−+ 。 求解差分方程组最常用的方法是同步迭代法,同步迭代法是最简单的迭代方式。除 边界节点外,区域内节点的初始值是任意取定的。 例 1 用五点菱形格式求解 Laplace 方程第一边值问题 ⎪⎩ ⎪⎨ ⎧ Ω∂=Γ++= Ω∈=∂ ∂+∂ ∂ Γ∈ ])1lg[(|),( ),( 0 22 ),( 2 2 2 2 yxyxu yxy u x u yx 其中 }1,0|),{( ≤≤=Ω yxyx 。取 3 1== τh 。 当 τ=h 时,利用点 )1,1(),1,1(),,( +±−± jkjkjk 构造的差分格式 jkjkjkjkjkjk fuuuuuh ,,1,11,11,11,12 )4(2 1 =−+++ −−+−−+++ (16) ( )1,,1,0( −= mj L (22 == == ),0( ),( ,0 2, gtuu gtluu ijjj jjjn kkk xuu ϕ== )0,(0, ),,1,0,1,0( nkk LL =±= 或 (21) 对初始条件及第一类边界条件,可直接得到 为用差分方程求解定解问题(6),(7)等,还需对定解条件进行离散化。 2.2.2 初、边值条件的处理 τ (20) uuuauu jkjkjkjkjk h ,1,,11,1, =+−−− −+−+ 2 2 02 τ (19) uuuauu jkjkjkjkjk h ,1,,11,, =+−−− −+− 2 02 τ (18) uuuauu jkjkjkjkjk h ,1,,1,1, =+−−− −++ 2 02 由此得到一维热传导方程的不同的差分近似 jkujkujkuajkujku +=−+−+−−−+ ττ 2 hOh )1,()1,( 2 2 )(),1(),(2),1( jkujkujkuajkujku +=−+−+−−− ττ 2 hOh )(),1(),(2),1()1,(),( 2 jkujkujkuajkujku +=−+−+−−+ ττ 2 hOh )(),1(),(2),1(),()1,( 2 阶中心差商公式,一维热传导方程(5)可分别表示为 ∂ 采用二 ∂ u x 2 ∂ 分别采用向前、向后及中心差商公式,对 2 ∂ u t 在网格内点 ),( jk 处,对 2.2.1 微分方程的差分近似 )(22 jj tλλ = 。 ),(),( jk yxujku = , )( kk xϕϕ = , )(11 jj tgg = , )(22 jj tgg = , )(11 jj tλλ = , 格,节点为 ),2,1,0,,2,1,0)(,( LL =±±= jktx jk 。为简便起见,记 ),(),( jk yxjk = , 线 ),2,1,0( L±±=== kkhxx k , ),2,1,0( L=== jjtt j τ ,将 xt 平面剖分成矩形网 首先对 xt 平面进行网格剖分。分别取 τ,h 为 x 方向与t 方向的步长,用两族平行直 为基本模型讨论适用于抛物型方程定解问题的几种差分格式。 u uat ∂ at ∂−∂ >=∂ 2 )0(02 以一维热传导方程(5) 2.2 抛物型方程的差分解法 jkjkjkjkjkjk uuuuuu ,1,11,11,11,1, 4−+++= −−+−−+++ 。 ٱ其中 jkjk fu ,, = (17) ٱ h 1 22 称为五点矩形格式,简记为 -244- -245- 其中 τ Tmh ln == , 。 对第二、三类边界条件则需用差商近似。下面介绍两种较简单的处理方法。 (i)在左边界 )0( =x 处用向前差商近似偏导数 x u ∂ ∂ ,在右边界 )( lx = 处用向后差 商近似偏导数 x u ∂ ∂ ,即 )(),1(),( )(),0(),1( ),( ),0( hOh jnujnu x u hOh juju x u jn j +−−=∂ ∂ +−=∂ ∂ ),,1,0( mj L= 即得边界条件(8)的差分近似为 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =+− =−− − jjnj jnjn jjj jj guh uu guh uu 2,2 ,1, 1,01 ,0,1 λ λ ),,1,0( mj L= (23) (ii)用中心差商近似 x u ∂ ∂ ,即 )(2 ),1(),1( )(2 ),1(),1( 2 ),( 2 ),0( hOh jnujnu x u hOh juju x u jn j +−−+=∂ ∂ +−−=∂ ∂ ),,1,0( mj L= 则得边界条件的差分近似为 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =+− =−− −+ − jjnj jnjn jjj jj guh uu guh uu 2,2 ,1,1 1,01 ,1,1 2 2 λ λ ),,1,0( mj L= (24) 这样处理边界条件,误差的阶数提高了,但式(24)中出现定解区域外的节点 ),1( j− 和 ),1( jn + ,这就需要将解拓展到定解区域外。可以通过用内节点上的u 值插值求出 ju ,1− 和 jnu ,1+ ,也可以假定热传导方程(5)在边界上也成立,将差分方程扩展到边界节点 上,由此消去 ju ,1− 和 jnu ,1+ 。 2.2.3 几种常用的差分格式 下面我们以热传导方程的初边值问题(7)为例给出几种常用的差分格式。 (i) 古典显式格式 为便于计算,令 2h ar τ= ,式(18)改写成以下形式 -246- jkjkjkjk ruurruu ,1,,11, )21( −++ +−+= 将式(18)与(21),(22)结合,我们得到求解问题(7)的一种差分格式 ⎪ ⎩ ⎪ ⎨ ⎧ === == −=−=+−+= −++ ),,2,1( , ),,2,1( )1,,1,0,1,,2,1( )21( 2,1,0 0, ,1,,11, mjgugu nku mjnkruurruu jjnjj kk jkjkjkjk L L LL ϕ (25) 由于第 0 层 )0( =j 上节点处的u 值已知 )( 0, kku ϕ= ,由式(25)即可算出u 在第一层 )1( =j 上节点处的近似值 1,ku 。重复使用式(25),可以逐层计算出各层节点的近似值。 (ii)古典隐式格式 将(19)整理并与式(21),(22)联立,得差分格式如下 ⎪ ⎩ ⎪ ⎨ ⎧ === == −=−=+−+= +−++++ ),,1,0( , ),,1,0( )1,,1,0,1,,2,1)(2( 2,1,0 0, 1,11,1,1,1, mjgugu nku mjnkuuuruu jjnjj kk jkjkjkjkjk L L LL ϕ (26) 其中 2h ar τ= 。虽然第 0 层上的u 值仍为已知,但不能由式(30)直接计算以上各层节 点上的值 jku , ,故差分格式(26)称为古典隐式格式。 (iii)杜福特—弗兰克尔(DoFort—Frankel)格式 DoFort—Frankel 格式是三层显式格式,它是由式(24)与(25),(26)结合得到 的。具体形式如下: ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ === == −=−=+ −+++= −−++ ),,1,0( , ),,1,0( )1,,2,1,1,,2,1(21 21)(21 2 2,1,0 0, 1,,1,11, mjgugu nku mjnkur ruur ru jjnjj kk jkjkjkjk L L LL ϕ (27) 用这种格式求解时,除了第 0 层上的值 0,ku 由初值条件(21)得到,必须先用二层格式 求出第 1 层上的值 1,ku ,然后再按格式(27)逐层计算 ),,3,2(, mju jk L= 。 2.3 双曲型方程的差分解法 对二阶波动方程(10) 2 2 2 2 2 x uat u ∂ ∂=∂ ∂ 如果令 x uvt uv ∂ ∂=∂ ∂= 21 , ,则方程(10)可化成一阶线性双曲型方程组 ⎪⎪ ⎩ ⎪⎪ ⎨ ⎧ ∂ ∂=∂ ∂ ∂ ∂=∂ ∂ x v t v x vat v 12 221 (28) 记 Tvvv ),( 21= ,则方程组(28)可表成矩阵形式 -247- x vAx va t v ∂ ∂=∂ ∂ ⎥ ⎦ ⎤ ⎢ ⎣ ⎡=∂ ∂ 01 0 2 (29) 矩阵 A 有两个不同的特征值 a±=λ ,故存在非奇异矩阵 P ,使得 Λ=⎥⎦ ⎤ ⎢⎣ ⎡ −=− a aPAP 0 01 作变换 TwwPvw ),( 21== ,方程组(29)可化成 x w t w ∂ ∂Λ=∂ ∂ (30) 方程组(30)由两个独立的一阶双曲型方程联立而成。因此下面主要讨论一阶双曲型方 程的差分解法。 考虑一阶双曲型方程的初值问题 ⎪⎩ ⎪⎨ ⎧ +∞<<∞−= +∞<<∞−>=∂ ∂+∂ ∂ xxxu xtx uat u )()0,( 0 0 ϕ (31) 与抛物型方程的讨论类似,仍将 xt 平面剖分成矩形网格。取 x 方向步长为 h ,t 方向步 长为τ ,网格线为 ),,2,1,0( L±±=== kkhxx k ),2,1,0( L=== jjtt j τ 。为简便起 见,记 ),(),( jk yxjk = , ),(),( jk yxujku = , )( kk xϕϕ = 。 以不同的差商近似偏导数,可以得到方程(9)的不同的差分近似 0,,1,1, =−+− ++ h uuauu jkjkjkjk τ (32) 0,1,,1, =−−− −+ h uuauu jkjkjkjk τ (33) 02 ,1,1,1, =−−− −++ h uuauu jkjkjkjk τ (34) 结合离散化的初始条件,可以得到几种简单的差分格式。 §3 一维状态空间的偏微分方程的 MATLAB 解法 3.1 工具箱命令介绍 MATLAB 提供了一个指令 pdepe,用以解以下的 PDE 方程式 ),,,()),,,((),,,( x uutxsx uutxfxxxt u x uutxc mm ∂ ∂+∂ ∂ ∂ ∂=∂ ∂ ∂ ∂ − (35) 其中时间介于 fttt ≤≤0 之间,而位置 x 则介于 ],[ ba 有限区域之间。 m 值表示问题的 对称性,其可为 0,1 或 2,分别表示平板(slab),圆柱(cylindrical)或球体(spherical)的情 形。因而,如果 0>m ,则 a 必等于b ,也就是说其具有圆柱或球体的对称关系。同时, 式中 ),,,( xuutxf ∂∂ 一项为流通量(flux),而 ),,,( xuutxs ∂∂ 为来源(source)项。 ),,,( xuutxc ∂∂ 为偏微分方程的对角线系数矩阵。若某一对角线元素为 0,则表示该偏 微分方程为椭圆型偏微分方程,若为正值(不为 0),则为拋物型偏微分方程。请注意 c 的 对角线元素一定不全为 0。偏微分方程初始值可表示为 -248- )(),( 00 xvtxu = (36) 而边界条件为 0),,,(),(),,( =∂∂+ xuutxftxqutxp (37) 其中 x 为两端点位置,即 a 或b 用以解含上述初始值及边界值条件的偏微分方程的 MATLAB 命令 pdepe 的用法如 下: ),,,,,,( optionstspanxmeshbcfunicfunpdepempdepesol = 其中 m 为问题之对称参数; xmesh 为空间变量 x 的网格点(mesh)位置向量,即 ],,,[ 10 Nxxxxmesh L= ,其中 ax =0 (起点), bxN = (终点)。 tspan 为时间变量t 的向量,即 ],,,[ 10 Mttttspan L= ,其 中 0t 为起始时间, Mt 为 终点时间。 pdefun 为使用者提供的 pde 函数文件。其函数格式如下: [] ),,,(,, dudxutxpdefunsfc = 亦即,使用者仅需提供偏微分方程中的系数向量。 c , f 和 s 均为行(column)向量,而 向量 c 即为矩阵 c 的对角线元素。 icfun 提供解u 的起始值,其格式为 )(xicfunu = 值得注意的是u 为行向量。 bcfun 使用者提供的边界条件函数,格式如下: []( )turxrulxlbcfunqlprqlpl ,,,,,,, = 其中ul 和ur 分别表示左边界 )( bxl = 和右边界 )( axr = u 的近似解。输出变量中,pl 和 ql 分别表示左边界 p 和 q 的行向量,而 pr 和 qr 则为右边界 p 和 q 的行向量。 sol 为解答输出。 sol 为多维的输出向量, ):(:, isol 为 iu 的输出,即 ):,(:, isolui = 。 元素 ),,(),( ikjsolkjui = 表示在 )( jtspant = 和 )(kxmeshx = 时 iu 之答案。 options 为求解器的相关解法参数。详细说明参见 odeset 的使用方法。 注: 1. MATLAB PDE 求解器 pdepe 的算法,主要是将原来的椭圆型和拋物线型偏微分 方程转化为一组常微分方程。此转换的过程是基于使用者所指定的 mesh 点,以二阶空 间离散化(spatial discretization)技术为之(Keel and Berzins,1990),然后以 ode15s 的指令 求解。采用 ode15s 的 ode 解法,主要是因为在离散化的过程中,椭圆型偏微分方程被 转化为一组代数方程,而拋物线型的偏微分方程则被转化为一组联立的微分方程。因而, 原偏微分方程被离散化后,变成一组同时伴有微分方程与代数方程的微分代数方程组, 故以 ode15s 便可顺利求解。 2. x 的取点(mesh)位置对解的精确度影响很大,若 pdepe 求解器给出“…has difficulty finding consistent initial considition”的讯息时,使用者可进一步将 mesh 点取密 一点,即增加 mesh 点数。另外,若状态u 在某些特定点上有较快速的变动时,亦需将 此处的点取密集些,以增加精确度。值得注意的是 pdepe 并不会自动做 xmesh 的自动取 点,使用者必须观察解的特性,自行作取点的操作。一般而言,所取的点数至少需大于 3 以上。 3. tspan 的选取主要是基于使用者对那些特定时间的状态有兴趣而选定。而间距 -249- (step size)的控制由程序自动完成。 4. 若要获得特定位置及时间下的解,可配合以 pdeval 命令。使用格式如下: [] ),,,(, xoutuixmeshmpdevalduoutdxuout = 其中 m 代表问题的对称性。m =0 表示平板;m =1 表示圆柱体;m =2 表示球体。其意 义同 pdepe 中的自变量 m 。 xmesh 为使用者在 pdepe 中所指定的输出点位置向量。 01[,, , ]Nxmesh x x x= L 。 ui 即 ):,,( ijsol 。也就是说其为 pdepe 输出中第 i 个输出ui 在各点位置 xmesh 处, 时间固定为 )( jtspant j = 下的解。 xout 为所欲内插输出点位置向量。此为使用者重新指定的位置向量。 uout 为基于所指定位置 xout ,固定时间 ft 下的相对应输出。 duoutdx 为相对应的 dxdu 输出值。 ref. Keel,R.D. and M. Berzins,“A Method for the Spatial Discritization of Parabolic Equations in One Space Variable”,SIAM J. Sci. and Sat. Comput.,Vol.11,pp.1-32,1990. 以下将以数个例子,详细说明 pdepe 的用法。 3.2 求解一维偏微分方程 例 2 试解以下之偏微分方程式 2 2 2 x u t u ∂ ∂=∂ ∂π 其中 10 ≤≤ x ,且满足以下之条件限制式 (i)起始值条件 IC: )sin()0,( xxu π= (ii)边界条件 BC1: 0),0( =tu BC2: 0),1( =∂ ∂+− x tue tπ 注:本问题的解析解为 )sin(),( xetxu t π−= 解 下面将叙述求解的步骤与过程。当完成以下各步骤后,可进一步将其汇总为一 主程序 ex20_1.m,然后求解。 步骤 1 将欲求解的偏微分方程改写成如式的标准式。 0002 +⎟ ⎠ ⎞⎜ ⎝ ⎛ ∂ ∂ ∂ ∂=∂ ∂ x uxxxt uπ 此即 ()2,,, π=∂∂ xuutxc ()x uxuutxf ∂ ∂=∂∂,,, ()0,,, =∂∂ xuutxs 和 0=m 。 步骤 2 编写偏微分方程的系数向量函数。 function [c,f,s]=ex20_1pdefun(x,t,u,dudx) -250- c=pi^2; f=dudx; s=0; 步骤 3 编写起始值条件。 function u0=ex20_1ic(x) u0=sin(pi*x); 步骤 4 编写边界条件。在编写之前,先将边界条件改写成标准形式,如式(37), 找出相对应的 )(⋅p 和 )(⋅q 函数,然后写出 MATLAB 的边界条件函数,例如,原边界条 件可写成 BC1: 0,0),0(0),0( ==∂ ∂⋅+ xtxtu BC2: 1,0),1(1 ==∂ ∂⋅+− xtx ue tπ 即 (0, ), 0,pl u t ql== 和 ,1tpre qrπ −== 因而,边界条件函数可编写成 function [pl,ql,pr,qr]=ex20_1bc(xl,ul,xr,ur,t) pl=ul; ql=0; pr=pi*exp(-t); qr=1; 步骤 5 取点。例如 x=linspace(0,1,20); %x 取 20 点 t=linspace(0,2,5); %时间取 5 点输出 步骤 6 利用 pdepe 求解。 m=0; %依步骤 1 之结果 sol=pdepe(m,@ex20_1pdefun,@ex20_1ic,@ex20_1bc,x,t); 步骤 7 显示结果。 u=sol(:,:,1); surf(x,t,u) title('pde 数值解') xlabel('位置') ylabel('时间' ) zlabel('u') 若要显示特定点上的解,可进一步指定 x 或 t 的位置,以便绘图。例如,欲了解时 间为 2(终点)时,各位置下的解,可输入以下指令(利用 pdeval 指令): figure(2); %绘成图 2 M=length(t); %取终点时间的下标 xout=linspace(0,1,100); %输出点位置 [uout,dudx]=pdeval(m,x,u(M,:),xout); plot(xout,uout); %绘图 title('时间为 2 时,各位置下的解') xlabel('x') ylabel('u') -251- 综合以上各步骤,可写成一个程序求解例 2。其参考程序如下: function ex20_1 %************************************ %求解一维热传导偏微分方程的一个综合函数程序 %************************************ m=0; x=linspace(0,1,20); %xmesh t=linspace(0,2,20); %tspan %************ %以 pde 求解 %************ sol=pdepe(m,@ex20_1pdefun,@ex20_1ic,@ex20_1bc,x,t); u=sol(:,:,1); %取出答案 %************ %绘图输出 %************ figure(1) surf(x,t,u) title('pde 数值解') xlabel('位置 x') ylabel('时间 t' ) zlabel('数值解 u') %************* %与解析解做比较 %************* figure(2) surf(x,t,exp(-t)'*sin(pi*x)); title('解析解') xlabel('位置 x') ylabel('时间 t' ) zlabel('数值解 u') %***************** %t=tf=2 时各位置之解 %***************** figure(3) M=length(t); %取终点时间的下表 xout=linspace(0,1,100); %输出点位置 [uout,dudx]=pdeval(m,x,u(M,:),xout); plot(xout,uout); %绘图 title('时间为 2 时,各位置下的解') xlabel('x') ylabel('u') %****************** %pde 函数 %****************** function [c,f,s]=ex20_1pdefun(x,t,u,dudx) c=pi^2; f=dudx; s=0; %****************** -252- %初始条件函数 %****************** function u0=ex20_1ic(x) u0=sin(pi*x); %****************** %边界条件函数 %****************** function [pl,ql,pr,qr]=ex20_1bc(xl,ul,xr,ur,t) pl=ul; ql=0; pr=pi*exp(-t); qr=1; 例 3 试解以下联立的偏微分方程系统 )(024.0 212 1 2 1 uuFx u t u −−∂ ∂=∂ ∂ )(170.0 212 2 2 2 uuFx u t u −+∂ ∂=∂ ∂ 其中 ))(46.11exp())(73.5exp()( 212121 uuuuuuF −−−−=− ,且 10 ≤≤ x 和 0≥t 。 此联立偏微分方程系统满足以下初边值条件。 (i)初值条件 1)0,(1 =xu 0)0,(2 =xu (ii)边值条件 0),0(1 =∂ ∂ tx u 0),0(2 =tu 1),1(1 =tu 0),1(2 =∂ ∂ tx u 解 步骤 1:改写偏微分方程为标准式 ⎥⎦ ⎤ ⎢⎣ ⎡ − −−+ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ ∂ ∂=⎥⎦ ⎤ ⎢⎣ ⎡ ∂ ∂ ⎥⎦ ⎤ ⎢⎣ ⎡ • )( )( 170.0 024.0 *1 1 21 21 2 1 2 1 uuF uuF x u x u xu u t 因此 ⎥⎦ ⎤ ⎢⎣ ⎡= 1 1c ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ = x u x u f 2 1 170.0 024.0 -253- ⎥⎦ ⎤ ⎢⎣ ⎡ − −−= )( )( 21 21 uuF uuFs 和 0=m 。另外,左边界条件( 0x = 处)。写成 ⎥⎦ ⎤ ⎢⎣ ⎡= ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ ∗⎥⎦ ⎤ ⎢⎣ ⎡+⎥⎦ ⎤ ⎢⎣ ⎡ • 0 0 170.0 024.0 0 10 2 1 2 x u x u u 即 ⎥⎦ ⎤ ⎢⎣ ⎡= 2 0 upl , ⎥⎦ ⎤ ⎢⎣ ⎡= 0 1ql 同理,右边界条件( 1x = 处)为 ⎥⎦ ⎤ ⎢⎣ ⎡= ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ ∗⎥⎦ ⎤ ⎢⎣ ⎡+⎥⎦ ⎤ ⎢⎣ ⎡ − • 0 0 170.0 024.0 1 0 0 1 2 1 1 x u x u u 即 ⎥⎦ ⎤ ⎢⎣ ⎡ −= 0 11upr , ⎥⎦ ⎤ ⎢⎣ ⎡= 1 0qr 步骤 2:编写偏微分方程的系数向量函数。 function [c,f,s]=ex20_2pdefun(x,t,u,dudx) c=[1 1]'; f=[0.024 0.170]'.*dudx; y=u(1)-u(2); F=exp(5.73*y)-exp(-11.47*y); s=[-F F]'; 步骤 3:编写初始条件函数 function u0=ex20_2ic(x) u0=[1 0]'; 步骤 4:编写边界条件函数 function [pl,ql,pr,qr]=ex20_2bc(xl,ul,xr,ur,t) pl=[0 ul(2)]'; ql=[1 0]'; pr=[ur(1)-1 0]'; qr=[0 1]'; 步骤 5: 取点。 由于此问题的端点均受边界条件的限制,且时间t 很小时状态的变动很大(由多次求 解后的经验得知),故在两端点处的点可稍微密集些。同时对于t 小处亦可取密一些。例 如, x=[0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1]; t=[0 0.005 0.01 0.05 0.1 0.5 1 1.5 2]; 以上几个主要步骤编写完成后,事实上就可直接完成主程序来求解。此问题的参考 程序如下: function ex20_2 %*************************************** -254- %求解一维偏微分方程组的一个综合函数程序 %*************************************** m=0; x=[0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1]; t=[0 0.005 0.01 0.05 0.1 0.5 1 1.5 2]; %************************************* %利用 pdepe 求解 %************************************* sol=pdepe(m,@ex20_2pdefun,@ex20_2ic,@ex20_2bc,x,t); u1=sol(:,:,1); %第一个状态之数值解输出 u2=sol(:,:,2); %第二个状态之数值解输出 %************************************* %绘图输出 %************************************* figure(1) surf(x,t,u1) title('u1 之数值解') xlabel('x') ylabel('t') % figure(2) surf(x,t,u2) title('u2 之数值解') xlabel('x') ylabel('t') %*************************************** %pde 函数 %*************************************** function [c,f,s]=ex20_2pdefun(x,t,u,dudx) c=[1 1]'; f=[0.024 0.170]'.*dudx; y=u(1)-u(2); F=exp(5.73*y)-exp(-11.47*y); s=[-F F]'; %**************************************** %初始条件函数 %**************************************** function u0=ex20_2ic(x) u0=[1 0]'; %**************************************** %边界条件函数 %**************************************** function [pl,ql,pr,qr]=ex20_2bc(xl,ul,xr,ur,t) pl=[0 ul(2)]'; ql=[1 0]'; pr=[ur(1)-1 0]'; qr=[0 1]'; 3.3 化工应用实例 例 4 触煤反应装置内温度及转换率的分布 -255- 以外部热交换式的管形固定层触煤反应装置,进行苯加氢反应产生环己烷。此反应 系统之质量平衡及热平衡方程式如下: 0)(1 2 2 =Δ−+⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ∂ ∂+∂ ∂+∂ ∂− p rBA p e GC Hr r T rr T GC k L T ρ 01 0 2 2 =+⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ∂ ∂+∂ ∂+∂ ∂− Gy Mr r f rr f u D L f arBAe ρ 其中T 为温度(℃), f 为反应率,L 为轴向距离,r 为径向距离。此系统的边界条件为 0=L , )(0 rTT = , )(0 rff = 0=r , 0=∂ ∂=∂ ∂ r f r T wrr = , )( wwe TThr Tk −=∂ ∂− wrr = , 0=∂ ∂ r f 此外,式中之相关数据及操作条件如下: (i)反应速率式 23H 苯氢环己烷 图 1 反应示意图 4 33 )1( CCBBHH BHBH A PKPKPK PPKkKr +++= 其中 P 表示分压(atm),而速率参数为 RRTK 3.3212100ln +−= RRTK H 9.3115500ln −= RRTK B 1.2311200ln −= RRTKC 4.198900ln −= 上式中,下标 B,H 及 C 分别代表苯,氢及环己烷。R 为理想气体常数(1.987cal/mol·K)。 (ii)操作条件及物性数据 总压 atmPt 25.1= 反应管管径 cmrw 5.2= 壁温 100=wT ℃ 质量速度 hrmkgG ⋅= 2631 苯对氢之莫耳流量比 30=m 反应管入口的苯之莫耳分率 0323.00 =y 反应气体之平均分子量 47.4=avM -256- 触煤层密度 31200 mkgPB = 流体平均比热 molkgkcalCP −= 74.1 反应热 molkgkcalH r −−=Δ 49250 整体传热系数 Chrmkcalh 02 0 8.65 ⋅⋅= 进料温度 125)0( =T ℃ 反应管管长 cmL 45= 流速 hrmu 03.8= 有效热传导系数 ChrmkcalKe 065.0 ⋅⋅= 壁境膜传热系数 Chrmkcalhw 02112 ⋅⋅= 有效扩散系数 hrmDe 2755.0= 题意解析: 因反应速率式 Ar 与分压有关,而分压又与反应率 f 有关。故需进一步将 Ar 由反应 率 f 表示,方能求解偏微分方程。基于以下的反应方程 23H 1 m -f -3f f 1-f m-3f f 图 2 反应方程 则各分压与总压之关系为 fm fmPP tH 31 3 −+ −= fm fmPP tB 31 −+ −= fm fPP tC 31 −+= 将上式,连同反应速率式,带入平衡方程式中,配合边界条件,可利用 pdepe 求解。 MATLAB 程序设计 将原方程改写成如式(35)的标准式 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ Δ− + ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ ∂ ∂= ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ ⎥⎦ ⎤ ⎢⎣ ⎡ − 0 1 )( 10 01 Gy Mr GC Hr r f u Dr r T GC kr rr L f L T avBA p rBA e p e ρ ρ 因此 -257- ⎥⎦ ⎤ ⎢⎣ ⎡= 1 1~c , ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ∂ ∂ ∂ ∂ = r f u D r T GC k f e p e ~ , ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ Δ− = 0 )( ~ Gy Mr GC Hr s avBA p rBA ρ ρ 和 1+=m (圆柱)。另外,左边界条件( 0=r 处)写成 ⎥⎦ ⎤ ⎢⎣ ⎡=⎥⎦ ⎤ ⎢⎣ ⎡+⎥⎦ ⎤ ⎢⎣ ⎡ • 0 0~*1 1 0 0 f 即 ⎥⎦ ⎤ ⎢⎣ ⎡= 0 0pl , ⎥⎦ ⎤ ⎢⎣ ⎡= 1 1ql 同理右边界条件( wrr = )可写成 ⎥⎦ ⎤ ⎢⎣ ⎡=⎥⎦ ⎤ ⎢⎣ ⎡++⎥⎦ ⎤ ⎢⎣ ⎡ − • 0 0~*10 )( fGCTTh pww 即 ⎥⎦ ⎤ ⎢⎣ ⎡ −= 0 )( ww TThpr , ⎥⎦ ⎤ ⎢⎣ ⎡+= 0 pGCqr 根据以上的分析,可编写 MATLAB 程序求解此 PDE 问题,其参考程序如下: function ex60_3_1 %****************************** % 触媒反应器内温度及转化率的分布 %****************************** global Pt rw Tw G M y0 Mav rho_B Cp dHr h0 u R ke hw De %****************************** % 给定数据 %****************************** Pt=1.25; %总压(atm) rw=0.025; %管径(m) Tw=100+273; %壁温(℃) G=631; %质量流率(kg/m2hr) M=30; y0=0.0323; Mav=4.47; rho_B=1200; Cp=1.74; dHr=-49250; h0=65.8; T0=125+273; Lw=1; u=8.03; R=1.987; ke=0.65; hw=112; De=0.755; %******************** -258- m=1; %******************** % 取点 %******************** r=linspace(0,rw,10); L=linspace(0,Lw,10); %*********************** % 利用 pdepe 求解 %*********************** sol=pdepe(m,@ex20_3_1pdefun,@ex20_3_1ic,@ex20_3_1bc,r,L); T=sol(:,:,1); %温度 f=sol(:,:,2); %反应率 %*********************** % 绘图输出 %*********************** figure(1) surf(L,r,T'-273) title('temp') xlabel('L') ylabel('r') zlabel('temp (0C)') % figure(2) surf(L,r,f') title('reaction rate') xlabel('L') ylabel('r') zlabel('reaction rate') %************************************************* % PDE 函数 %************************************************* function [c1,f1,s1]=ex20_3_1pdefun(r,L,u1,DuDr) global Pt rw Tw G M y0 Mav rho_B Cp dHr h0 u R ke hw De T=u1(1); f=u1(2); % k=exp(-12100/(R*T)+32.3/R); Kh=exp(15500/(R*T)-31.9/R); Kb=exp(11200/(R*T)-23.1/R); Kc=exp(8900/(R*T)-19.4/R); % a=1+M-3*f; ph=Pt*(M-3*f)/a; pb=Pt*(1-f)/a; pc=Pt*f/a; % rA=k*Kh^3*Kb*ph^3*pb/(1+Kh*ph+Kb*pb+Kc*pc)^4; % c1=[1 1]'; f1=[ke/(G*Cp) De/u]'.*DuDr; %s1=[ke/(G*Cp*r)*DuDr(1)-rA*rho_B*dHr/(G*Cp)-2*h0*(T-Tw)/(rw) s1=[-rA*rho_B*dHr/(G*Cp);rA*rho_B*Mav/(G*y0)]; %********************************** -259- %初始条件函数 %********************************** function u0=ex20_3_1ic(x) u0=[125+273 0]'; %********************************** % 边界条件档 %********************************** function [pl,ql,pr,qr]=ex20_3_1bc(rl,ul,rr,ur,L) global Pt rw Tw G M y0 Mav rho_B Cp dHr h0 u R ke hw De pl=[0 0]'; ql=[1 1]'; pr=[hw*(ur(1)-Tw) 0]'; qr=[G*Cp 1]'; 例 5 扩散系统之浓度分布 参考如图 3 的装置。管中储放静止液体 B,高度为 L=10 ㎝,放置于充满 A 气体的 环境中。假设与 B 液体接触面之浓度为 3 0 01.0 mmolC A = ,且此浓度不随时间改变 而改变,即在操作时间内( 10=h 天)维持定值。气体 A 在液体 B 中之扩散系数为 smDAB 29102 −×= 。试决定以下两种情况下,气体 A 溶于液体 B 中之流通量(flux)。 (a) A 与 B 不发生反应; (b) A 与 B 发生以下之反应 A BC+→, AA kCr =− 其反应速率常数 17102 −−×= sk 。 液体 B10 cm z 气体A 图 3 气体 A 在液体 B 中的扩散 题意解析: (a) 因气体 A 与液体 B 不发生反应,故其扩散现象的质量平衡方程如下: 2 2 z CDt C A AB A ∂ ∂=∂ ∂ 依题意,其初始及边界条件为 I.C. 0)0,( =zC A , 0>z B.C. 0),0( AA CtC = , 0≥t ; 0=∂ ∂ =Lz A z C , 0≥t (b) 在气体 A 与液体 B 会发生一次反应的情况下,其质量平衡方程需改写为 A A AB A kCz CDt C +∂ ∂=∂ ∂ 2 2 而起始及边界条件同上。 -260- 在获得浓度分布后,即可以 Fick’s law 0 )( =∂ ∂−= z A ABAz z CDtN 计算流通量。 MATLAB程序设计: 此问题依旧可以利用 pdepe 迅速求解。现就各状况的处理过程简述如下。 (a)与标准式(35)比较,可得 1=C , zCDf AAB ∂∂= , 0=s ,和 0=m 。另 外,经与式(37)比较后得知,左边界及右边界条件之系数分别为 左边界( 0=z ): 0),0( AA CtCpl −= , 0=ql 。 右边界( Lz = ): 0=pr , ABDqr 1= 。 (b)与标准式(35)比较,可得 0=m , 1=C , zCDf AAB ∂∂= ,和 AkCs = 。 而边界条件之系数同(a)之结果。 利用以上的处理结果,可编写 MATLAB 参考程序如下: function ex20_3_2 %***************************** % 扩散系统之浓度分布 %***************************** clear clc global DAB k CA0 %****************************** % 给定数据 %****************************** CA0=0.01; L=0.1; DAB=2e-9; k=2e-7; h=10*24*3600; %******************************* % 取点 %******************************* t=linspace(0,h,100); z=linspace(0,L,10); %******************************* % case (a) %******************************* m=0; sol=pdepe(m,@ex20_3_2pdefuna,@ex20_3_2ic,@ex20_3_2bc,z,t); CA=sol(:,:,1); for i=1:length(t) [CA_i,dCAdz_i]=pdeval(m,z,CA(i,:),0); NAz(i)=-dCAdz_i*DAB; end figure(1) subplot(211) surf(z,t/(24*3600),CA) title('case (a)') -261- xlabel('length (m)') ylabel('time (day)') zlabel('conc. (mol/m^3)') subplot(212) plot(t/(24*3600),NAz'*24*3600) xlabel('time (day)') ylabel('flux (mol/m^2.day)') %************************************ % case (b) %************************************ m=0; sol=pdepe(m,@ex20_3_2pdefunb,@ex20_3_2ic,@ex20_3_2bc,z,t); CA=sol(:,:,1); for i=1:length(t) [CA_i,dCAdz_i]=pdeval(m,z,CA(i,:),0); NAz(i)=-dCAdz_i*DAB; end % figure(2) subplot(211) surf(z,t/(24*3600),CA) title('case (b)') xlabel('length (m)') ylabel('time (day)') zlabel('conc. (mol/m^3)') subplot(212) plot(t/(24*3600),NAz'*24*3600) xlabel('time (day)') ylabel('flux (mol/m^2.day)') %******************************************** % PDE 函数 %******************************************** % case (a) %******************************************** function [c,f,s]=ex20_3_2pdefuna(z,t,CA,dCAdz) global DAB k CA0 c=1; f=DAB*dCAdz; s=0; %********************************************* % case (a) %********************************************* function [c,f,s]=ex20_3_2pdefunb(z,t,CA,dCAdz) global DAB k CA0 c=1; f=DAB*dCAdz; s=k*CA; %********************************************** % 初始条件函数 %********************************************** function CA_i=ex20_3_2ic(z) CA_i=0; %************************************************ -262- % 边界条件函数 %************************************************ function [pl,ql,pr,qr]=ex20_3_2bc(zl,CAl,zr,CAr,t) global DAB k CA0 pl=CAl-CA0; ql=0; pr=0; qr=1/DAB; §4 二维状态空间的偏微分方程的 MATLAB 解法 MATLAB 中的偏微分方程(PDE)工具箱是用有限元法寻求典型偏微分方程的数 值近似解,该工具箱求解偏微分方程具体步骤与用有限元方法求解偏微分方程的过程是 一致的,包括几个步骤,即几何描述、边界条件描述、偏微分方程类型选择、有限元划 分计算网格、初始化条件输入,最后给出偏微分方程的数值解(包括画图)。 下面我们讨论的方程是定义在平面上的有界区域Ω 上,区域的边界记作 Ω∂ 。 4.1 方程类型 MATLAB 工具箱可以解决下列类型的偏微分方程: (i)椭圆型偏微分方程 Ω=+∇⋅∇− in)( fauuc 其中 fac ,, 和未知的u 可以是Ω 上的复值函数。 (ii)抛物型偏微分方程 Ω=+∇⋅∇−∂ ∂ in)( fauuct ud 其中 dfac ,,, 可以依赖于时间t 。 (iii)双曲型偏微分方程 Ω=+∇⋅∇−∂ ∂ in)(2 2 fauuct ud (iv)特征值问题 Ω=+∇⋅∇− in)( duauuc λ 其中 λ 是未知的特征值, d 是Ω 上的复值函数。 (v)非线性椭圆偏微分方程 Ω=+∇⋅∇− in)()())(( ufuuauuc 其中 fac ,, 可以是u 的函数。 (vi)方程组 ⎩ ⎨ ⎧ =++∇⋅∇−∇⋅∇− =++∇⋅∇−∇⋅∇− 2222121222121 1212111212111 )()( )()( fuauaucuc fuauaucuc 4.2 边界条件 边界条件有如下三种: (i)Dirichlet 条件: rhu = on Ω∂ 。 (ii)Neumann 条件: gquucn =+∇⋅ )(r on Ω∂ 。 这里 nr 为区域的单位外法线, gqrh ,,, 是定义在 Ω∂ 上的复值函数。 对于二维方程组情形,Dirichlet 边界条件为 1212111 ruhuh =+ , -263- 2222121 ruhuh =+ ; Neumann 边界条件为: 1212111212111 )()( guququcnucn =++∇⋅+∇⋅ rr 2222121222121 )()( guququcnucn =++∇⋅+∇⋅ rr (iii)对于偏微分方程组,混合边界条件为 1212111 ruhuh =+ 111212111212111 )()( hguququcnucn μ+=++∇⋅+∇⋅ rr 122222121222121 )()( hguququcnucn μ+=++∇⋅+∇⋅ rr 这里 μ 的计算是使得满足 Dirichlet 边界条件。 4.3 求解偏微分方程 例 6 求解泊松方程 12 =∇− u , 求解区域为单位圆盘,边界条件为在圆盘边界上 0=u 。 解 它的精确解为 4 1),( 22 yxyxu −−= 下面求它的数值解,编写程序如下: %(1)问题定义 g='circleg'; %单位圆 b='circleb1'; %边界上为零条件 c=1;a=0;f=1; %(2)产生初始的三角形网格 [p,e,t]=initmesh(g); %(3)迭代直至得到误差允许范围内的合格解 error=[]; err=1; while err > 0.01, [p,e,t]=refinemesh(g,p,e,t); u=assempde(b,p,e,t,c,a,f); %求得数值解 exact=(1-p(1,:).^2-p(2,:).^2)/4; err=norm(u-exact',inf); error=[error err]; end %结果显示 subplot(2,2,1),pdemesh(p,e,t); subplot(2,2,2),pdesurf(p,t,u) subplot(2,2,3),pdesurf(p,t,u-exact') 例7 考虑最小表面问题 0) ||1 1( 2 =∇ ∇+ ⋅∇− u u 在 }1|),{( 22 ≤+=Ω yxyx , 在圆盘边界上 2xu = 。 解 这是椭圆型方程,其中 0,0, ||1 1 2 == ∇+ = fa u c ,编写程序如下: -264- g='circleg'; b='circleb2'; c='1./sqrt(1+ux.^2+uy.^2)'; rtol=1e-3; [p,e,t]=initmesh(g); [p,e,t]=refinemesh(g,p,e,t); u=pdenonlin(b,p,e,t,c,0,0,'Tol',rtol); pdesurf(p,t,u) 例8 求解正方形区域 }1,1|),{( ≤≤− yxyx 上的热传导方程 ut u Δ=∂ ∂ 初始条件为 ⎩ ⎨ ⎧ <+= 其它,0 4.0,1)0( 222 yxu 边界条件为Dirichlet条件 0=u 。 解 这里是抛物型方程,其中 1,0,0,1 ==== dfac 。编写程序如下: %(1)问题定义 g='squareg'; %定义正方形区域 b='squareb1'; %边界上为零条件 c=1;a=0;f=0;d=1; %(2)产生初始的三角形网格 [p,e,t]=initmesh(g); %(3)定义初始条件 u0=zeros(size(p,2),1); ix=find(sqrt(p(1,:).^2+p(2,:).^2)<0.4); u0(ix)=1 %(4)在时间段为0到0.1的20个点上求解 nframe=20; tlist=linspace(0,0.1,nframe); u1=parabolic(u0,tlist,b,p,e,t,c,a,f,d); %(5)动画图示结果 for j=1:nframe pdesurf(p,t,u1(:,j)); mv(j)=getframe; end movie(mv,10) 例9 求解正方形区域 }1,1|),{( ≤≤− yxyx 上的波方程 ut u Δ=∂ ∂ 2 2 初始条件为 ))(arctan(cos)0( xu π= , ))exp(cos()sin(3)0( yxdt du ππ= ,边界条件为在 1±=x 上满足Dirichlet条件 0=u ,在 1±=y 上满足Neumann条件 0=∂ ∂ n u 。 解 这里是双曲型方程,其中 1,0,0,1 ==== dfac 。编写程序如下: %(1)问题定义 -265- g='squareg'; %定义正方形区域 b='squareb3'; %定义边界 c=1;a=0;f=0;d=1; %(2)产生初始的三角形网格 [p,e,t]=initmesh(g); %(3)定义初始条件 x=p(1,:)';y=p(2,:)'; u0=atan(cos(pi*x)); ut0=3*sin(pi*x).*exp(cos(pi*y)); %(4)在时间段为0到5的31个点上求解 n=31; tlist=linspace(0,5,n); uu=hyperbolic(u0,ut0,tlist,b,p,e,t,c,a,f,d); %(5)动画图示结果 for j=1:n pdesurf(p,t,uu(:,j)); mv(j)=getframe; end movie(mv,10) 例 10 求解泊松方程 )0,0(2 δ=∇− u , 求解区域为单位圆盘,边界条件为在圆盘边界上 0=u 。 解 它的精确解为 22ln2 1),( yxyxu +−= π 。 下面求它的数值解,编写程序如下: g='circleg'; b='circleb1'; c=1;a=0;f='circlef'; [p,e,t]=initmesh(g); [p,e,t]=refinemesh(g,p,e,t); u=assempde(b,p,e,t,c,a,f); exact=-1/(2*pi)*log(sqrt(p(1,:).^2+p(2,:).^2)); subplot(2,2,1),pdemesh(p,e,t); subplot(2,2,2),pdesurf(p,t,u) subplot(2,2,3),pdesurf(p,t,u-exact') 4.4 偏微分方程的 pdetool 解法 4.4.1 图形界面解法简介 对于一般的区域,任意边界条件的偏微分方程,我们可以利用 MATLAB 中 pdetool 提供的偏微分方程用户图形界面解法。 图形界面解法步骤大致上为: (1)定义 PDE 问题,包括二维空间范围,边界条件以及 PDE 系数等。 (2)产生离散化之点,并将原 PDE 方程式离散化。 (3)利用有限元素法(finite element method;FEM)求解并显示答案。 在说明此解法工具之前,先介绍此 PDE 图形界面的菜单下方的功能图标(icon)按 钮。 -266- 透过这些按钮,使用者可轻松地完成偏微分方程的求解。现将这些按钮的主要功能叙述 如下: 前五个按钮为 PDE 系统之边界范围绘制功能,由左至右之用法为: :以对角绘制矩形或正方形。按住鼠标左键可绘制矩形,而正方形需以按住 右键的方式绘制。 :从中心点至某一角边的方式绘制矩形或正方形。同样地,鼠标左键绘矩形, 右键绘正方形。 :由周围界线的方式绘制椭圆或圆形区域。鼠标左键用以绘制椭圆,而右键 用来绘制圆形图形。 :以中心点向外的方式绘制椭圆或圆。同样地,鼠标左及右键,分别用以绘 制椭圆及圆形的区域。 :用以绘制多边型等不规则区域,欲关闭此功能需按鼠标右键。 在这些绘制按钮之后的按钮功能依序如下: :用以给定边界条件。在此功能选定后,使用者可在任一图形边界上按住鼠 标左键双击,然后在对话框中输入边界条件。 :用以指定 PDE 问题及相关参数。 :产生图形区域内离散化的网点。 :用以进一步将离散化的网点再取密一点(refine mesh)。 :在指定 PDE 系统,边界条件及区域后,按此钮即开始解题。 :用以指定显示结果绘制方式。 :放大缩小功能,便于图形绘制及显示。 4.4.2 图形界面解法的使用步骤 要利用 pdetool 接口求解之前,需先定义 PDE 问题,其包含三大部份: (1)利用绘图(draw)模式,定义欲解问题的空间范围(domain)Ω 。 (2)利用 boundary 模式,指定边界条件。 (3)利用 PDE 模式,指定 PDE 系数,即输入 c,a,f 和 d 等 PDE 模式中的系数。 在定义 PDE 问题之后,可依以下两个步骤求解 (1)在 mesh 模式下,产生 mesh 点,以便将原问题离散化。 (2)在 solve 模式下,求解。 (3)最后,在 Plot 模式下,显示答案。 下面以 sPoisson' 方程式 fu =Δ− 的求解为例,详细说明 pdetool 的用法。此问题 的几何图形及相关边界条件,将于求解过程中加以说明。 步骤 1:在命令窗口中键入 pdetool 以进入 GUI(graphical user interface)界面。选取 Options 中之 Grid 功能,以显示网格线。 步骤 2:利用 Draw 功能,画出问题之几何图形。请注意:使用者可利用内定对象 “多边型“,“矩形”,“正方形”,“圆形”,及“椭圆型”,予以组合,例如 (i)先选取“矩形/正方形”对象 ,移动鼠标至所欲输入左上角点,如坐标(-1,0) 点,按住鼠标左键,往右下角拉至坐标为(1,-0.4)处,即形成代号为 R1 的矩形。其余图 -267- 形 C1,R1 和 C2 可选取适当对象并类似地画出,以形成如图 4 的图形区域。以代数公 式而言,其为 R1+C1+R2+C2 图 4 画求解区域 图 5 求解区域图 值得注意的是,圆形区域需以按住鼠标右键的方式来制作(非左键)。同时,如欲进 一步修改各图形对象之大小及位置数据,可在该图上双击鼠标左键,然后在对象对话框 上输入数据。 (ii)若所欲形成的图形区域,需将 C2 去除,则可在公式列中直接输入 R1+C1+R2-C2 即可。 步骤 3:选取 PDE 功能项,以输入 PDE 方程的系数及类型。因问题为 fu =Δ− , 故此为椭圆型的问题,且其标准形式为 fauuc =+∇⋅∇− )( ,比较得知,c=1,a=0 和 f=10,所以对话框输入的情况如图 6。 图 6 对话框输入 图 7 对话框输入 步骤 4:选取 Boundary 功能,以输入边界条件。假设边界条件为 Neumann 形,且 为 5=∂∂ nu 。其中在弧形部份与标准式知,g=-5 且 q=0。但直线部分其边界条件则在 Dirichlet type 使 h=0,r=0。对话框输入情况见图 7。 步骤 5:选取 Mesh 功能,产生网点。使用者亦可进一步利用 将网点取得密一 点(refine mesh),见图 8。 -268- 图 8 网格剖分求解区域 图 9 求解结果示意图 步骤 6:选取 solve 功能,解此 PDE,见图 9。 注意: 1. MATLAB 会以图形的方式展示结果,使用者亦可点选 plot 下之“parameters”功 能,选择适当的方式显示图形及数据。例如用 3D 方式显示求解结果。参数设置见图 10, 显示结果见图 11。 图 10 显示参数设置 图 11 求解结果显示 2. 另外,若使用者欲将结果输出到命令窗口中,以供后续处理,可利用 solve 功能 项下之“export solution”指定变量名称来完成。 3. 如果求抛物型或双曲型方程的数值解,还需要通过“solve”菜单下的 “parameters…”选项设置初值条件。 4. 在上面定义边界条件和初始条件时,可以使用一些内置变量。 (1)在边界条件输入框中,可以使用如下变量: 二维坐标 x 和 y,边界线段长度参数 s(s 是以箭头的方向沿边界线段从 0 增加到 1), 外法向矢量的分量 nx 和 ny(如果需要边界的切线方向,可以通过 tx=-ny 和 ty=nx 表示), 解 u。 (2)在初值条件的输入框中,也可以输入用户定义的 MATLAB 可接受变量(p, e,t,x,y)的函数。 -269- 例 11 使用 PDETOOL 重新求例 8 的数值解。 1)定义 PDE 问题,包括二维空间范围,边界条件以及 PDE 系数等。我们这里就 省略了。 2)区域剖分以后,通过“Mesh”菜单下的“Export Mesh…”选项可以把 p,e,t 三个参数分别输出到工作间。 3)然后编写函数 fun1(x,y)如下: function f=fun1(x,y); f=zeros(length(x),1); ix=find(x.^2+y.^2<0.16); f(ix)=1; 其中的变量 x,y 是 MATLAB 可接受的内置变量。 设置“solve”菜单下的“parameters…”选项如下: 时间框中输入:linspace(0,0.1,20); 初值框中输入:fun1。 4)设置“plot"菜单下的“parameters…”选项如下:选择 Height(3-D plot) 和 Animation 两项。 5)用鼠标点一下工具栏上的“=”按钮,就可以画出数值解的 3-D 图形。 习 题 二 十 1. 求二维拉普拉斯方程 02 2 2 2 =∂ ∂+∂ ∂=Δ y u x uu 在边界条件 0),(),(),( 060 === === yxx yxuyxuyxu , 10),( 2 ==yyxu 下的数值解。 2. 求初边值问题 ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ ≥=+ =− ≤≤= <<>∂ ∂=∂ ∂ 00),1(),1(' 0),0(),0(' 10 ,1)0,( 10,0,2 2 ttutu tutu xxu xtx u t u x x 在 30 ≤≤ t 范围内的数值解。 3. 求热传导方程初边值问题 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ ≤≤== ≤≤= <<<<∂ ∂=∂ ∂ 5.00 0),1(),0( 10 sin)0,( 5.00,102 2 ttutu xxxu txx u t u π 的数值解,并将计算结果与准确解 xetxu t ππ sin),( 2−= 比较。 -253- 第二十一章 目标规划 §1 引言 1.线性规划的局限性 只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。 2.实际决策中,衡量方案优劣考虑多个目标 这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。 3.目标规划(Goal Programming) 美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管 理模型及线性规划的工业应用》一书中,首先提出的。 4.求解思路 (1)加权系数法 为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。 (2)优先等级法 将各目标按其重要程度不同的优先等级,转化为单目标模型。 (3)有效解法 寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 §2 目标规划的数学模型 为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。 例1 某工厂生产 I,II 两种产品,已知有关数据见下表 I II 拥有量 原材料 kg 2 1 11 设 备 hr 1 2 10 利润 元/件 8 10 试求获利最大的生产方案。 解 这是一个单目标的规划问题,用线性规划模型表述为: 21 108max xxz += ⎪⎩ ⎪⎨ ⎧ ≥ ≤+ ≤+ 0, 102 112 21 21 21 xx xx xx 最优决策方案为: 62,3,4 ** 2 * 1 === zxx 元。 但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如 (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。 (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。 (iii)应尽可能充分利用设备,但不希望加班。 -254- (iv)应尽可能达到并超过计划利润指标 56 元。 这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 1. 正、负偏差变量 设 d 为决策变量的函数,正偏差变量 }0,max{ 0ddd −=+ 表示决策值超过目标值 的部分,负偏差变量 }0,min{ 0ddd −−=− 表示决策值未达到目标值的部分,这里 0d 表 示 d 的目标值。因决策值不可能既超过目标值同时又未达到目标值,即恒有 0=× −+ dd 。 2. 绝对(刚性)约束和目标约束 绝对约束是指必须严格满足的等式约束和不等式约束;如线性规划问题的所有约束 条件,不能满足这些约束条件的解称为非可行解,所以它们是硬约束。目标约束是目标 规划特有的,可把约束右端项看作要追求的目标值。在达到此目标值时允许发生正或负 偏差,因此在这些约束中加入正、负偏差变量,它们是软约束。线性规划问题的目标函 数,在给定目标值和加入正、负偏差变量后可变换为目标约束。也可根据问题的需要将 绝对约束变换为目标约束。如:例 1 的目标函数 21 108 xxz += 可变换为目标约束 56108 1121 =−++ +− ddxx 。绝对约束 112 21 ≤+ xx 可变换为目标约束 112 2221 =−++ +− ddxx 。 3. 优先因子(优先等级)与权系数 一个规划问题常常有若干目标。但决策者在要求达到这些目标时,是有主次或轻重 缓急的不同。凡要求第一位达到的目标赋于优先因子 1P ,次位的目标赋于优先因子 L,2P ,并规定 qkPP kk ,,2,1,1 L=>> + 。表示 kP 比 1+kP 有更大的优先权。以此类推, 若要区别具有相同优先因子的两个目标的差别,这时可分别赋于它们不同的权系数 jw , 这些都由决策者按具体情况而定。 4. 目标规划的目标函数 目标规划的目标函数(准则函数)是按各目标约束的正、负偏差变量和赋于相应的 优先因子而构造的。当每一目标值确定后,决策者的要求是尽可能缩小偏离目标值。因 此目标规划的目标函数只能是 ),(min −+= ddfz 。其基本形式有三种: (1)要求恰好达到目标值,即正、负偏差变量都要尽可能地小,这时 )(min −+ += ddfz (2)要求不超过目标值,即允许达不到目标值,就是正偏差变量要尽可能地小, 这时 )(min += dfz (3)要求超过目标值,即超过量不限,但必须是负偏差变量要尽可能地小,这时 )(min −= dfz 对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 例 2 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解 按决策者所要求的,分别赋于这三个目标 321 ,, PPP 优先因子。这问题的数学 -255- 模型是 −+−+ +++ 3322211 )(min dPddPdP ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ =≥ =−++ =−++ =−+− ≤+ +− +− +− +− .3,2,1,0,,, 56108 102 0 112 21 3321 2221 1121 21 iddxx ddxx ddxx ddxx xx ii 5.目标规划的一般数学模型 设 jx ( nj ,,2,1 L= )是目标规划的决策变量,共有 m 个约束是刚性约束, 可能是等式约束,也可能是不等式约束。设有l 个柔性目标约束,其目标规划约束的偏 差为 −+ ii dd , ( li ,,2,1 L= )。设有 q 个优先级别,分别为 qPPP ,,, 21 L 。在同一个优先 级 kP 中,有不同的权重,分别记为 ),,2,1(, ljww kjkj L=−+ 。因此目标规划模型的一般 数学表达式为 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ += ∑∑ = ++−− = l j jkjjkj q k k dwdwPz 11 min ⎪ ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ =≥ =≥ ==−+ =≥=≤ +− = +− = ∑ ∑ lidd njx ligddxc mibxa ii j n j iiijij n j ijij ,,2,1,0, ,,2,1,0 ,,2,1, ,,1,),( 1 1 L L L L 建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 §3 求解目标规划的序贯式算法 序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 求解目标规划的序贯算法 对于 qk ,,2,1 L= ,求解单目标规划 ∑ = ++−− += l j jkjjkj dwdwz 1 )(min (1) s.t. ∑ = =≥=≤ n j ijij mibxa 1 ,,1,),( L (2) ∑ = +− ==−+ n j iiijij ligddxc 1 ,,2,1, L (3) -256- * 1 )( s l j jsjjsj zdwdw ≤+∑ = ++−− , 1,,2,1 −= ks L , (4) njx j ,,2,1,0 L=≥ (5) lidd ii ,,2,1,0, L=≥+− (6) 其最优目标值为 * kz ,当 1=k 时,约束(4)为空约束。当 qk = 时, * qz 所对应的解 *x 为 目标规划的最优解。 注 此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 例 3 某企业生产甲、乙两种产品,需要用到 CBA ,, 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标: 甲 乙 设备的生产能力(h) A (h/件) 2 2 12 B (h/件) 4 0 16 C (h/件) 0 5 15 赢利(元/件) 200 300 (1)力求使利润指标不低于 1500 元; (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2; (3)设备 A 为贵重设备,严格禁止超时使用; (4)设 备 C 可以适当加班,但要控制;设备 B 既要求充分利用,又尽可能不加班。 在重要性上,设备 B 是设备C 的 3 倍。 建立相应的目标规划模型并求解。 解 设备 A 是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 BC, 的工作时间要有所控制,列为第三级。在第三级中,设备 B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备 B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 )33()(min 433322211 +−+−+− +++++= dddPddPdPz (7) s.t. 1222 21 ≤+ xx (8) 1500300200 1121 =−++ +− ddxx (9) 02 2221 =−+− +− ddxx (10) 164 331 =−+ +− ddx (11) 155 442 =−+ +− ddx (12) 0,,, 21 ≥+− ii ddxx , 4,3,2,1=i (13) 序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: model: sets: variable/1..2/:x; -257- S_Con_Num/1..4/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; enddata min=dminus(1); 2*x(1)+2*x(2)<12; @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); end 求得 dminus(1)=0,即目标函数的最优值为 0,第一级偏差为 0。 求第二级目标,LINGO 程序如下: model: sets: variable/1..2/:x; S_Con_Num/1..4/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; enddata min=dplus(2)+dminus(2); !二级目标函数; 2*x(1)+2*x(2)<12; @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); dminus(1)=0;!一级目标约束; @for(variable:@gin(x)); end 求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: model: sets: variable/1..2/:x; S_Con_Num/1..4/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; enddata min=3*dplus(3)+3*dminus(3)+dplus(4); !三级目标函数; 2*x(1)+2*x(2)<12; @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); dminus(1)=0;!一级目标约束; dplus(2)+dminus(2)=0;!二级目标约束; end 目标函数的最优值为29,即第三级偏差为29。 -258- 分析计算结果, 21 =x , 42 =x , 1001 =+d ,因此,目标规划的最优解为 )4,2(* =x , 最优利润为1600。 上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。 例 4(续例 3) 按照序贯式算法,编写求解例 3 的通用 LINGO 程序。 model: sets: level/1..3/:p,z,goal; variable/1..2/:x; h_con_num/1..1/:b; s_con_num/1..4/:g,dplus,dminus; h_con(h_con_num,variable):a; s_con(s_con_num,variable):c; obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; endsets data: ctr=?; goal=? ? 0; b=12; g=1500 0 16 15; a=2 2; c=200 300 2 -1 4 0 0 5; wplus=0 1 3 1; wminus=1 1 3 0; enddata min=@sum(level:p*z); p(ctr)=1; @for(level(i)|i#ne#ctr:p(i)=0); @for(level(i):z(i)=@sum(obj(i,j):wplus(i,j)*dplus(j)+wminus(i,j)* dminus(j))); @for(h_con_num(i):@sum(variable(j):a(i,j)*x(j))jω , 00 >jμ ,并且其最优目标值 10 =jV ,则称决策单元 0j 是DEA有效的。 从上述定义可以看出,所谓DEA有效,就是指那些决策单元,它们的投入产出比 达到最大。因此,我们可以用DEA来对决策单元进行评价。 -268- (3)C2R模型的求解 从上面的模型可以看到,求解C2R模型,需要求解若干个线性规划,这一点可以用 LINGO软件完成。 例10(续例9) 运用C2R模型(20)求解例9。 解 按照C2R模型写出相应的LINGO程序如下: model: sets: dmu/1..6/:s,t,p; !决策单元; inw/1..2/:w; !输入权重; outw/1..2/:u; !输出权重; inv(inw,dmu):x; !输入变量; outv(outw,dmu):y; endsets data: ctr=?; x=89.39 86.25 108.13 106.38 62.40 47.19 64.3 99 99.6 96 96.2 79.9; y=25.2 28.2 29.4 26.4 27.2 25.2 223 287 317 291 295 222; enddata max=@sum(dmu:p*t); p(ctr)=1; @for(dmu(i)|i#ne#ctr:p(i)=0); @for(dmu(j):s(j)=@sum(inw(i):w(i)*x(i,j)); t(j)=@sum(outw(i):u(i)*y(i,j));s(j)>t(j)); @sum(dmu:p*s)=1; end 在上述程序中,ctr的值分别输入 6,,2,1 L ,经过6次计算,得到6个最优目标值 1,0.9096132,0.9635345,0.9143053,1,1 并且对于学校 A (决策单元1)有 0,0 12 >> μω ,对于学校 E (决策单元5)有 01 >ω , 02 >μ 和对于学校 F(决策单元6)有 0,0 11 >> μω 。因 此 ,学 校 FEA ,, 是DEA有效的。 习题二十一 1. 试求解多目标线性规划问题 ⎩ ⎨ ⎧ += += 212 211 2 3 max xxz xxz s.t. ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≥ ≤ ≤ ≤+ 0, 5 5 7 21 2 1 21 xx x x xx 2.一个小型的无线电广播台考虑如何最好地安排音乐、新闻和商业节目时间。依 据法律,该台每天允许广播12小时,其中商业节目用以赢利,每分钟可收入250美元, 新闻节目每分钟需支出40美元,音乐节目每播一分钟费用为17.50美元。法律规定,正 常情况下商业节目只能占广播时间的20%,每小时至少安排5分钟新闻节目。问每天的 广播节目该如何安排?优先级如下: 1p :满足法律规定的要求; 2p :每天的纯收入最大。 -269- 试建立该问题的目标规划模型。 3. 某工厂生产两种产品,每件产品I可获利10元,每件产品II可获利8元。每生产一件 产品I,需要3小时;每生产一件产品II,需要2.5小时。每周总的有效时间为120小时。 若加班生产,则每件产品I的利润降低1.5元;每件产品II的利润降低1元。决策者希望在 允许的工作及加班时间内取最大利润,试建立该问题的目标规划模型,并求解。 -257- 第二十二章 模糊数学模型 §1 模糊数学的基本概念 1.1 模糊数学简介 1965 年,美国著名计算机与控制专家查德(L.A.Zadeh)教授提出了模糊的概念,并 在国际期刊《Information and Control》并发表了第一篇用数学方法研究模糊现象的论文 “Fuzzy Sets”(模糊集合),开创了模糊数学的新领域。 模糊是指客观事物差异的中间过渡中的“不分明性”或“亦此亦彼性”。如高个子 与矮个子、年轻人与老年人、热水与凉水、环境污染严重与不严重等。在决策中,也有 这种模糊的现象,如选举一个好干部,但怎样才算一个好干部?好干部与不好干部之间 没有绝对分明和固定不变的界限。这些现象很难用经典的数学来描述。 模糊数学就是用数学方法研究与处理模糊现象的数学。它作为一门崭新的学科,它 是继经典数学、统计数学之后发展起来的一个新的数学学科。经过短暂的沉默和争议之 后,迅猛的发展起来了,而且应用越来越广泛。如今的模糊数学的应用已经遍及理、工、 农、医及社会科学的各个领域,充分的表现了它强大的生命力和渗透力。 统计数学是将数学的应用范围从确定性的领域扩大到了不确定性的领域,即从必然 现象到偶然现象,而模糊数学则是把数学的应用范围从确定领域扩大到了模糊领域,即 从精确现象到模糊现象。 实际中,我们处理现实的数学模型可以分成三大类:第一类是确定性数学模型,即 模型的背景具有确定性,对象之间具有必然的关系。第二类是随机性的数学模型,即模 型的背景具有随机性和偶然性。第三类是模糊性模型,即模型的背景及关系具有模糊性。 1.2 基本概念 1.2.1 模糊集和隶属函数 定义 1 论域 X 到 ]1,0[ 闭区间上的任意映射 Aμ : ]1,0[→X -258- )(xx Aμ→ 都确定 X 上的一个模糊集合 A , Aμ 叫做 A 的隶属函数, )(xAμ 叫做 x 对模糊集 A 的 隶属度,记为: }|))(,{( XxxxA A ∈= μ 使 5.0)( =xAμ 的点 0x 称为模糊集 A 的过渡点,此点最具模糊性。 显然,模糊集合 A 完全由隶属函数 Aμ 来刻画,当 }1,0{)( =xAμ 时, A 退化为一 个普通集。 1.2.2 模糊集合的表示方法 当论域 X 为有限集时,记 },,,{ 21 nxxxX L= ,则 X 上的模糊集 A 有下列三种常 见的表示形式。 i) zadeh 表示法 当论域 X 为有限集时,记 },,,{ 21 nxxxX L= ,则 X 上的模糊集 A 可以写成 n nAAA n i i A x x x x x x x iA )()()()( 2 2 1 1 1 μμμμ +++== ∑ = L 注:“ ∑ ”和“+”不是求和的意思,只是概括集合诸元的记号;“ i iA x x )(μ ”不是 分数,它表示点 ix 对模糊集 A 的隶属度是 )( iA xμ 。 ii) 序偶表示法 ))}(,(,)),(,()),(,{( 2211 nAnAA xxxxxxA μμμ L= iii) 向量表示法 ))(,),(),(( 21 nAAA xxxA μμμ L= 当论域 X 为无限集时, X 上的模糊集 A 可以写成 -259- ∫ ∈ = Xx A x xA )(μ 注:“ ∫ ”也不是表示积分的意思,“ i iA x x )(μ ”也不是分数。 例 1 设论域 )}190(),180(),170(),160(),150(),140({ 654321 xxxxxxX = (单位: cm)表示人的身高, X 上的一个模糊集“高个子”( A )的隶属函数 )(xAμ 可定义为 140190 140)( − −= xxAμ 用 zadeh 表示法, 654321 18.06.04.02.00 xxxxxxA +++++= 用向量表示法, )1,8.0,6.0,4.0,2.0,0(=A 例 2 设论域 ]1,0[=X ,Fuzzy 集 A 表示“年老”,B 表示“年轻”,Zadeh 给出 A 、 B 的隶属度函数分别为 ⎪⎩ ⎪⎨ ⎧ ≤<−+ ≤≤ = −− 10050])5 50(1[ 5000 )( 12 xx x xA ⎪⎩ ⎪⎨ ⎧ ≤≤−+ ≤≤ = − 10025])5 25(1[ 2501 )( 12 xx x xB 94.0)70( ≈A ,即“70 岁”属于“年老”的程度为 0.94。又易知 8.0)60( ≈A , 02.0)60( ≈B ,可认为“60 岁”是“较老的”。 A =“年老”= ∫ −−−+100 50 12 ])5 50(1[ x x -260- B =“年轻”= ∫∫ −−+ + 100 25 12 25 0 ])5 25(1[ 1 x x x 1.2.3 模糊集的运算 常用取大“∨”和取小“∧”算子来定义 Fuzzy 集之间的运算。 定义 2 对于论域 X 上的模糊集 A , B ,其隶属函数分别为 )(xAμ , )(xBμ 。 i) 若对任意 Xx∈ ,有 )()( xx AB μμ ≤ ,则称 A 包含 B ,记为 AB ⊆ ; ii) 若 BA ⊆ 且 AB ⊆ ,则称 A 与 B 相等,记为 BA = 。 定义 3 对于论域 X 上的模糊集 A , B , i) 称 Fuzzy 集 BAC U= , BAD I= 为 A 与 B 的并(union)和交(intersection), 即 )()()}(),(max{))(( xBxAxBxAxBAC ∨=== U )()()}(),(min{)(( xBxAxBxAxBAD ∧=== I 他们相应的隶属度 )(),( xx DC μμ 被定义为 )}(),(max{)( xxx BAC μμμ = )}(),(min{)( xxx BAD μμμ = ii) Fuzzy 集 CA 为 A 的补集或余集(complement),其隶属度 )(1)( xx AAC μμ −= 例 3 已知 },8,7,6,5,4,3,2,1{=X , 5 1.0 4 4.0 3 8.0 2 5.0 1 3.0 ++++=A , 6 5.0 5 9.0 4 3.0 3 2.0 +++=B , 则有 -261- BAU = 6 5.0 5 9.0 4 4.0 3 8.0 2 5.0 1 3.0 +++++ , BAI = 5 1.0 4 3.0 3 2.0 ++ , =CA 8 1 7 1 6 1 5 9.0 4 6.0 3 2.0 2 5.0 1 7.0 +++++++ 。 1.2.4 隶属函数的确定方法 模糊数学的基本思想是隶属度的思想。应用模糊数学方法建立数学模型的关键是建 立符合实际的隶属函数。如何确定一个模糊集的隶属函数至今还是尚未解决的问题。这 里仅仅介绍几种常用的确定隶属函数的方法。 (1)模糊统计方法 模糊统计方法是一种客观方法,主要是基于模糊统计试验的基础上根据隶属度的客 观存在性来确定的。所谓的模糊统计试验包含以下四个要素: i) 论域 X ; ii) X 中的一个固定元素 0x ; iii) X 中一个随机变动的几何 *A (普通集); iv) X 中一个以 *A 作为弹性边界的模糊集 A ,对 *A 的变动起着制约作用。其中 * 0 Ax ∈ ,或者 * 0 Ax ∉ ,致使 0x 对 A 的关系是不确定的。 假设做 n 次模糊统计试验,则可计算出 0x 对 A 的隶属频率= n Ax 的次数* 0 ∈ 实际上,当 n 不断增大时,隶属频率趋于稳定,其频率的稳定值称为 0x 对 A 的隶属度, 即 )( 0xAμ = n Ax n 的次数* 0lim ∈ ∞→ (2)指派方法 -262- 指派方法是一种主观的方法,它主要依据人们的实践经验来确定某些模糊集隶属函 数的一种方法。 如果模糊集定义在实数域 R 上,则模糊集的隶属函数称为模糊分布。所谓指派方 法就是根据问题的性质主观地选用某些形式地模糊分布,再根据实际测量数据确定其中 所包含地参数,常用的模糊分布如表 1 所示。 实际中,根据问题对研究对象的描述来选择适当的模糊分布: ① 偏小型模糊分布一般适合于描述像“小,少,浅,淡,冷,疏,青年”等偏小 的程度的模糊现象。 ② 偏大型模糊分布一般适合于描述像“大,多,深,浓,热,密,老年”等偏大 的程度的模糊现象。 ③ 中间型模糊分布一般适合于描述像“中,适中,不太多,不太少,不太深,不 太浓,暖和,中年”等处于中间状态的模糊现象。 但是,表 1 给出的隶属函数都是近似的,应用时需要对实际问题进行分析,逐步修 改进行完善,最后得到近似程度更好的隶属函数。 (3)其它方法 在实际应用中,用来确定模糊集的隶属函数的方法示多种多样的,主要根据问题的 实际意义来确定。譬如,在经济管理、社会管理中,可以借助于已有的“客观尺度”作 为模糊集的隶属度。下面举例说明。 如果设论域 X 表示机器设备,在 X 上定义模糊集 A =“设备完好”,则可以用“设 备完好率”作为 A 的隶属度。如果 X 表示产品,在 X 上定义模糊集 A =“质量稳定”, 则可以用产品的“正品率”作为 A 的隶属度。如果 X 表示家庭,在 X 上定义模糊集 A =“家庭贫困”,则可以用“Engel 系数=食品消费/总消费”作为 A 的隶属度。 另外,对于有些模糊集而言,直接给出隶属度有时是很困难的,但可以利用所谓的 “二元对比排序法”来确定,即首先通过两两比较确定两个元素相应隶属度的大小排出 顺序,然后用数学方法加工处理得到所需的隶属函数。 -263- 表 1 常用的模糊分布 类 型 偏小型 中间型 偏大型 矩 阵 型 ⎩ ⎨ ⎧ > ≤= ax ax A ,0 ,1μ ⎩ ⎨ ⎧ >< ≤≤= bxax bxa A 或,0 ,1μ ⎩ ⎨ ⎧ < ≥= ax ax A ,0 ,1μ 梯 形 型 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ > ≤≤− − ≤ = bx bxaab xb ax A ,0 , ,1 μ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ ≥< ≤≤− − ≤≤ ≤≤− − = dxax dxccd xd cxb bxaab ax A ,,0 , ,1 , μ ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ > ≤≤− − < = bx bxaab ax ax A ,1 , ,0 μ k 次 抛 物 型 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ > ≤≤− − ≤ = bx bxaab xb ax k A ,0 ,)( ,1 μ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ ≥< ≤≤− − ≤≤ ≤≤− − = dxax dxccd xd cxb bxaab ax k k A ,,0 ,)( ,1 ,)( μ ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ > ≤≤− − < = bx bxaab ax ax k A ,1 ,)( ,0 μ Γ 型 ⎩ ⎨ ⎧ > ≤= −− axe ax axkA , ,1 )(μ ⎪⎩ ⎪⎨ ⎧ > ≤≤ < = −− − bxe bxa axe axk axk A , ,1 , )( )( μ ⎩ ⎨ ⎧ ≥− <= −− axe ax axkA ,1 ,0 )(μ 正 态 型 ⎪ ⎩ ⎪ ⎨ ⎧ > ⎪⎭ ⎪⎬ ⎫ ⎪⎩ ⎪⎨ ⎧ ⎟ ⎠ ⎞⎜ ⎝ ⎛ −− ≤ = axax ax A ,exp ,1 2 σ μ ⎪⎭ ⎪⎬ ⎫ ⎪⎩ ⎪⎨ ⎧ ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−= 2 exp σμ ax A ⎪ ⎩ ⎪ ⎨ ⎧ > ⎪⎭ ⎪⎬ ⎫ ⎪⎩ ⎪⎨ ⎧ ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−− ≤ = axax ax A ,exp1 ,0 2 σ μ 柯 西 型 ⎪⎩ ⎪⎨ ⎧ >−+ ≤ = axax ax A ,)(1 1 ,1 βα μ )0,0( >> βα βαμ )(1 1 axA −+= ( βα ,0> 为正偶数) ⎪⎩ ⎪⎨ ⎧ >−+ ≤ = − axax ax A ,)(1 1 ,0 βα μ )0,0( >> βα 1.3 模糊关系、模糊矩阵 -264- 1.3.1 基本概念 定义 4 设论域U ,V ,乘积空间上 },),{( VvUuvuVU ∈∈=× 上的一个模糊 子集 R 为从从集合U 到集合V 的模糊关系。如果模糊关系 R 的隶属函数为 Rμ : VU × ]1,0[→ , a),( yx ),( yxRμ 则称隶属度 ),( yxRμ 为 ),( yx 关于模糊关系 R 的相关程度。 这是二元模糊关系的数学定义,多元模糊关系也可以类似定义。 设 {}mxxxU ,,, 21 L= , { }nyyyV ,,, 21 L= , R 为从从U 到V 的模糊关系,其 隶属函数为 ),( yxRμ ,对任意的 ),( ji yx ∈ VU × 有 ]1,0[),( ∈= ijjiR ryxμ , njmi ,,2,1,,,2,1 LL == ,记 nmijrR ×= )( ,则 R 就是所谓的模糊矩阵。下面给出一 般的定义。 定义 5 设矩阵 nmijrR ×= )( ,且 ]1,0[∈ijr , njmi ,,2,1,,,2,1 LL == ,则 R 称 为模糊矩阵。 特别地,如果 }1,0{∈ijr , njmi ,,2,1,,,2,1 LL == ,则称 R 为布尔(Bool)矩阵。 当模糊方阵 nnijrR ×= )( 的对角线上的元素 ijr 都为 1 时,称 R 为模糊自反矩阵。 当 1=m 或者 1=n 时,相应地模糊矩阵为 ),,,( 21 nrrrR L= 或者 T nrrrR ),,,( 21 L= ,则分别称为模糊行向量和模糊列向量。 例 4 设评定科研成果等级的指标集为 ),,,( 521 xxxU L= , 1x 表示为科研成果发 明或创造、革新的程度, 2x 表示安全性能, 3x 表示经济效益, 4x 表示推广前景, 5x 表 示成熟性;V 表示定性评价的评语论域 ),,,( 4321 yyyyV = , 4321 ,,, yyyy 分别表示很 好、较好、一般、不好。通过专家评审打分,按下表给出 VU × 上每个有序对 ),( ii yx 指 定的隶属度。 -265- 表 2 有序对 ),( ii yx 指定的隶属度 V y1 很好 y2 较好 y3 一般 y4 不好 x1 0.45 0.35 0.15 0.05 x2 0.30 0.34 0.10 0.26 x3 0.50 0.30 0.10 0.10 x4 0.60 0.30 0.05 0.05 x5 0.56 0.10 0.20 0.14 由此确定一个从U 到V 的模糊关系 R ,这个模糊关系的隶属度函数是一个 5×4 阶 的矩阵,记为 ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 14.02.01.056.0 05.005.03.06.0 1.01.03.05.0 26.01.034.03.0 05.015.035.045.0 R 则 R 为一个模糊关系矩阵。 1.3.2 模糊矩阵的运算及其性质 (1) 模糊矩阵间的关系及并、交、余运算 定义 6 设 nmijaA ×= )( , nmijbB ×= )( , njmi ,,2,1,,,2,1 LL == 都是模糊矩阵, 定义 i) 相等: BA = ⇔ ijij ba = ; ii) 包含: BA ≤ ⇔ ijij ba ≤ ; iii) 并: nmijij baBA ×∨= )(U ; y u x -266- iv) 交: nmijij baBA ×∧= )(I v) 余: nmij C aA ×−= )1( 例5 设 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= 5.03.0 1.01A , ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= 9.04.0 07.0B ,则 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= 9.04.0 1.01BAU , ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= 5.03.0 07.0BAI , =CA ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ 5.07.0 9.00 (2) 模糊矩阵的合成 定义 7 设 smikaA ×= )( , nskjbB ×= )( ,称模糊矩阵 nmijcBA ×= )(o 为 A 与 B 的合成,其中 { }skbac kjikij ≤≤∧= 1)(max 例6 设 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= 5.08.01 07.04.0A , ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = 3.00 6.04.0 7.01 B ,则 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= 7.01 6.04.0BAo , ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = 3.03.03.0 5.06.06.0 5.07.07.0 AB o 两模糊矩阵合成的 MATLAB 函数如下: function ab=synt(a,b); m=size(a,1);n=size(b,2); for i=1:m for j=1:n ab(i,j)=max(min([a(i,:);b(:,j)'])); end end -267- 模糊方阵 mmijaA ×= )( 的幂定义为 AAA o=2 , AAA kk o1−= (3) 模糊矩阵的转置 定义 8 设 nmijaA ×= )( , njmi ,,2,1,,,2,1 LL == ,称 mn T ji T aA ×= )( 为 A 的转 置矩阵,其中 ij T ji aa = 。 (4) 模糊矩阵的 −λ 截矩阵 定义 9 设 nmijaA ×= )( ,对任意的 ]1,0[∈λ , i) 令 ⎪⎩ ⎪⎨ ⎧ < ≥ = λ λλ ij ij ij a a a ,0 ,1)( 则称 nmijaA ×= )( )(λ λ 为模糊矩阵 A 的 λ 截矩阵。 ii) 令 ⎪⎩ ⎪⎨ ⎧ ≤ > = λ λλ ij ij ij a a a ,0 ,1)( 则称 nmijaA ×= • )( )(λ λ 为模糊矩阵 A 的 λ 强截矩阵。 显然,对于任意的 ]1,0[∈λ , λ 截矩阵是布尔矩阵。 例7 设 ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 18.03.00 8.011.02.0 3.01.015.0 02.05.01 A ,则 ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 1100 1100 0011 0011 5.0A , ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 1110 1100 1011 0011 3.0A 下面给出模糊矩阵的一个性质。 -268- 性质 设 nmijaA ×= )( , njmi ,,2,1,,,2,1 LL == 是模糊自反矩阵(对角线上的元 素 ijr 都为 1 的模糊矩阵), I 是 n 阶单位矩阵,则 2RRI ≤≤ 证:因为 nmijaA ×= )( 是模糊自反矩阵,即有 1=iir ,所以 RI ≤ ,又 { } ijijiikjik rrrnkaa =∧≥≤≤∧ 1)(max 即有 2RR ≤ 。 §2 模糊模式识别 本节我们假定论域为U ,U 上的模糊集的全体记为 )(UF 。 2.1 模糊集的贴近度 贴近度是对两个模糊集接近程度的一种度量。 定义 10 设 )(,, UFCBA ∈ ,若映射 ]1,0[)()(: →× UFUFN 满足条件: (1) ),(),( ABNBAN = ; (2) 1),( =AAN , 0),( =ΦUN ,这里 Φ 为空集; (3)若 CBA ⊆⊆ ,则 ),(),(),( CBNBANCAN ∧≤ ; 则称 ),( BAN 为模糊集 A 与 B 的贴近度。 N 称为 )(UF 上的贴近度函数。 1.海明贴近度 若 },,,{ 21 nuuuU L= ,则 ∑ = −−Δ n i ii uBuAnBAN 1 |)()(|11),( 当U 为实数域上的闭区间 ],[ ba 时,则有 -269- duuBuAabBAN b a∫ −−−Δ |)()(|11),( 2.欧几里得贴近度 若 },,,{ 21 nuuuU L= ,则 2/1 1 2))()((11),( ⎟ ⎠ ⎞⎜ ⎝ ⎛ −−Δ ∑ = n i ii uBuA n BAN 当 ],[ baU = 时,则有 2/1 2))()((11),( ⎟⎠ ⎞⎜⎝ ⎛ − − −Δ ∫b a duuBuA ab BAN 3.黎曼贴近度 若U 为实数域,被积函数为黎曼可积,且广义积分收敛,则 ∫ ∫ ∞+ ∞− +∞ ∞− ∨ ∧ Δ duuBuA duuBuA BAN ))()(( ))()(( ),(1 ∫∫ ∫ ∞+ ∞− ∞+ ∞− +∞ ∞− + ∧ Δ duuBduuA duuBuA BAN )()( ))()((2 ),(2 例 8 设 ]100,0[=U ,且 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≤≤ <≤− <≤ = 10060,1 6020,40 20 200,0 )( x xx x xA , ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≤≤ <≤− <≤ = 10080,0 8040,40 80 400,1 )( x xx x xB 见图 1。求黎曼贴近度 ),(1 BAN 。 图 1 隶属函数图 -270- 解 不难求得 )(xA 和 )(xB 的交点坐标 50* =x ,于是 ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ <≤− <≤− =∧ 其它 ,0 8050,40 80 5020,40 20 )()( xx xx xBxA ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ ≤≤ <≤− <≤− <≤ =∨ 10060 ,1 6050,40 20 5040,40 80 400 , ,1 )()( x xx xx x xBxA 2308.0 ))()(( ))()(( ),( 100 0 100 0 1 ≈ ∨ ∧ = ∫ ∫ duuBuA duuBuA BAN 计算的 MATLAB 程序: i)编写定义函数 )()( xBxA ∧ 的 MATLAB 函数 function f1=jixiao(x); f1=(x>=20 & x<50).*(x-20)/40+(x>=50 & x<80).*(80-x)/40; ii)编写定义函数 )()( xBxA ∨ 的 MATLAB 函数 function f2=jida(x); f2=(x>=0 & x<40)+(x>=40 & x<50).*(80-x)/40+(x>=50 & x<60).*(x-20)/40+(x>=60 & x<=100); iii)利用 MATLAB 的积分命令 quadl 计算 ),(1 BAN N1=quadl(@jixiao,0,100)/quadl(@jida,0,100) 例 9 设 RU = (实数域),正态型隶属函数 2 1)( ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− = σ ax exA , 2 2)( ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− = σ ax exB -271- 求当 21 σσ ≤ 时, ),( BAN (见图 2) 图 2 隶属函数图 解 当 21 σσ ≤ , Rx ∈∀ , )()( xBxA ≤ 根据黎曼贴近度,有 2 1 1 )( )( ),( σ σ== ∫ ∫ ∞+ ∞− +∞ ∞− dxxB dxxA BAN 21 1 2 2 )()( )(2 ),( σσ σ += + = ∫∫ ∫ ∞+ ∞− ∞+ ∞− +∞ ∞− dxxBdxxA dxxA BAN 2.2 格贴近度 定义 10 设 )(, UFBA ∈ ,称 A ⊙ ))()(( uBuAB Uu ∧∨= ∈ 为模糊集 BA, 的内积。 内积的对偶运算为外积。 定义 11 设 )(, UFBA ∈ ,称 ))()(( uBuABA Uu ∨∧=⊗ ∈ 为模糊集 BA, 的外积。 如果在闭区间 ]1,0[ 上定义“余”运算: ]1,0[∈∀α , αα −= 1c ,那么有性质 1 性质 1 cc ABA =⊗ )( ⊙ cB , A( ⊙ ccc BAB ⊗=) 。 对 )(UFA∈ ,令 -272- )(uAa Uu∈ ∨= , )(uAa Uu∈ ∧= a 和 a 分别叫做模糊集 A 的峰值和谷值。对模糊集 CBA ,, ,不难得到如下性质。 性质 2 A ⊙ baB ∧≤ , baBA ∨≥⊗ 。 性质 3 A ⊙ aA = , aAA =⊗ 性质 4 A UFB ( )(∈ ∨ ⊙ aB =) , aBA UFB =⊗∧ ∈ )( )( 性质 5 ABA ⇒⊆ ⊙ aB = , bBA =⊗ 性质 6 A ⊙ 2 1≤cA , 2 1≥⊗ BA 性质 7 ABA ⇒⊆ ⊙ BB ≤ ⊙C ,并且 CBCA ⊗≤⊗ 由性质发现,给定模糊集 A ,让模糊集 B 靠近 A ,会使内积 A ⊙ B 增大而外积 BA⊗ 减少。换句话说,当 A ⊙ B 较大且 BA⊗ 较少时, A 与 B 比较贴近。所以,采 用内积与外积相结合的“格贴近度”来刻画两个模糊集的贴近程度。 引理 1 设 )(, UFBA ∈ ,令 ABA (),( = ⊙ cBAB )() ⊗∧ ,则下列结论成立: (1) 1),(0 ≤≤ BA ; (2) ),(),( ABBA = ; (3) )1(),( aaAA −∧= ; (4) CBA ⊆⊆⇒ ),(),(),( CBBACA ∧≤ 特别当 1=a , 0=a 时, 1),( =AA 。 根据引理 1 和贴近度的定义,立即得到: 定理 1 设 )(, UFBA ∈ ,则 ABA (),( = ⊙ cBAB )() ⊗∧ 是模糊集 BA, 的贴近度,叫做 BA, 的格贴近度。记为 ABAN (),( = ⊙ cBAB )() ⊗∧ -273- 例 10 设论域 R 为实数域,模糊集的隶属函数为 2 1 1 )( ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− = σ ax exA , 2 2 2 )( ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− = σ ax exB 求 ),( BAN 。 解法 I (格贴近度法)对上述函数,有 若 )()( xBxA ≤ ,则 A ⊙ )()())()(( *xBxAxBxAB RxRx =∨=∧∨= ∈∈ 若 )()( xAxB ≤ ,则 A ⊙ )()())()(( *xAxBxBxAB RxRx =∨=∧∨= ∈∈ 可见,内积 A ⊙ B 是 )(xA 与 )(xB 相等时的值,这时 *xx = 。故可令 )()( xBxA = , 求 *x ,即从 2 2 2 2 1 1 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −−⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− = σσ axax ee 求得 21 1221 1 σσ σσ + += aax , 12 2112 2 σσ σσ − −= aax 其中 2x 不是最大值点,故选 1 * xx = 。于是 A ⊙ 2 12 12 )( 1 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ + −− == σσ aa exAB 而 CA ⊙ 1)))(1())(1(( =−∧−∨= ∈ xBxAB Rx C 由格贴近度公式,得 2 12 12 ),( ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ + −− = σσ aa eBAN 解法 II(黎曼贴近度法) dxedxe dxedxe BAN x ax x ax x ax x ax ∫∫ ∫∫ ∞+ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− ∞− ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− ∞+ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− ∞− ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− + + = * 2 2 2* 2 1 1 * 2 1 1* 2 2 2 ),(1 σσ σσ -274- dxedxe dxedxe BAN axax x ax x ax ∫∫ ∫∫ ∞+ ∞− ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −−∞+ ∞− ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− ∞+ ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− ∞− ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ −− + + = 2 2 2 2 1 1 * 2 1 1* 2 2 2 ),(2 σσ σσ 其中, 2 * 1 axa << , 21 2112* σσ σσ + += aax (见解法 I)。 求解式中各积分非常麻烦,这里就不解下去了。不过已经发现,求解此题,以选择 格贴近度法最好。 2.3 模糊模式识别原则 模糊模式识别大致有两种方法,一是直接方法,按“最大隶属原则”归类,主要应 用于个体的识别;另一是间接方法,按“择近原则”归类,一般应用于群体模型的识别。 2.3.1 最大隶属原则 设 )(UFAi ∈ ( ni ,,2,1 L= ),对 Uu ∈0 ,若存在 0i ,使 )}(,),(),(max{)( 0020100 uAuAuAuA ni L= 则认为 0u 相对地隶属于 iA ,这是最大隶属原则。 例 11 考虑人的年龄问题,分为年轻、中年、老年三类,分别对应三个模糊集 321 ,, AAA 。设论域 ]100,0(=U ,且对 ]100,0(∈x ,有 ⎪ ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ ≤< ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ − ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ −− ≤< = 10040,0 4030,20 402 3020,20 2021 200,1 )( 2 2 1 x xx xx x xA ⎪ ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎨ ⎧ ≤< ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ −− ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ − ≤< = 10070,1 7060,20 7021 6050,20 502 500,0 )( 2 2 3 x xx xx x xA -275- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎧ ≤< ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ − ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ −− ≤< ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ −− ≤<⎟ ⎠ ⎞⎜ ⎝ ⎛ − ≤< =−−= 10070,0 7060,20 702 6050,20 5021 5040,1 4030,20 4021 3020,20 202 200,0 )()(1)( 2 2 2 312 x xx xx x xx xx x xAxAxA 某人 40 岁,根据上式, 0)40(1 =A , 1)40(2 =A , 0)40(3 =A ,则 1)}40(),40(),40(max{)40( 3212 == AAAA 按最大隶属原则,他应该是中年人。 又如当 35=x 时, 125.0)35(1 =A , 875.0)35(2 =A , 0)35(3 =A 。可见 35 岁 的人应该是中年人。 2.3.2 择近原则 设 )(, UFBAi ∈ ( ni ,,2,1 L= ),若存在 0i ,使 )},(,),,(),,(max{),( 210 BANBANBANBAN ni L= 则认为 B 与 0iA 最贴近,即判定 B 与 0iA 为一类。该原则称为择近原则。 例 12 现有五个等级的茶叶样品 54321 ,,,, AAAAA ,待识别茶叶 B 。反映茶叶质 量的因素有六项指标,构成论域U ,其中 )}(),(),(),(),(),({ 654321 滋味香气汤色净度色泽条索 xxxxxxU = 设五个等级的样品对 6 项指标的数值为: )4.0,5.0,6.0,3.0,4.0,5.0(1 =A )2.0,2.0,1.0,2.0,2.0,3.0(2 =A -276- )2.0,1.0,1.0,2.0,2.0,2.0(3 =A )1.0,1.0,1.0,2.0,1.0,0(4 =A )1.0,1.0,1.0,1.0,1.0,0(5 =A 待识别茶叶的各项指标值为 )6.0,5.0,4.0,1.0,2.0,4.0(=B 确定 B 的属类。 解 利用格贴近度公式计算可得 ,(BN I 5.0) = , ,(BN II 3.0) = , ,(BN III 2.0) = , ,(BN IV 2.0) = , ,(BN V 1.0) = 按择近原则,可以将 B 定为一级茶叶(与 1A 同属一类)。 计算的 MATLAB 程序如下: a=[0.5 0.4 0.3 0.6 0.5 0.4 0.3 0.2 0.2 0.1 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.2 0 0.1 0.2 0.1 0.1 0.1 0 0.1 0.1 0.1 0.1 0.1]; b=[0.4 0.2 0.1 0.4 0.5 0.6]; for i=1:5 x=[a(i,:);b]; t(i)=min([max(min(x)) 1-min(max(x))]); end t §3 模糊聚类分析方法 在工程技术和经济管理中,常常需要对某些指标按照一定的标准(相似的程度或亲 疏关系等)进行分类处理。例如,根据生物的某些性态对其进行分类,根据空气的性质 对空气质量进行分类,以及工业上对产品质量的分类、工程上对工程规模的分类、图像 识别中对图形的分类、地质学中对土壤的分类、水资源中的水质分类等等。这些对客观 事物按一定的标准进行分类的数学方法称为聚类分析,它是多元统计“物以聚类”的一 -277- 种分类方法。然而,在科学技术、经济管理中有许多事物的类与类之间并无清晰的划分, 边界具有模糊性,它们之间的关系更多的是模糊关系。对于这类事物的分类,一般用模 糊数学方法、我们把应用模糊数学方法进行的聚类分析,称为模糊聚类分析。 3.1 预备知识 3.1.1 模糊等价矩阵 定义 12 设 nnijrR ×= )( 是 n 阶模糊方阵, njmi ,,2,1,,,2,1 LL == ,I 是 n 阶单 位方阵,若 R 满足 ① 自反性: )1( =⇔≤ iirRI ; ② 对称性: )( jiij T rrRR =⇔= ; ③ 传递性: RR ≤2 { } )1)(max( ijkjik rnkaa ≥≤≤∧⇔ ; 则称 R 为模糊等价矩阵。 定理 2 设 nnijrR ×= )( 是 n 阶模糊等价方阵,则 ]1,0[∈∀λ , λR 是 n 阶等价布尔 矩阵。 定理 3 设 nnijrR ×= )( 是 n 阶模糊等价矩阵,则 10 ≤≤≤∀ μλ , μR 所决定的分 类中的每一个类是 λR 所决定的分类中的某个子集。 这就是说,如果 ji xx , 按 μR 分在一类,则按 λR )10( ≤≤≤ μλ 也必分在一类,即 μR 所决定的分类中的每一个类是 λR 所决定的分类中的某个子集。 定理 3 表明:当 μλ < 时, μR 的分类是 λR 分类的加细,当 λ 由1变成0时, λR 的分类由细变粗,形成一个动态的聚类图,称之为模糊分类。 -278- 例13 设 },,,,{ 54321 xxxxxX = , ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 16.05.04.05.0 6.015.04.05.0 5.05.014.08.0 4.04.04.014.0 5.05.08.04.01 R 容易验证, R 为模糊等价矩阵。 当 1=λ 时, =1R ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 10000 01000 00100 00010 00001 ,得到的分类是 }{},{},{},{},{ 54321 xxxxx ; 当 8.0=λ 时, =8.0R ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 10000 01000 00101 00010 00101 ,得到的分类是 }{},{},{},,{ 54231 xxxxx ; 当 6.0=λ 时, =6.0R ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 11000 11000 00101 00010 00101 ,得到的分类是 },{},{},,{ 54231 xxxxx ; 当 5.0=λ 时, =5.0R ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 11101 11101 11101 00010 11101 ,得到的分类是 }{},,,,{ 25431 xxxxx ; -279- 当 4.0=λ 时, =5.0R ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 11111 11111 11111 11111 11111 ,得到的分类是 },,,,{ 54321 xxxxx 。 3.1.2 模糊相似矩阵 定义 13 设 nnijrR ×= )( 是 n 阶模糊方阵, njmi ,,2,1,,,2,1 LL == ,I 是 n 阶单 位方阵,若 R 满足 ① 自反性: )1( =⇔≤ iirRI ; ② 对称性: )( jiij T rrRR =⇔= ; 则称 R 为模糊相似矩阵。 定理 4 设 R 为模糊相似矩阵,则存在一个最小的自然数 k )( nk ≤ ,使 得 kR 为模 糊等价矩阵,且对一切大于 k 的自然数l ,恒有 kl RR = 。 证明从略。 定义 13 定理 4 中的 kR 称为 R 的传递闭包矩阵,记为 )(Rt 。 由定理 4 可以得到将 n 阶模糊相似矩阵 R 改造成 n 阶模糊等价矩阵的方法: 从 n 阶模糊相似矩阵 R 出发,依次求平方: L→→→ 42 RRR , 直到 iii RRR 222 =o ( nini 2log,2 ≤≤ ) 为止,则 i RRt 2)( = 。 -280- 例 14 设 ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = 13.02.0 3.011.0 2.01.01 R 容易验证, R 为模糊相似矩阵,用平方法求其传递闭包 )(Rt 。 2 13.02.0 3.012.0 2.02.01 13.02.0 3.011.0 2.01.01 13.02.0 3.011.0 2.01.01 RRR = ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = oo 222 13.02.0 3.012.0 2.02.01 13.02.0 3.012.0 2.02.01 13.02.0 3.012.0 2.02.01 RRR = ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = oo 故传递闭包 ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ == 13.02.0 3.012.0 2.02.01 )( 2RRt 容易验证,传递闭包 )( ~ Rt 是模糊等价矩阵。 3.2 模糊聚类分析法的基本步骤 Step1: 数据标准化 (1) 获取数据 设论域 },,,{ 21 nxxxX L= 为被分类的对象,每个对象又由 m 个指标表示其性态, 即 },,,{ 21 imiii xxxx L= ),,2,1( ni L= 于是可以得到原始数据矩阵 mnijxA ×= )( 。 (2) 数据的标准化处理 在实际问题中,不同的数据可能有不同的性质和不同的量纲,为了使原始数据能够 适合模糊聚类的要求,需要将原始数据矩阵 A 作标准化处理,即通过适当的数据变换, -281- 将其转化为模糊矩阵。常用的方法有以下两种: ① 平移—标准差变换 j jij ij s xxx −=' ),,2,1,,,2,1( mjni LL == 其中 ∑ = = n i ijj xnx 1 1 , 2 1 1 2 ])(1[ ∑ = −= n i jijj xxns , ),,2,1( mj L= ② 平移—极差变换 如果经过平移—标准差变换后还有某些 ]1,0[' ∉ijx ,则还需对其进行平移—极差变 换,即 }{min}{max }{min ' 1 ' 1 ' 1 ' '' ijniijni ijniij ij xx xx x ≤≤≤≤ ≤≤ − − = , ),,2,1( mj L= 显然所有的 ]1,0['' ∈ijx ,且也不存在量纲因素的影响,从而可以得到模糊矩阵 mnijxR ×= )( '' Step2: 建立模糊相似矩阵 设论域 },,,{ 21 nxxxX L= , },,,{ 21 imiii xxxx L= ),,2,1( ni L= ,即数据矩阵 mnijxA ×= )( 。如果 ix 与 jx 的相似程度为 ),( jiij xxRr = ,则称之为相似系数。确定相 似系数 ijr 有下列方法。 (1) 数量积法 对于 },,,{ 21 imiii xxxx L= ,令 ∑ =≠ ⋅= m k ikikji xxM 1 )(max ,则取 ⎪⎩ ⎪⎨ ⎧ ≠⋅ = = ∑ = m k jkik ij jixxM ji r 1 ,1 ,1 -282- 显然 ]1,0[∈ijr ,若出现某些 0 (6) 算术平均值法 -283- ∑ ∑ = = + ∧ = m k jkik m k jkik ij xx xx r 1 1 )(2 1 )( , ),,2,1,,0( njixij L=> (7) 几何平均值法 ∑ ∑ = = ⋅ ∧ = m k jkik m k jkik ij xx xx r 1 1 )( , ),,2,1,,0( njixij L=> (8) 绝对值倒数法 ⎪⎩ ⎪⎨ ⎧ ≠− = = ∑ = − m k jkik ij jixxM ji r 1 1,)( ,1 其中 M 为使得所有 ]1,0[∈ijr ),,2,1,( nji L= 的确定常数。 (9) 绝对值指数法 ∑ = −−= m k jkikij xxr 1 }exp{ ),,2,1,( nji L= (10) 海明距离法 ⎪⎩ ⎪⎨ ⎧ −= ⋅−= ∑ = m k jkikji jiij xxxxd xxdHr 1 ),( ),(1 , ),,2,1,( nji L= 其中 H 为使得所有 ]1,0[∈ijr ),,2,1,( nji L= 的确定常数。 (11) 欧氏距离法 ⎪ ⎩ ⎪ ⎨ ⎧ −= ⋅−= ∑ = m k jkikji jiij xxxxd xxdEr 1 2)(),( ),(1 , ),,2,1,( nji L= 其中 E 为使得所有 ]1,0[∈ijr ),,2,1,( nji L= 的确定常数。 -284- (12) 切比雪夫距离法 ⎪⎩ ⎪⎨ ⎧ −∨= ⋅−= = jkik m kji jiij xxxxd xxdQr 1 ),( ),(1 其中Q 为使得所有 ]1,0[∈ijr ),,2,1,( nji L= 的确定常数。 (13) 主观评分法 设有 N 个专家组成专家组 },,,{ 21 Nppp L ,让每一个专家对所研究的对象 ix 与 jx 相似程度给出评价,并对自己的自信度作出评估。如果第 k 位专家 kp 关于对象 ix 与 jx 的相似程度评价位 )(krij ,对自己的自信度评估为 )(kaij , ),,2,1,( nji L= ,则相 关系数定义为 ∑ ∑ = = ⋅ = N k ij N k ijij ij ka krka r 1 1 )( ))()(( , ),,2,1,( nji L= Step3: 聚类 所谓聚类方法就是依据模糊矩阵将所研究的对象进行分类的方法。对于不同的置信 水平 ]1,0[∈λ ,可以得到不同的分类结果,从而形成动态聚类图。常用的方法如下: (1) 传递闭包法 从 Step2 中求出的模糊相似矩阵 R 出发,来构造一个模糊等价矩阵 *R 。其方法就 是用平方法求出 R 的传递闭包 )(Rt ,则 *)( RRt = ;然后,由大到小取一组 ]1,0[∈λ , 确定相应的 λ 截矩阵,则可以将其分类,同时也可以构成动态聚类图。 (2) 布尔矩阵法 设论域 },,,{ 21 nxxxX L= , R 是 X 上的模糊相似矩阵,对于确定的 λ 水平要求 X 中的元素分类。 -285- 首先,由模糊相似矩阵作出其 λ 截矩阵 ))(( λλ ijrR = ,即 λR 为布尔矩阵;然后, 依据 λR 中的 1 元素可以将其分类。 如果 λR 为等价矩阵,则 R 也是等价矩阵,则可以直接分类。 若 λR 不是等价矩阵,则首先按一定的规则将 λR 改造成一个等价的布尔矩阵,再 进行分类。 (3) 直接聚类法 此方法是直接由模糊相似矩阵求出聚类图的方法,具体步骤如下: 1) 取 11 =λ (最大值),对于每个 ix 作相似类: }1{][ == ijjRi rxx ,即将满足 1=ijr 的 ix 与 jx 视为一类,构成相似类。 相似类和等价类有所不同,不同的相似类可能有公共元素,实际中对于这种情况可 以合并为一类。 2) 取 )( 122 λλλ < 为次大值,从 R 中直接找出相似程度为 2λ 的元素对 ),( ji xx , 即 2λ=ijr ,并相应地将对应于 11 =λ 的等价分类中 ix 与 jx 所在的类合并为一类,即可 得到 2λ 水平上的等价分类。 3) 依次取 L>>> 321 λλλ ,按 第 2)步的方法依次类推,直到合并到 X 成为一类 为止,最后可以得到动态聚类图。 3.3 模糊聚类分析应用案例 例 15 某地区内有 12 个气象观测站,10 年来各站测得的年降水量如表 3 所示。 为了节省开支,想要适当减少气象观测站,试问减少哪些观察站可以使所得到的降水量 信息仍然足够大? 表 3 年降水量(mm) 站 1 站 2 站 3 站 4 站 5 站 6 站 7 站 8 站 9 站 10 站 11 站 12 1981 276.2 324.5 158.6 412.5 292.8 258.4 334.1 303.2 292.9 243.2 159.7 331.2 1982 251.5 287.3 349.5 297.4 227.8 453.6 321.5 451.0 466.2 307.5 421.1 455.1 1983 192.7 433.2 289.9 366.3 466.2 239.1 357.4 219.7 245.7 411.1 357.0 353.2 -286- 1984 246.2 232.4 243.7 372.5 460.4 158.9 298.7 314.5 256.6 327.0 296.5 423.0 1985 291.7 311.0 502.4 254.0 245.6 324.8 401.0 266.5 251.3 289.9 255.4 362.1 1986 466.5 158.9 223.5 425.1 251.4 321.0 315.4 317.4 246.2 277.5 304.2 410.7 1987 258.6 327.4 432.1 403.9 256.6 282.9 389.7 413.2 466.5 199.3 282.1 387.6 1988 453.4 365.5 357.6 258.1 278.8 467.2 355.2 228.5 453.6 315.6 456.3 407.2 1989 158.2 271.0 410.2 344.2 250.0 360.7 376.4 179.4 159.2 342.4 331.2 377.7 1990 324.8 406.5 235.7 288.8 192.6 284.9 290.5 343.7 283.4 281.2 243.7 411.1 解 我们把 12 个气象观测站的观测值看成 12 个向量组,由于本题只给出了 10 年 的观测数据,根据线性代数的理论可知,若向量组所含向量的个数大于向量的维数,则 该向量组必然线性相关。于是只要求出该向量组的秩就可确定该向量组的最大无关组所 含向量的个数,也就是需保留的气象观测站的个数。由于向量组中的其余向量都可由极 大线性无关组线性表示,因此,可以使所得到的降水信息量足够大。 用 10,,2,1 L=i 分别表示 1981 年,1982 年,…,1990 年。 ija ( 10,,2,1 L=i , 12,,2,1 L=j )表示第 j 个观测站第i 年的观测值,记 1210)( ×= ijaA 。 利用 MATLAB 可计算出矩阵 A 的秩 10)( =Ar ,且任意 10 个列向量组成的向量组 都是极大线性无关组,例如,我们选取前 10 个气象观测站的观测值作为极大线性无关 组,则第 11,12 这两个气象观测站的降水量数据完全可以由前 10 个气象观测站的数据 表示。设 ix ( 12,,2,1 L=i )表示第i 个气象观测站或第i 个观测站的观测值。则有 109876 5432111 9379.2679.18396.01649.00442.1 3075.13191.01639.0756.00124.0 xxxxx xxxxxx ++−−− −++−= 109876 5432112 9397.265581.15868.50196.278061.19 9423.183458.68035.96301.104549.1 xxxxx xxxxxx −−+−+ ++++= 到目前为止,问题似乎已经完全解决了,可其实不然,因为如果上述观测站的数 据不是 10 年,而是超过 12 年,则此时向量的维数大于向量组所含的向量个数,这样的 向量组未必线性相关。故上述的解法不具有一般性,下面我们考虑一般的解法,首先, 我们利用已有的 12 个气象观测站的数据进行模糊聚类分析,最后确定从哪几类中去掉 几个观测站。 (1)建立模糊集合 设 jA (这里我们仍用普通集合表示)表示第 j 个观测站的降水量信息 ( 12,,2,1 L=j ),我们利用模糊数学建立隶属函数: -287- 2 )( ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ − − = j j j b ax A exμ 其中 10 10 1 ∑ == i ij j a a , ∑ = −= 10 1 2)(9 1 i jijj aab 。 利用 MATLAB 程序可以求得 jj ba , ( 12,,2,1 L=j )的值分别见表 4,表 5。 表 4 均值 ja ( 12,,2,1 L=j )的值 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12a 291.98 311.77 320.32 342.28 292.22 315.15 343.99 303.71 312.16 299.47 310.72 391.89 表 5 均值 jb ( 12,,2,1 L=j )的值 1b 2b 3b 4b 5b 6b 7b 8b 9b 10b 11b 12b 100.25 80.93 108.24 63.97 94.1 94.2 38.05 85.07 109.4 57.25 86.52 36.83 (2)利用格贴近度建立模糊相似矩阵 令 2 ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ + − − = ji ij bb aa ij er ,( 12,,2,1, L=ji ) 求模糊相似矩阵 1212)( ×= ijrR ,具体求解结果略。 (3)求 R 的传递闭包 求得 4R 是传递闭包,也就是所求的等价矩阵。这里传递闭包的结果略。 取 998.0=λ ,进行聚类,可以把观测站分为 4 类: }{},{},,,,,,{},{ 127411109863251 xxxxxxxxxxxx UUU 上述分类具有明显的意义, 51,xx 属于该地区 10 年中平均降水量偏低的观测站, 74 ,xx 属于该地区 10 年平均降水量偏高的观测站, 12x 是平均降水量最大的观测站,而 -288- 其余观测站属于中间水平。 (4)选择保留观测站的准则 显然,去掉的观测站越少,则保留的信息量越大。为此,我们考虑在去掉的观测 站数目确定的条件下,使得信息量最大的准则。由于该地区的观测站分为 4 类,且第 4 类只含有一个观测站,因此,我们从前 3 类中各去掉一个观测站,我们的准则如下: ∑ = −= 10 1 2 3 )(min i ii dderr 其中, id 表示该地区第i 年的平均降水量, 3id 表示该地区去掉 3 各观测站以后第i 年 的平均降水量。利用 MATLAB 软件,我们计算了 28 组不同的方案(表 7),求得满足 上述准则应去掉的观测站为: 765 ,, xxx ,此时年平均降水量曲线如图 1 所示,二者很 接近。 1980 1985 1990 280 290 300 310 320 330 340 350 360 370 1980 1985 1990 270 280 290 300 310 320 330 340 350 360 370 该地区年平均降水量 取消3个站点后年平均降水量 图 3 年降水量比较示意图 表 6 前 3 类各取消一个站点的各方案的误差平方和 取消站点编号 err 取消站点编号 err 1 4 2 1.71E+03 5 4 2 3.36E+03 1 4 3 1.30E+03 5 4 3 2.27E+03 1 4 6 2.03E+03 5 4 6 1.14E+03 1 4 8 2.94E+03 5 4 8 3.26E+03 1 4 9 2.29E+03 5 4 9 2.04E+03 1 4 10 1.94E+03 5 4 10 4.08E+03 1 4 11 1.49E+03 5 4 11 2.39E+03 1 7 2 1.29E+03 5 7 2 2.51E+03 -289- 1 7 3 1.82E+03 5 7 3 2.36E+03 1 7 6 1.95E+03 5 7 6 6.26E+02 1 7 8 1.53E+03 5 7 8 1.42E+03 1 7 9 1.65E+03 5 7 9 9.72E+02 1 7 10 1.11E+03 5 7 10 2.81E+03 1 7 11 1.05E+03 5 7 11 1.51E+03 (5)求解的 MATLAB 程序如下: i)求模糊相似矩阵的 MATLAB 程序 a=[276.2 324.5 158.6 412.5 292.8 258.4 334.1 303.2 292.9 243.2 159.7 331.2 251.5 287.3 349.5 297.4 227.8 453.6 321.5 451.0 466.2 307.5 421.1 455.1 192.7 433.2 289.9 366.3 466.2 239.1 357.4 219.7 245.7 411.1 357.0 353.2 246.2 232.4 243.7 372.5 460.4 158.9 298.7 314.5 256.6 327.0 296.5 423.0 291.7 311.0 502.4 254.0 245.6 324.8 401.0 266.5 251.3 289.9 255.4 362.1 466.5 158.9 223.5 425.1 251.4 321.0 315.4 317.4 246.2 277.5 304.2 410.7 258.6 327.4 432.1 403.9 256.6 282.9 389.7 413.2 466.5 199.3 282.1 387.6 453.4 365.5 357.6 258.1 278.8 467.2 355.2 228.5 453.6 315.6 456.3 407.2 158.2 271.0 410.2 344.2 250.0 360.7 376.4 179.4 159.2 342.4 331.2 377.7 324.8 406.5 235.7 288.8 192.6 284.9 290.5 343.7 283.4 281.2 243.7 411.1]; mu=mean(a),sigma=std(a) for i=1:12 for j=1:12 r(i,j)=exp(-(mu(j)-mu(i))^2/(sigma(i)+sigma(j))^2); end end r save data1 r a ii)矩阵合成的 MATLAB 函数 function rhat=hecheng(r); n=length(r); for i=1:n for j=1:n rhat(i,j)=max(min([r(i,:);r(:,j)'])); end end iii)求模糊等价矩阵和聚类的程序 load data1 r1=hecheng(r) r2=hecheng(r1) -290- r3=hecheng(r2) bh=zeros(12); bh(find(r2>0.998))=1 iv)计算表6的程序 编写计算误差平方和的函数如下: function err=wucha(a,t); b=a;b(:,t)=[]; mu1=mean(a,2);mu2=mean(b,2); err=sum((mu1-mu2).^2); 计算28个方案的主程序如下: load data1 ind1=[1,5];ind2=[2:3,6,8:11];ind3=[4,7]; so=[]; for i=1:length(ind1) for j=1:length(ind3) for k=1:length(ind2) t=[ind1(i),ind3(j),ind2(k)]; err=wucha(a,t); so=[so;[t,err]]; end end end so tm=find(so(:,4)==min(so(:,4))); shanchu=so(tm,1:3) §3 模糊决策分析方法 模糊数学中有一个研究的热点问题就是“模糊决策”,它就是研究在模糊环境下或者 模糊系统中进行决策的数学理论和方法。模糊决策的目标是把决策论域中的对象在模糊 环境下进行排序,或按某些模糊限制条件从决策域中选择出最优对象。 3.1 模糊综合评价法 模糊综合评价方法,是应用模糊关系合成的原理,从多个因素(指标)对被评价事物 隶属等级状况进行综合性评判的一种方法,其具体的步骤为: -291- (1) 确定被评判对象的因素论域U , ),,,( 21 nuuuU L= ; (2) 确定评语等级论域V , ),,,( 21 nvvvV L= 。通常评语有 =V (很高,高,较 高,…,较低,低,很低); (3) 进行单因素评判,建立模糊关系矩阵 R ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = nmnn m m rrr rrr rrr R L LLLL L L 21 22221 11211 , 10 ≤≤ ijr 其中 ijr 为U 中因素 iu 对于V 中等级 jv 的隶属关系; (4) 确定评判因素权向量 ),,,( 21 naaaA L= ,A 是U 中各因素对被评事物的隶属 关系,它取决于人们进行模糊综合评判时的着眼点,即根据评判时各因素的重要性分配 权重; (5) 选择评价的合成算子,将 A 与 R 合成得到 ),,,( 21 mbbbB L= 。 =Ο= RAB ),,,( 21 naaa L ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ Ο nmnn m m rrr rrr rrr L LLLL L L 21 22221 11211 )()()( **2211 njnjjj rararab ∗∗∗∗ •++•+•= L , mj ,,2,1 L= 常用的模糊算子有: ① ),( ∨∧M , 即用 ∧ 代替 ∗ • ,用∨ 代替 ∗ + ,式中 ∧ 为取小运算,∨ 代表取大运 算; ② ),( ∨•M , 即用实数乘法• 代替 ∗ • , 用∨ 代替 ∗ + ; ③ ),( ⊕∧M ,即用 ∧ 代替 ∗ • , 用⊕ 代替 ∗ + , 其中 ),1min( baba +=⊕ ; ④ ),( ⊕•M ,即用实数乘法• 代替 ∗ • , 用⊕ 代替 ∗ + 。 -292- 经过比较研究, ),( ⊕•M 对各因素按权数大小,统筹兼顾,综合考虑,比较合理。 (6) 对模糊综合评价结果 B 作分析处理。 ★ 多目标模糊综合评价法建模实例 科技成果通常可用技术水平、技术难度、工作量、经济效益、社会效益等 5 个指 标进行评价,等级分为一等、二等、三等、四等。某项科研成果经过评委会评定,得到 单因素评判矩阵 ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 022.035.043.0 39.030.022.009.0 26.044.030.00 09.039.035.017.0 04.022.039.035.0 R 若为了评定作者的学术成就,取权数分配 )1.0,1.0,1.0,35.0,35.0(=A , 综合评判为 =Ο= RAB )1.0,1.0,1.0,35.0,35.0(=A ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ Ο 022.035.043.0 39.030.022.009.0 26.044.030.00 09.039.035.017.0 04.022.039.035.0 用 ),( ∨∧M 算子计算得到 )1.0,35.0,35.0,35.0(=B 成果仍模糊,成果评一、二、 三等都行,无法分辨。 用 ),( ∨•M 算子,得 )04.0,14.0,14.0,12.0(=B 用 ),( ⊕∧M 算子,得 )33.0,87.0,1,71.0(=B -293- 用 ),( ⊕•M 算子,得 )11.0,31.0,35.0,23.0(=B 由计算结果可见,用 ),( ⊕•M 评价模型比较合理,成果应评为二等奖。 3.2 多目标模糊综合评价决策法 当被评价的对象有两个以上时,从多个对象中选择出一个最优的方法称为多目标模 糊综合评价决策法。 评价的步骤: ① 对每个对象按上面多个目标(因素)进行模糊综合评价; ② 将模糊评语量化,计算各对象的优先度。假设模糊评价评语量化集(或评价尺 度)为 S ,则各对象的优先度为: T m m kkk T kk SSSBBBSBN ),,,(),,,( 21 21 LL ⋅== ★ 多目标模糊综合评价决策法建模实例 假定在上例中有两项科研成果,第一项科研成果为甲项,其模糊评价结果为 )11.0,31.0,5.0,23.0(1 =B 现对科研成果乙进行同样的模糊评价,其评价矩阵为 ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = 3.03.02.02.0 1.06.02.01.0 1.02.030.04.0 01.06.03.0 01.06.03.0 2R 各评价因素的权值分配为 )1.0,1.0,1.0,35.0,35.0(=A 所以,综合评价为 -294- =Ο= 22 RAB )1.0,1.0,1.0,35.0,35.0(=A ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ Ο 3.03.02.02.0 1.06.02.01.0 1.02.030.04.0 01.06.03.0 01.06.03.0 )003.0,18.0,49.0,28.0(= 下面将评语集量化:即(一等、二等、三等、四等)= )1.0,2.0,3.0,4.0( = S 所以 == TSBN 11 )11.0,31.0,5.0,23.0( 315.0)1.0,2.0,3.0,4.0( =T == TSBN 22 )003.0,18.0,49.0,28.0(= 2953.0)1.0,2.0,3.0,4.0( =T 所以, 21 NN > ,即项目甲优于项目乙。 例 16 某露天煤矿有五个边坡设计方案,其各项参数根据分析计算结果得到边坡 设计方案的参数如下表所示。 表 7 设计方案数据表 项 目 方案 I 方案 II 方案 III 方案 IV 方案 V 可采矿量(万吨) 4700 6700 5900 8800 7600 基建投资(万元) 5000 5500 5300 6800 6000 采矿成本(元/吨) 4.0 6.1 5.5 7.0 6.8 不稳定费用(万元) 30 50 40 200 160 净现值(万元) 1500 700 1000 50 100 据勘探该矿探明储量 8800 吨,开采总投资不超过 8000 万元,试作出各方案的优 劣排序,选出最佳方案。 解 首先确定隶属函数: (1)可采矿量的隶属函数 因为勘探的地质储量为 8800 吨,故可用资源的利用函数作为隶属函数 8800)( xxA =μ (2)投资约束是 8000 万元,所以 18000)( +−= xxBμ 。 (3)根据专家意见,采矿成本 5.51 ≤a 元/吨为低成本, 0.82 =a 元/吨为高成本, 故 -295- ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ < ≤≤− − ≤≤ = xa axaaa xa ax xC 2 21 12 2 1 ,0 , 0 ,1 )(μ (4)不稳定费用的隶属函数 2001)( xxD −=μ 。 (5)净现值的隶属函数 取上限 15(百万元),下限 0.5(百万元),采用线性隶属函数 )5.0(5.14 1)( −= xxEμ 根据各隶属函数计算出 5 个方案所对应的不同隶属度,见表 8。 表 8 隶属度表 项 目 方案 I 方案 II 方案 III 方案 IV 方案 V 可采矿量 0.5341 0.7614 0.6705 1 0.8636 基建投资 0.3750 0.3125 0.3375 0.15 0.25 采矿成本 1 0.76 1 0.4 0.48 不稳定费用 0.85 0.75 0.8 0 0.2 净现值 1 0.4480 0.6552 0 0.0345 这样就决定了模糊关系矩阵 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0345.006552.04480.01 2.008.075.085.0 48.04.0176.01 25.015.03375.03125.03750.0 8636.016705.07614.05341.0 R 根据专家评价,诸项目在决策中占的权重为 )25.0,10.0,20.0,20.0,25.0(=A , 于是得诸方案的综合评价为 )3905.0,3600.0,6789.0,5919.0,7435.0(== ARB 由此可知:方案 I 最佳,III 次之,IV 最差。 程序计算如下: (1)首先编写函数文件 myfun.m 如下: function f=myfun(x); f(1,:)=x(1,:)/8800; f(2,:)=1-x(2,:)/8000; f(3,:)=0; f(3,find(x(3,:)<=5.5))=1; -296- flag=find(x(3,:)>5.5 & x(3,:)<=8); f(3,flag)=(8-x(3,flag))/2.5; f(4,:)=1-x(4,:)/200; f(5,:)=(x(5,:)-50)/1450; (2)编写程序文件如下: x=[4700 6700 5900 8800 7600 5000 5500 5300 6800 6000 4.0 6.1 5.5 7.0 6.8 30 50 40 200 160 1500 700 1000 50 100]; r=myfun(x); a=[0.25,0.20,0.20,0.10,0.25]; b=a*r 3.3 多层次模糊综合评价模型的数学方法 3.3.1 多层次模糊综合评价模型数学方法的基本步骤 (1) 给出被评价的对象集合 },,,,{ 321 kxxxxX L (2) 确定因素集(亦称指标体系) },,,{ 21 nuuuU L= 若因素众多,往往将 },,{ 21 nuuuU L= 按某些属性分成 s 个子集, },,,{ )()( 2 )( 1 i n ii i i uuuU L= , si L,2,1= , 且满足条件: ① nn s i i =∑ =1 ; ② UU s i i = =U1 ; ③ jiUU ji ≠= ,φI (3) 确定评语集 },,{ 21 mvvvV L= . (4) 由因素集 iU 与评语集V ,可获得一个评价矩阵 ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = )()( 2 )( 1 )( 1 )( 12 )( 11 i mn i n i n i m ii i iii rrr rrr R L MMM L (5) 对每一个 iU ,分别作出综合决策。设 iU 中的各因素权重的分配(称为模糊权向 量)为 ),,( )()( 2 )( 1 i n ii i i aaaA L= ,其中 1 1 )( =∑ = in t i ta 。 -297- 若 iR 为单因素矩阵,则得到一级评价向量为: iimiiii B)b,,b,b(RA Δ=Ο L21 , si L,2,1= (6) 将每个 iU 视为一个因素,记 },,{ 21 sUUUU L= ,于 是 U 又是单因素集, U 的单因素判断矩阵为 ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ = ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = smss m s bbb bbb B B B R L MMM L M 21 11211 2 1 每个 iU 作为U 的一部分,反映了U 的某种属性,可以按他们的重要性给出权重分配 ),,,( 21 saaaA L= 于是得到二级模糊综合评价模型为: ),,,( 21 mbbbRAB L=Ο= 若每个子因素 iU ( si ,,2,1 L= )仍有较多因素, 则可将 iU 再划分,于是有三级或 更高级模型。 3.3.2 多目标模糊综合评价决策法建模实例 科技成果模糊综合评价模型的建立及其有关参数的确定。 (1)科技成果综合评价的因素集(指标体系)的确定 根据科研成果的特点, 并经过专家调研, 设计以下一套综合评价指标体系. ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎧ ⎩ ⎨ ⎧ ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ⎪⎩ ⎪⎨ ⎧ )( )()( )( )( )( )( )( )( )( )( )( )( 32 31 3 24 23 22 21 2 13 12 11 1 u uU u u u u U u u u U A 科研效率 科研规模科研投入 技术创新 技术水平 学术创新 学识水平 科研水平 社会效益 潜在经济效益 直接经济效益 科研效益 科技成果综合评价 -298- 目标层 )(A 准则层 )(B 指标层 )(C 图 3 科技成果综合评价层次结构 (2)科技成果的评语集的确定 在评价科技成果时,可以将其分为一定的等级. 在此, 从“专家打分”的角度把 评价的等级分为“10 分”、“8 分”、“6 分”、“4 分”、“2 分”五个等级,因此评语集表 示为: =V {10 分, 8分, 6分, 4分, 2分}. (3)确定各指标 iu 隶属于V 中评语的隶属度 ijr . 采用评委会评分法确定隶属度 ijr . 若评委会有 n 个人,那么对某一科技成果, 指标层中某一指标隶属于V 中某一评 语的隶属度表示为: n jVuCr i ij 个等级的人数中第全体评委中评其为中的某一因子对 ,= 由于C 中的 9 个指标按科研效益 1U 、科研水平 2U 、科研投入 3U 三个准则分成了 三类,把每个类别中的元素作为一个整体来构造评价矩阵,如 1U (科研效益)中的“直 接经济效益”、“潜在经济效益”、“社会效益”对评语集V 中的五个等级而言,按上述 的定义可得到 53× 矩阵 1R ,同样可得到 2R , 3R , 即 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 3534333231 2524232221 1514131211 1 rrrrr rrrrr rrrrr R , ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ' 45 ' 44 ' 43 ' 42 ' 41 ' 35 ' 34 ' 33 ' 32 ' 31 ' 25 ' 24 ' 23 ' 22 ' 21 ' 15 ' 14 ' 13 ' 12 ' 11 2 rrrrr rrrrr rrrrr rrrrr R ⎥ ⎦ ⎤ ⎢ ⎣ ⎡= " 25 " 24 " 23 " 22 " 21 " 15 " 14 " 13 " 12 " 11 3 rrrrr rrrrrR -299- (4)权重 ka 的确定 在( 1)给出的综合评价体系中三大准则及 9 个指标中, 他们在综合评价中的重要 程度是不一样的。地位重要的,应给予较大的权重;反之,应给出较小的权重。下文给 出两种确定权重的实用方法。 ① 频数统计法确定权重. 设因素集为 },,{ 21 nuuuU L= ,请 k )30( ≥k 位专家对各因素提出自己的权重分 配。组织者根据回收的权重分配调查表,对每个因素 iu ( ni L,2,1= )进行单因素的权 重统计试验, 步骤如下: i) 对因素 iu ( ni L,2,1= )在它的权重 ija ( kj L,2,1= )中找出最大值 iM 和最小值 im . ii) 适当选取正整数 p ,利用公式 p mM ii − 计算出把权重分成 p 组的组距, 并将 权重从大到小分成 p 组. iii) 计算落在每组内权重的频数与频率. iv) 根据频数和频率分布情况,一般取最大频率所在分组的组中值为因素 iu 的权重 ia ( ni L,2,1= ), 从而得到初始权重的向量为 ),,,( 21 naaaA L= , 再归一化处理, 得权重向量为: ),,,( 11 2 1 1 ∑∑∑ === = n i i n n i i n i i a a a a a aA L . ② 模糊层次分析法(AHP)确定权重 该法的基本原理是从(1)中给出的综合评价体系的层次结构出发,针对每个准则 内的指标,运用专家的知识、智慧、信息和价值观,对同一层或同一个域的指标进行两 两比较对比,并按 1—9 判断标度及含义构造判断矩阵 nnijdD ×= )( ,再由组织者计算比 -300- 较判断矩阵 D 的最大特征根 maxλ ,并由 maxλ 解特征方程: xDx maxλ= 得到对应 maxλ 的 特征向量 T nxxxx ),,,( 21 L= ,最后进行归一化处理,得到最后的评价指标权重向量: ),,,( 11 2 1 1 ∑∑∑ === = n i i n n i i n i i x x x x x xA L 在确定最终的权重向量之前需要对判断矩阵 D 作一致性检验。 设由以上提供的任一方法所确定的权数向量为: ),,( 321 aaaA = ),,( 1312111 aaaA = ),,,( 242322212 aaaaA = ),( 32313 aaA = 其中 A 表示科研效益 1U 、科研水平 2U 、科研投入 3U 三个准则的权重向量; iA 表示各 准则 iU ( 3,2,1=i )中的各指标的权重向量。 (5)科技成果的综合评价 AB = Ο Ο= ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ Ο Ο Ο Ο= ),,(),,( 321 33 22 11 321 aaa RA RA RA aaaR ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ 3534333231 2524232221 1514131211 bbbbb bbbbb bbbbb ),,,,( 54321 bbbbb= 其中“ Ο ”取算子 ),( ⊕•M : • 定义为 abbaba =×=⋅ ; ⊕ 定义为 1)( ∧+=⊕ baba 。 对 B 进行归一化处理得: ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ = ∑∑∑ === n i i i i i i b b b b b bB 1 5 5 1 2 5 1 1 ,,, L %),%,%,( 521 CCC LΔ 结果说明:对某科技成果,评委中有 %1C 的人认为可得 10 分,有 %2C 的人认为 可得 8 分,有 %3C 的人认为可得 6 分,有 %4C 的人认为可得 4 分,有 %5C 的人认为 -301- 可得 2 分。 进一步的, 把 10 分,8 分,6 分,4 分,2 分作为 5 个档次。令 TY )2,4,6,8,10(= , 所以该科技成果的综合评价得分为: YBZ Ο= , “Ο ”取算子 ),( +⋅M 得到: =Z %2%4%6%8%10 54321 CCCCC ++++ 3.4 模糊多属性决策方法 3.4.1 模糊多属性决策理论的描述 模糊多属性决策理论是在经典多属性决策理论基础上发展起来的,它可以描述为: 给定一个方案集 },,,{ 21 mAAAA L= 和相应的每个方案的属性集(也称指标集) =C ),,,( 21 nCCC L ,并给定每种属性相对重要程度的权重集合 ),,,( 21 nwwww L= 。 把已知的属性指标、权重大小和数据结构都相应的表示成决策空间中的模糊子集或模糊 数,得到模糊指标值矩阵,记为 nmijfF ×= )( 。然后采用广义模糊合成算子对模糊权重 向量 w 和模糊指标值矩阵 F 实施变换,得到模糊决策矩阵 D : FwD Θ= , 对于 D 中 的元素采用模糊折衷型决策方法对其进行排序, 以此来选出 iA ( mi ,,2,1 L= )中的最 优方案。 3.4.2 折衷型模糊多属性决策方法 (1)折衷型模糊决策的基本原理 折衷型模糊决策的基本原理是:从原始的样本数据出发,先虚拟模糊正理想和模糊 负理想,其中模糊正理想是由每一个指标中模糊指标值的极大值构成;模糊负理想是由 每一个指标中模糊指标值的极小值构成。然后采用加权欧氏距离的测度工具来计算各备 选对象与模糊正理想和模糊负理想之间的距离。在此基础上,再计算各备选对象属于模 糊正理想的隶属度,其方案优选的原则是,隶属度越大,该方案越理想。 (2)折衷型模糊决策的基本步骤 Step1:指标数据的三角形模糊数表达 -302- 定义 14 记 )(RF 为 R 上的全体模糊集,设 )(RFM ∈ 。如果 M 的隶属度函数 Mμ 表示为 ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ >< ∈− − ∈− − = uxlx umxum ux mlxlm lx xM 或,0 ],[, ],[, )(μ 其中 uml ≤≤ ,则称 M 为三角形模糊数,记为 ),,(),,( RL mmmumlM == 。 下面运用以上的定义将定性、定量指标以及权重数据统一量化为三角形模糊数. 1) 对于定性指标,可以将两极比例法改进为三角模糊数比例法。再利用三角模糊 数比例法将定性指标转化为定量指标,其具体的转化形式见表 9。 表 9 定性指标向定量指标转化的三角模糊数比例法 (0,0,1) (1,1,2) (2,3,4) (4,5,6) (6,7,8) (7,8,9) (9,10,10) 成本型指标 最高 很高 高 一般 低 很低 最低 收益型指标 最低 很低 低 一般 高 很高 最高 2) 对于精确的定量指标值,也写成三角模糊数的形式。设 a 是一个具体的精确数, 由三角模糊数的定义,则 a 表示成三角模糊数的形式为: ),,( aaaa = (1) 当所有的属性指标全部化为三角模糊数后,设此时得到的模糊指标矩阵为 nmijfF ×= )( 。 3)对于权重向量的三角模糊数表示 ① 若权重是定量的形式给出的,则由公式(1)可表示为 []),,(),,,(),,,(),,,(),,,(),,,( 666555444333222111 wwwwwwwwwwwwwwwwwww = (2) ② 若权重是定性描述给出的, 此时可以利用表 3 的转化方法将其转化为三角模糊 量 化 值 属 性 -303- 数的表达形式. Step2: 模糊指标矩阵 F 归一化处理 一般地,设有 N 个评价对象,对于第 j )5,,2,1( L=j 个评价指标而言,在 F 中 对应有 N 个模糊指标值,记为 ),,( iiii cbax = , ),,2,1( Ni L= 。将 ix 进行归一化的 具体公式如下: ① 若 ix 是成本型指标对应的模糊指标值,则归一化公式为 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ∧= 1)min(,)min(,)min( i i i i i i i a c b b c ay (3) ② 若 ix~ 是收益型指标对应的模糊指标值,则化归公式为 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ ∧= 1)max(,)max(,)max( i i i i i i i a c b b c ay (3’) 设归一化后的模糊指标矩阵 nmijyR ×= )( 。 Step3: 构造模糊决策矩阵 将归一化后的模糊指标矩阵 R 进行加权处理可得到模糊决策矩阵 nmijrD ×= )( , 其中 ijij ywr Θ= ( Ni ,,2,1 L= , 5,,2,1 L=j ) 这里我们采用普通的加权方式, 即若 ),,( )3()2()1( wwww = , ),,( )3()2()1( ijijijij yyyy = , 则 ),,( )3()3()2()2()1()1( ijijijijij ywywywywr =Θ= (4) Step4: 确定模糊正理想 +M 与模糊负理想 −M 设 ),,,( 1521 ++++ = MMMM L , ),,,( 1521 −−−− = MMMM L (5) 其中分量 },,,max{ 21 njjjj rrrM L=+ ( 15,,2,1 L=j )是模糊决策矩阵 D 中第 j 列的模 -304- 糊指标值所对应的模糊极大值; },,,min{ 21 mjjjj rrrM L=− ( 15,,2,1 L=j )是模糊决 策矩阵 D 中第 j 列的模糊指标值所对应的模糊极小值。 Step5: 确定评价对象i 与模糊正理想 +M 之间的距离 + id ∑ = ++ −= 15 1 2)( j jiji Mrd , Ni ,2,1 L= (6) Step6: 确定评价对象i 与模糊负理想 −M 之间的距离 − id ∑ = −− −= 15 1 2)( j jiji Mrd , Ni ,2,1 L= (7) Step7: 模糊优选决策 设评价对象i 以隶属度 iμ 从属于模糊正理想,则 −+ − + = ii i i dd dμ , Ni ,,2,1 L= (8) 显然 10 ≤≤ iμ ,若 iA 与 +M 越接近,则 iμ 越接近于 1。按隶属度 iμ 从大到小进行排 序。 iμ 越大,表示评价对象i 越优。最后按隶属度的排序结果确定评价对象的优劣。 3.4.3 折衷型模糊决策方法建模实例 某市直属单位因工作需要,拟向社会公开招聘 8 名公务员,具体的招聘办法和程序 如下: (一)公开考试:凡是年龄不超过 30 周岁,大学专科以上学历,身体健康者均可 报名参加考试,考试科目有:综合基础知识、专业知识和“行政职业能力测验”三个部 分,每科满分为 100 分。根据考试总分的高低排序选出 16 人选择进入第二阶段的面试 考核。 (二)面试考核:面试考核主要考核应聘人员的知识面、对问题的理解能力、应变 能力、表达能力等综合素质。按照一定的标准,面试专家组对每个应聘人员的各个方面 都给出一个等级评分,从高到低分成 A/B/C/D 四个等级,具体结果见表 10 所示。 -305- 现要求根据表 8 中的数据信息对 16 名应聘人员作出综合评价,选出 8 名作为录用 的公务员。 表 10 招聘公务员笔试成绩,专家面试评分 专家组对应聘者特长的等级评分 应聘 人员 笔试 成绩 知识面 理解能力 应变能力 表达能力 人员 1 290 A A B B 人员 2 288 A B A C 人员 3 288 B A D C 人员 4 285 A B B B 人员 5 283 B A B C 人员 6 283 B D A B 人员 7 280 A B C B 人员 8 280 B A A C 人员 9 280 B B A B 人员 10 280 D B A C 人员 11 278 D C B A 人员 12 277 A B C A 人员 13 275 B C D A 人员 14 275 D B A B 人员 15 274 A B C B 人员 16 273 B A B C (此题来源于 2004 高教社杯全国大学生数学建模竞赛 D 题——公务员招聘) 建模过程: ① 借鉴表 9 的思想,对于定性指标值 A,B,C,D,可以定义表 10 的量化标准 将这些定性指标进行量化,其具体的量化形式见表 11。 表 11 定性指标量化标准 专家评分等级 A B C D 量化模糊数 (85,90,100) (75,80,85) (60,70,75) (50,55,60) ② 由表 11 和公式(1)把表 10 中的指标信息、权重信息化成三角形模糊数,得到 -306- ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = )75,70,65()85,80,75()100,90,85()85,80,75()273,273,273( )85,80,75()75,70,65()85,80,75()100,90,85()274,274,274( )85,80,75()100,90,85()85,80,75()65,60,50()275,275,275( )100,90,85()65,60,50()75,70,65()85,80,75()275,275,275( )100,90,85()75,70,65()85,80,75()100,90,85()277,277,277( )100,90,85()85,80,75()75,70,65()65,60,50()278,278,278( )75,70,65()100,90,85()85,80,75()65,60,50()280,280,280( )85,80,75()100,90,85()85,80,75()85,80,75()280,280,280( )75,70,65()100,90,85()100,90,85()85,80,75()280,280,280( )85,80,75()75,70,65()85,80,75()100,90,85()280,280,280( )85,80,75()100,90,85()65,60,50()85,80,75()283,283,283( )75,70,65()85,80,75()100,90,85()85,80,75()283,283,283( )85,80,75()85,80,75()85,80,75()100,90,85()285,285,285( )75,70,65()65,60,50()100,90,85()85,80,75()288,288,288( )75,70,65()100,90,85()85,80,75()100,90,85()288,288,288( )85,80,75()85,80,75()100,90,85()100,90,85()290,290,290( F [])125.0,125.0,125.0(),125.0,125.0,125.0(),125.0,125.0,125.0)(125.0,125.0,125.0(),5.0,5.0,5.0(=W ③ 由公式(3’)和(4)将 F 中的数据进行归一加权化,得到模糊决策矩阵 D 。 ④ 由公式(5)确定出模糊正理想与模糊负理想 )]125.0,125.0,1063.0(),125.0,125.0,1063.0( ),125.0,125.0,1063.0(),125.0,125.0,1063.0(),5.0,5.0,5.0[(=+M )]125.0,0972.0,075.0(),0882.0,0764.0,0625.0( ),0882.0,0764.0,0625.0(),0882.0,0764.0,0625.0(),4707.0,4707.0,4707.0[(=−M ⑤ 模糊优选决策 由公式(6)~(8),可求出相应的 + id , − id , iμ ( 16,,2,1 L=i ),结果如表 12。 表 12 计算结果数据表 人员编号 模糊正理想 + id 模糊负理想 − id 隶属度 iμ 1 0.0264 0.1338 0.8351 2 0.0462 0.1296 0.7373 3 0.0881 0.1057 0.5454 4 0.0356 0.1205 0.7718 5 0.0537 0.1166 0.6846 6 0.0822 0.103 0.5559 7 0.0578 0.1099 0.6555 8 0.0547 0.1234 0.693 9 0.044 0.117 0.7265 10 0.0928 0.098 0.5135 -307- 11 0.0949 0.0863 0.4762 12 0.06 0.114 0.655 13 0.0987 0.0852 0.4634 14 0.0913 0.0987 0.5195 15 0.0688 0.108 0.6109 16 0.0709 0.1127 0.6139 由以上结果可知,16 个人的综合水平的高低排序为: 131110143615 16127589241 μμμμμμμ μμμμμμμμμ >>>>>>> >>>>>>>> 因此被选种的 8 个人员是人员 1、4、2、9、8、5、7、12。 计算的 MATLAB 程序如下: %把表 3 中的数据复制到纯文本文件 mohu.txt 中,然后把 A 替换成 85 90 100, %B 替换成 75 80 85,C 替换成 60 70 75,D 替换成 50 55 60 clc,clear load mohu.txt sj=[repmat(mohu(:,1),1,3),mohu(:,2:end)]; %首先进行归一化处理 n=size(sj,2)/3;m=size(sj,1); w=[0.5*ones(1,3),0.125*ones(1,12)]; w=repmat(w,m,1); y=[]; for i=1:n tm=sj(:,3*i-2:3*i); max_t=max(tm); max_t=repmat(max_t,m,1); max_t=max_t(:,3:-1:1); yt=tm./max_t;yt(:,3)=min([yt(:,3)';ones(1,m)]); y=[y,yt]; end %下面求模糊决策矩阵 r=[]; for i=1:n tm1=y(:,3*i-2:3*i);tm2=w(:,3*i-2:3*i); r=[r,tm1.*tm2]; end %求 M+、M-和距离 mplus=max(r);mminus=min(r); -308- dplus=dist(mplus,r');dminus=dist(mminus,r'); %求隶属度 mu=dminus./(dplus+dminus); [mu_sort,ind]=sort(mu,'descend') 习题二十二 1. (工程评标问题)某建设单位组织一项工程项目的招标,现组建成评标专家组 对 4 个投标单位的标书进行评标。4 个标书的指标信息见表 13,其中前三个指标信息是 各投标单位给定的精确数据,后三个指标信息是评标专家组经考察后的定性结论。 请 你帮评标专家组设计一个工程评标模型,以确定最后中标单位。 表 13 各投标单位基本信息表 投标报价 (万元) 工期 (月) 主材用料 (万元) 施工方案 质量业绩 企 业 信誉度 A1 480 15 192 很好 好 高 A2 490 14 196 好 一般 一般 A3 501 14 204 好 好 很高 A4 475 18 190 一般 很好 一般 权重 0.3 0.1 0.1 0.2 0.1 0.2 指 标 单 位 -271- 第二十三章 现代优化算法 现代优化算法是 80 年代初兴起的启发式算法。这些算法包括禁忌搜索(tabu search),模拟退火(simulated annealing),遗传算法(genetic algorithms),人工神经网 络(neural networks)。它们主要用于解决大量的实际应用问题。目前,这些算法在理论 和实际应用方面得到了较大的发展。无论这些算法是怎样产生的,它们有一个共同的目 标-求 NP-hard 组合优化问题的全局最优解。虽然有这些目标,但 NP-hard 理论限制它 们只能以启发式的算法去求解实际问题。 启发式算法包含的算法很多,例如解决复杂优化问题的蚁群算法(Ant Colony Algorithms)。有些启发式算法是根据实际问题而产生的,如解空间分解、解空间的限 制等;另一类算法是集成算法,这些算法是诸多启发式算法的合成。 现代优化算法解决组合优化问题,如 TSP(Traveling Salesman Problem)问题,QAP (Quadratic Assignment Problem)问题,JSP(Job-shop Scheduling Problem)问题等效 果很好。 §1 模拟退火算法 1.1 算法简介 模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不 同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和 重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过 程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形 成处于低能状态的晶体。 如果用粒子的能量定义材料的状态,Metropolis 算法用一个简单的数学模型描述了 退火过程。假设材料在状态i 之下的能量为 )(iE ,那么材料在温度T 时从状态i 进入状 态 j 就遵循如下规律: (1)如果 )()( iEjE ≤ ,接受该状态被转换。 (2)如果 )()( iEjE > ,则状态转换以如下概率被接受: KT jEiE e )()( − 其中 K 是物理学中的波尔兹曼常数,T 是材料温度。 在某一个特定温度下,进行了充分的转换之后,材料将达到热平衡。这时材料处 于状态i 的概率满足波尔兹曼分布: ∑ ∈ − − == Sj KT jE KT iE T e eixP )( )( )( 其中 x 表示材料当前状态的随机变量, S 表示状态空间集合。 显然 || 1lim )( )( Se e Sj KT jE KT iE T = ∑ ∈ − − ∞→ -272- 其中 || S 表示集合 S 中状态的数量。这表明所有状态在高温下具有相同的概率。而当温 度下降时, ∑∑∑ ∉ −− ∈ −− −− → ∈ −− −− → + = min min min min min min min )()( )( 0)( )( 0 limlim Sj KT EjE Sj KT EjE KT EiE T Sj KT EjE KT EiE T ee e e e ⎪⎩ ⎪⎨ ⎧ ∈ == ∑ ∈ −− −− → 其它 若 0 || 1 lim min min)( )( 0 min min min SiS e e Sj KT EjE KT EiE T 其中 )(minmin jEE Sj∈ = 且 })(|{ minmin EiEiS == 。 上式表明当温度降至很低时,材料会以很大概率进入最小能量状态。 假定我们要解决的问题是一个寻找最小值的优化问题。将物理学中模拟退火的思 想应用于优化问题就可以得到模拟退火寻优方法。 考虑这样一个组合优化问题:优化函数为 +→ Rxf : ,其中 Sx ∈ ,它表示优化 问题的一个可行解, }0,|{ >∈=+ yRyyR ,S 表示函数的定义域。 SxN ⊆)( 表示 x 的一个邻域集合。 首先给定一个初始温度 0T 和该优化问题的一个初始解 )0(x ,并由 )0(x 生成下一个 解 ))0((' xNx ∈ ,是否接受 'x 作为一个新解 )1(x 依赖于下面概率: ⎪⎩ ⎪⎨ ⎧ < =→ −− 其它 若 ))0(()'( 0 ))0(()'( 1 )')0(( T xfxf e xfxf xxP 换句话说,如果生成的解 'x 的函数值比前一个解的函数值更小,则接受 ')1( xx = 作为 一个新解。否则以概率 0 ))0(()'( T xfxf e −− 接受 'x 作为一个新解。 泛泛地说,对于某一个温度 iT 和该优化问题的一个解 )(kx ,可以生成 'x 。接受 'x 作为下一个新解 )1( +kx 的概率为: ⎪⎩ ⎪⎨ ⎧ < =→ −− 其它 若 ))(()'( 0 ))(()'( 1 )')(( T kxfxf e kxfxf xkxP (1) 在温度 iT 下,经过很多次的转移之后,降低温度 iT ,得到 ii TT <+1 。在 1+iT 下重复上述 过程。因此整个优化过程就是不断寻找新解和缓慢降温的交替过程。最终的解是对该问 题寻优的结果。 我们注意到,在每个 iT 下,所得到的一个新状态 )1( +kx 完全依赖于前一个状态 )(kx ,可以和前面的状态 )1(,),0( −kxx L 无关,因此这是一个马尔可夫过程。使用马 尔可夫过程对上述模拟退火的步骤进行分析,结果表明:从任何一个状态 )(kx 生成 'x 的 概率,在 ))(( kxN 中是均匀分布的,且新状态 'x 被接受的概率满足式(1),那么经过 有限次的转换,在温度 iT 下的平衡态 ix 的分布由下式给出: -273- ∑ ∈ − − = Sj T xf T xf ii i i i e eTP )( )( )( (2) 当温度T 降为 0 时, ix 的分布为: ⎪⎩ ⎪⎨ ⎧ ∈ = 其它 若 0 || 1 min min * SxSP i i 并且 1 min * =∑ ∈Sx i i P 这说明如果温度下降十分缓慢,而在每个温度都有足够多次的状态转移,使之在每一个 温度下达到热平衡,则全局最优解将以概率 1 被找到。因此可以说模拟退火算法可以找 到全局最优解。 在模拟退火算法中应注意以下问题: (1)理论上,降温过程要足够缓慢,要使得在每一温度下达到热平衡。但在计算 机实现中,如果降温速度过缓,所得到的解的性能会较为令人满意,但是算法会太慢, 相对于简单的搜索算法不具有明显优势。如果降温速度过快,很可能最终得不到全局最 优解。因此使用时要综合考虑解的性能和算法速度,在两者之间采取一种折衷。 (2)要确定在每一温度下状态转换的结束准则。实际操作可以考虑当连续 m 次的 转换过程没有使状态发生变化时结束该温度下的状态转换。最终温度的确定可以提前定 为一个较小的值 eT ,或连续几个温度下转换过程没有使状态发生变化算法就结束。 (3)选择初始温度和确定某个可行解的邻域的方法也要恰当。 1.2 应用举例 例 已知敌方 100 个目标的经度、纬度如表 1 所示。 表 1 经度和纬度数据表 经度 纬度 经度 纬度 经度 纬度 经度 纬度 53.7121 15.3046 51.1758 0.0322 46.3253 28.2753 30.3313 6.9348 56.5432 21.4188 10.8198 16.2529 22.7891 23.1045 10.1584 12.4819 20.1050 15.4562 1.9451 0.2057 26.4951 22.1221 31.4847 8.9640 26.2418 18.1760 44.0356 13.5401 28.9836 25.9879 38.4722 20.1731 28.2694 29.0011 32.1910 5.8699 36.4863 29.7284 0.9718 28.1477 8.9586 24.6635 16.5618 23.6143 10.5597 15.1178 50.2111 10.2944 8.1519 9.5325 22.1075 18.5569 0.1215 18.8726 48.2077 16.8889 31.9499 17.6309 0.7732 0.4656 47.4134 23.7783 41.8671 3.5667 43.5474 3.9061 53.3524 26.7256 30.8165 13.4595 27.7133 5.0706 23.9222 7.6306 51.9612 22.8511 12.7938 15.7307 4.9568 8.3669 21.5051 24.0909 15.2548 27.2111 6.2070 5.1442 49.2430 16.7044 17.1168 20.0354 34.1688 22.7571 9.4402 3.9200 11.5812 14.5677 52.1181 0.4088 9.5559 11.4219 24.4509 6.5634 26.7213 28.5667 37.5848 16.8474 35.6619 9.9333 24.4654 3.1644 0.7775 6.9576 14.4703 13.6368 19.8660 15.1224 3.1616 4.2428 18.5245 14.3598 58.6849 27.1485 39.5168 16.9371 56.5089 13.7090 52.5211 15.7957 38.4300 8.4648 51.8181 23.0159 8.9983 23.6440 50.1156 23.7816 13.7909 1.9510 34.0574 23.3960 23.0624 8.4319 19.9857 5.7902 -274- 40.8801 14.2978 58.8289 14.5229 18.6635 6.7436 52.8423 27.2880 39.9494 29.5114 47.5099 24.0664 10.1121 27.2662 28.7812 27.6659 8.0831 27.6705 9.1556 14.1304 53.7989 0.2199 33.6490 0.3980 1.3496 16.8359 49.9816 6.0828 19.3635 17.6622 36.9545 23.0265 15.7320 19.5697 11.5118 17.3884 44.0398 16.2635 39.7139 28.4203 6.9909 23.1804 38.3392 19.9950 24.6543 19.6057 36.9980 24.3992 4.1591 3.1853 40.1400 20.3030 23.9876 9.4030 41.1084 27.7149 我方有一个基地,经度和纬度为(70,40)。假设我方飞机的速度为 1000 公里/小时。 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地。在敌方每一目 标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长)。 这是一个旅行商问题。我们依次给基地编号为 1,敌方目标依次编号为 2,3,…, 101,最后我方基地再重复编号为 102(这样便于程序中计算)。距离矩阵 102102)( ×= ijdD , 其中 ijd 表示表示 ji, 两点的距离, 102,,2,1, L=ji ,这里 D 为实对称矩阵。则问题是 求一个从点 1 出发,走遍所有中间点,到达点 102 的一个最短路径。 上面问题中给定的是地理坐标(经度和纬度),我们必须求两点间的实际距离。设 BA, 两点的地理坐标分别为 ),( 11 yx , ),( 22 yx ,过 BA, 两点的大圆的劣弧长即为两点 的实际距离。以地心为坐标原点O ,以赤道平面为 XOY 平面,以 0 度经线圈所在的平 面为 XOZ 平面建立三维直角坐标系。则 BA, 两点的直角坐标分别为: )sin,cossin,coscos( 11111 yRyxRyxRA )sin,cossin,coscos( 22222 yRyxRyxRB 其中 6370=R 为地球半径。 BA, 两点的实际距离 ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ ⋅ ⋅= OB OBRd OA OAarccos , 化简得 ]sinsincoscos)(arccos[cos 212121 yyyyxxRd +−= 。 求解的模拟退火算法描述如下: (1)解空间 解空间 S 可表为{ 102,101,,2,1 L }的所有固定起点和终点的循环排列集合,即 }102,}101,,3,2{),,(,1|),,{( 102101211021 === ππππππ 的循环排列为 LLLS 其中每一个循环排列表示侦察 100 个目标的一个回路, ji =π 表示在第i 次侦察 j 点, 初始解可选为 )102,,2,1( L ,本文中我们使用 Monte Carlo 方法求得一个较好的初始解。 (2)目标函数 此时的目标函数为侦察所有目标的路径长度或称代价函数。我们要求 ∑ = + = 101 1 21 1102 ),,,(min i ii df πππππ L 而一次迭代由下列三步构成: (3)新解的产生 ① 2变换法 -275- 任选序号 vu, ( vu < )交换u 与 v 之间的顺序,此时的新路径为: 10211111 ππππππππ LLL +++− vuuvvu ② 3变换法 任选序号 vu, 和 w ,将u 和 v 之间的路径插到 w 之后,对应的新路径为(设 wvu << ) 1021111 ππππππππ LLLL ++− wvuwvu (4)代价函数差 对于 2 变换法,路径差可表示为 )()( 1111 +−+− +−+=Δ vvuuvuvu ddddf ππππππππ (5)接受准则 ⎩ ⎨ ⎧ ≥ΔΔ− <Δ= 0)/exp( 0 1 fTf fP 如果 0<Δf ,则接受新的路径。否则,以概率 )/exp( TfΔ− 接受新的路径,即若 )/exp( TfΔ− 大于 0 到 1 之间的随机数则接受。 (6)降温 利用选定的降温系数α 进行降温即: TT α← ,得到新的温度,这里我们取 999.0=α 。 (7)结束条件 用选定的终止温度 3010−=e ,判断退火过程是否结束。若 eT < ,算法结束,输出 当前状态。 我们编写如下的 matlab 程序如下: clc,clear load sj.txt %加载敌方 100 个目标的数据,数据按照表格中的位置保存在纯文本 文件 sj.txt 中 x=sj(:,1:2:8);x=x(:); y=sj(:,2:2:8);y=y(:); sj=[x y]; d1=[70,40]; sj=[d1;sj;d1]; sj=sj*pi/180; %距离矩阵 d d=zeros(102); for i=1:101 for j=i+1:102 temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2)); d(i,j)=6370*acos(temp); end end d=d+d'; S0=[];Sum=inf; rand('state',sum(clock)); for j=1:1000 S=[1 1+randperm(100),102]; temp=0; -276- for i=1:101 temp=temp+d(S(i),S(i+1)); end if temprand(1) S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)]; Sum=Sum+df; end T=T*at; if T0 flag=0; for m=1:L-3 for n=m+2:L-1 if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))0 flag=0; for m=1:L-3 for n=m+2:L-1 if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))0.00001 Terr=[]; for j=N+1:m-1 yhat(j)=w*yt(j-1:-1:j-N)'; err=yt(j)-yhat(j); Terr=[Terr,abs(err)]; w=w+2*k*err*yt(j-1:-1:j-N); end Terr=max(Terr); end w, yhat 5.2 kN, 值和初始权数的确定 在开始调整权数时,首先要确定权数个数 N 和学习常数 k 。一般说来,当时间序 列的观测值呈季节变动时, N 应取季节性长度值。如序列以一年为周期进行季节变动 时,若数据是月度的,则取 12=N ,若季节是季度的,则取 4=N 。如果时间序列无 明显的周期变动,则可用自相关系数法来确定,即取 N 为最高自相关系数的滞后时期。 k 的取值一般可定为 N/1 ,也可以用不同的 k 值来进行计算,以确定一个能使 S 最 小的 k 值。 初始权数的确定也很重要,如无其它依据,也可用 N/1 作为初始权系数用,即 ),,2,1(1 NiNwi L== 自适应滤波法有两个明显的优点:一是技术比较简单,可根据预测意图来选择权数 的个数和学习常数,以控制预测。也可以由计算机自动选定。二是它使用了全部历史数 据来寻求最佳权系数,并随数据轨迹的变化而不断更新权数,从而不断改进预测。 由于自适应滤波法的预测模型简单,又可以在计算机上对数据进行处理,所以这种 预测方法应用较为广泛。 §6 趋势外推预测方法 趋势外推法是根据事物的历史和现时资料,寻求事物发展规律,从而推测出事物 未来状况的一种比较常用的预测方法。利用趋势外推法进行预测,主要包括六个阶段: (a)选择应预测的参数;(b)收集必要的数据;(c)利用数据拟合曲线;(d)趋势外 推;(e)预测说明;(f)研究预测结果在进行决策中应用的可能性。 趋势外推法常用的典型数学模型有:指数曲线、修正指数曲线、生长曲线、包络 曲线等。 6.1 指数曲线法 一般来说,技术的进步和生产的增长,在其未达饱和之前的新生时期是遵循指数 曲线增长规律的,因此可以用指数曲线对发展中的事物进行预测。 指数曲线的数学模型为 Kteyy 0= (35) 其中系数 0y 和 K 值由历史数据利用回归方法求得。对式(35)取对数可得 Ktyy += 0lnln (36) -297- 令 yY ln= , 0ln yA = 则 KtAY += 其中 KA, 可以用最小二乘法求得。 6.2 修正指数曲线法 利用指数曲线外推来进行预测时,存在着预测值随着时间的推移会无限增大的情 况。这是不符合客观规律的。因为任何事物的发展都是有一定限度的。例如某种畅销产 品,在其占有市场的初期是呈指数曲线增长的,但随着产品销售量的增加,产品总量接 近于社会饱和量时。这时的预测模型应改用修正指数曲线。 t t abKy +=ˆ (37) 在此数学模型中有三个参数 aK, 和b 要用历史数据来确定。 修正指数曲线用于描述这样一类现象。 (1)初期增长迅速,随后增长率逐渐降低。 (2)当 0>K , 0 baK (45) 采用 Compertz 曲线前应对数据进行检验,检验方法是看给定数据的对数逐期增长 量的比率是否接近某一常数b 。即 byy yy tt tt ≈− − − + 1 1 lnln lnln (46) Compertz 曲线用于描述这样一类现象:初期增长缓慢,以后逐渐加快。当达到一 定程度后,增长率又逐渐下降。 参数估计方法如下: 式(46)两边取对数,得 t t baKy )(loglogˆlog += (47) 记 aaKKyy tt ln',ln',ˆln'ˆ === 得 t t baKy '''ˆ += 仿照修正指数曲线的三和法估计参数,令 ∑∑∑ +=+== === m mt t m mt t m t t ySySyS 3 12 3 2 1 2 1 1 ',',' (48) 其中 tt yy ln' = 。则类似式(42),得 -300- ⎪ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎧ ⎥⎦ ⎤ ⎢⎣ ⎡ − −−= − −−= ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ − −= 1 )1('1' )1( 1)(' 1 212 1 12 23 b bbaSmK bb bSSa SS SSb m m m (49) 例 9(续例 8) 根据表 10 的数据,试确定收音机销售量的 Gompertz 曲线方程, 求出各年收音机销售量的趋势值,并预测 1986 年的销售量。 解:已知 15=n , 5=m ,根据式(48),得 19.75581 =S , 21.60942 =S , 22.73333 =S 再由式(49),得 0.9048=b 1.2588' −=a , 0.284=a 4.8929'=K , 133.3341=K 从而收音机销售量的 Compertz 曲线方程为 t ty 9048.0284.03341.133ˆ ×= 将 18=t 代入方程,得 1986 年收音机销售量的预测值为 108.3143ˆ1986 =y (万部) 计算的 MATLAB 程序如下: function chanliang2 clc,clear global a b k load xsh.txt %原始数据存放在纯文本文件 xsh.txt 中 yt=log(xsh); n=length(yt);m=n/3; s1=sum(yt(1:m)), s2=sum(yt(m+1:2*m)), s3=sum(yt(2*m+1:end)) b=((s3-s2)/(s2-s1))^(1/m) a=(s2-s1)*(b-1)/(b*(b^m-1)^2) k=(s1-a*b*(b^m-1)/(b-1))/m a=exp(a) k=exp(k) y=yuce(1:18) %************************************ %定义预测函数 %************************************ function y=yuce(t); global a b k y=k*a.^(b.^t); 6.4 Logistic 曲线(生长曲线) 生物的生长过程经历发生、发展到成熟三个阶段,在三个阶段生物的生长速度是不 一样的,例如南瓜的重量增长速度,在第一阶段增长的较慢,在发展时期则突然加快, 而到了成熟期又趋减慢,形成一条 S 形曲线,这就是有名的 Logistic 曲线(生长曲线), -301- 很多事物,如技术和产品发展进程都有类似的发展过程,因此 Logistic 曲线在预测中有 相当广泛的应用。 Logistic 曲线的一般数学模型是 )1( L yrydt dy −= (50) 式中 y 为预测值, L 为 y 的极限值, r 为增长率常数, 0>r 。解此微分方程得 rtce Ly −+= 1 (51) 式中 c 为常数。 下面我们记 Logistic 曲线的一般形式为 tt abKy += 1 , 0>K , 0>a , 10 ≠< b (52) 检验能否使用 Logistic 曲线的方法,是看给定数据倒数的逐期增长量的比率是否接 近某一常数b 。即 byy yy tt tt ≈− − − + 1 1 /1/1 /1/1 (53) Logistic 曲线中参数估计方法如下: 作变换 t t yy 1' = 得 t t abKy +=' 仿照修正指数曲线的三和法估计参数,令 ∑∑∑ +=+== === m mt t m mt t m t t ySySyS 3 12 3 2 1 2 1 1 ',',' (54) 则类似式(42),得 ⎪ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎧ ⎥⎦ ⎤ ⎢⎣ ⎡ − −−= − −−= ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ − −= 1 )1(1 )1( 1)( 1 212 1 12 23 b babSmK bb bSSa SS SSb m m m (55) 例 10(续例 8) 根据表 10 的数据,试确定收音机销售量的 Logistic 曲线方程, 求出各年收音机销售量的趋势值,并预测 1986 年的销售量。 解:已知 15=n , 5=m ,根据式(54),得 0.09711 =S , 0.06662 =S , 0.05313 =S 再由式(55),得 0.8493=b , 0.0174=a , 0.0085=K -302- 从而收音机销售量的 Logistic 曲线方程为 tty 8493.00174.00085.0 1ˆ ×+= 将 18=t 代入方程,得 1986 年收音机销售量的预测值为 106.3981ˆ1986 =y 计算的 MATLAB 程序如下: function chanliang3 clc,clear global a b k load xsh.txt %原始数据存放在纯文本文件 xsh.txt 中 yt=1./xsh; n=length(yt);m=n/3; s1=sum(yt(1:m)), s2=sum(yt(m+1:2*m)), s3=sum(yt(2*m+1:end)) b=((s3-s2)/(s2-s1))^(1/m) a=(s2-s1)*(b-1)/(b*(b^m-1)^2) k=(s1-a*b*(b^m-1)/(b-1))/m y=yuce(1:18) %************************************ %定义预测函数 %************************************ function y=yuce(t); global a b k y=1./(k+a*b.^t); 6.5 趋势线的选择 趋势线的选择有以下几种方式。 1.由散点图选择趋势线。 2.由数据本身的取值规律选择趋势线。 3.比较预测标准误差大小 ∑ = −= n i ii yynS 1 2)ˆ(1 (56) 当有几种趋势线可供选择时,应选择 S 最小的趋势线。 §7 平稳时间序列模型 这里的平稳是指宽平稳,其特性是序列的统计特性不随时间的平移而变化,即均 值和协方差不随时间的平移而变化。 下面自回归模型(Auto Regressive Model)简称 AR 模型,移动平均模型(Moving Average Model)简称 MA 模型,自回归移动平均模型(Auto Regressive Moving Average Model)简称 ARMA 模型。下面的 tX 为零均值(即中心化处理的)平稳序列。 (1)一般自回归模型 AR( n ) 假设时间序列 tX 仅与 nttt XXX −−− ,,, 21 L 有线性关系,而在 nttt XXX −−− ,,, 21 L 已知条件下, tX 与 ),2,1( L++=− nnjX jt 无关, ta 是一个独立于 nttt XXX −−− ,,, 21 L 的白噪声序列, ),0(~ 2 at Na σ 。 tntnttt aXXXX ++++= −−− ϕϕϕ L2211 -303- 上式还可以表示为 ntntttt XXXXa −−− −−−−= ϕϕϕ L2211 可见, )(AR n 系统的响应 tX 具有 n 阶动态性。 )(AR n 模型通过把 tX 中的依赖于 nttt XXX −−− ,,, 21 L 的部分消除掉之后,使得具有 n 阶动态性的序列 tX 转化为独立的 序列 ta 。因此,拟合 )(AR n 模型的过程也就是使相关序列独立化的过程。 (2)移动平均模型 )(MA m )(AR n 系统的特征是系统在t 时刻的响应 tX 仅与其以前时刻的响应 nttt XXX −−− ,,, 21 L 有关,而与其以前时刻进入系统的扰动无关。如果一个系统在t 时 刻的响应 tX ,与其以前时刻 L,2,1 −− tt 的响应 L,, 21 −− tt XX 无关,而与其以前时刻 mttt −−− ,,2,1 L 进入系统的扰动 mttt aaa −−− ,,, 21 L 存在着一定的相关关系,那么, 这一类系统为 )(MA m 系统。 mtmtttt aaaaX −−− −−−−= θθθ L2211 (3)自回归移动平均模型 一个系统,如果它在时刻t 的响应 tX ,不仅与其以前时刻的自身值有关,而且还 与其以前时刻进入系统的扰动存在一定的依存关系,那么,这个系统就是自回归移动平 均系统。 ),(ARMA mn 模型为 mtmttntntt aaaXXX −−−− −−−=−−− θθϕϕ LL 1111 对于平稳系统来说,由于 AR、MA、 ),(ARMA mn 模型都是 )1,(ARMA −nn 模 型的特例,我们以 )1,(ARMA −nn 模型为一般形式来建立时序模型。 §8 ARMA 模型的特性 在时间序列的时域分析中,线性差分方程是极为有效的工具。事实上,任何一个 ARMA 模型都是一个线性差分方程。 8.1 AR(1)系统的格林函数 格林函数就是描述系统记忆扰动程度的函数。 AR(1)模型为 ttt aXX =− −11ϕ 设 )(1 tyX t =− ,则有 tatyty =−+ )()1( 1ϕ (57) 显然是一个一阶非齐次差分方程。 由于 tttttt aaXaXX ++=+= −−− )( 121111 ϕϕϕ ttt aaX ++= −− 112 2 1 ϕϕ L=+++= −−− tttt aaaX 112 2 13 3 1 ϕϕϕ 依次递推下去,可得到 ∑ ∞ = −= 0 1 j jt j t aX ϕ (58) -304- 显然(58)式是差分方程(57)的解。 方程解的系数函数 j 1ϕ 客观地描述了该系统的动态性,故这个系统函数就叫做记忆 函数,也叫格林函数。若用 jG 表示,则 AR(1)模型的格林函数可以表示为 j jG 1ϕ= 这样(58)式可等价地写成: ∑ ∞ = −= 0j jtjt aGX (59) 上式也可写成 ∑ −∞= −= t k kktt aGX 这里 10 10 == ϕG 。 定义后移算子 B , L,, 2 2 1 −− == tttt XXBXBX ,这样,AR(1)可写成 tt aXB =− )1( 1ϕ 它的解为 ttt aBBaBX )1(1 1 22 11 1 L+++=−= ϕϕϕ ∑ ∞ = −−− =+++= 0 2 2 111 j jtjttt aGaaa Lϕϕ 由于格林函数就是差分方程解的系数函数,格林函数的意义可概括如下: (1) jG 是前 j 个时间单位以前进入系统的扰动 jta − 对系统现在行为(响应)影 响的权数。 (2) jG 客观地刻画了系统动态响应衰减的快慢程度。 (3)对于一个平稳系统来说,在某一时刻由于受到进入系统的扰动 ta 的作用,离 开其平衡位置(即平均数-零), jG 描述系统回到平衡位置的速度, 1ϕ 的值较小,速 度较快; 1ϕ 的值较大,回复的速度就较慢。 8.2 )1,2(ARMA 系统的格林函数 (1) )1,2(ARMA 系统的格林函数的隐式 )1,2(ARMA 模型是一个二阶非齐次差分方程 112211 −−− −=−− ttttt aaXXX θϕϕ 设该二阶非齐次差分方程的解为 ∑ ∞ = −= 0j jtjt aGX (60) 为方便起见,可用 B 算子: tt aBXBB )1()1( 1 2 21 θϕϕ −=−− (61) t j j jt aBGX ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛= ∑ ∞ =0 (62) -305- 把(62)式代入(61),比较两边 B 的同次幂的系数得 10 =G , 111 θϕ −=G , L,4,3,2211 =+= −− jGGG jjj ϕϕ (2) )1,2(ARMA 系统的格林函数的显式 )1,2(ARMA 模型实质上是一个二阶非齐次差分方程: 112211 −−− −=−− ttttt aaXXX θϕϕ 欲求其解,必须先求出其相应的齐次差分方程的通解。 齐次方程对应的特征方程为 021 2 =−− ϕλϕλ , 特征根为 2 4 2 2 11 1 ϕϕϕλ ++= , 2 4 2 2 11 2 ϕϕϕλ +−= 齐次差分方程的通解为 jj j ccG 2211 λλ += 其中 1c 和 2c 是任意常数,其值由初始条件唯一地确定。这里的初始条件为: ⎩ ⎨ ⎧ −=⇒−=− = 111111 0 1 θϕθϕ GG G 于是有 ⎩ ⎨ ⎧ −=+= =+= 1122111 210 1 θϕλλ ccG ccG 而 121 ϕλλ =+ ,即 ⎩ ⎨ ⎧ −+=+ =+ 1212211 21 1 θλλλλ cc cc 解之,得 21 11 1 λλ θλ − −=c , 12 12 2 λλ θλ − −=c 则 )1,2(ARMA 系统的格林函数为: jj jG 2 12 12 1 21 11 λλλ θλλλλ θλ − −+− −= 8.3 逆函数和可逆性 前面的格林函数,把 tX 表示为过去 ta 对 tX 的影响,或者说系统对过去 ta 的记忆 性,也就是用一个 MA 模型来逼近 tX 的行为。平稳序列 tX 的这种表达形式称为 tX 的 “传递形式”。同样我们也可以用过去的 tX 的一个线性组合来逼近系统现在时刻的行 为。即 ∑ ∞ = −−− +=+++= 1 2211 j tjtjtttt aXIaXIXIX L 我们把这种表达形式称为 tX 的“逆转形式”。其中的系数函数 )1( 0 =II j 称为逆函 -306- 数。可见它是一个无穷阶的自回归模型。一个过程是否具有逆转形式,也就是说逆函数 是否存在的性质,通常称为过程是否具有可逆性,如果一个过程可以用一个无限阶的自 回归模型逼近,即逆函数存在,我们就称该过程具有可逆性,否则,就是不可逆的。 对于 AR(2)模型 tttt aXXX ++= −− 2211 ϕϕ 有 11 ϕ=I , 22 ϕ=I , L,4,3,0 == jI j 可见,所谓可逆性,是指移动平均模型可以用 AR 模型表示。 MA(1)模型: tt aBX )1( 1θ−= 那么 ∑ ∞ = −+=+++=−= 1 1 22 11 1 )1(1 j jt j tt t t XXXBBB Xa θθθθ L 即 ∑ ∞ = − +−= 1 1 )( j tjt j t aXX θ 可见, j jI 1θ−= ,显然,只有 1|| 1 <θ 时,才有 ∞→j , 0→jI ,故 MA(1)的可 逆性条件为 1|| 1 <θ §9 时间序列建模的基本步骤 上面我们介绍了时间序列的一些基本概念,下面我们初步给出时间序列建模的基 本步骤,有兴趣的读者可以去查阅相关的参考资料。 时间序列建模的基本步骤如下: 1.数据的预处理:数据的剔取及提取趋势项。 2.取 1=n ,拟合 )12,2ARMA( −nn (即 ARMA(2,1))模型 (1) 3=p ,拟和 )(AR p 模型。 设所要拟合的模型为 ttttt aXXXX +++= −−− 332211 ϕϕϕ , 用最小二乘法拟合出系数 321 ,, ϕϕϕ 。 注意到对于 AR( p )模型, jj I=ϕ ,这里 jI 是模型的逆函数,于是可得到 321 ,, III 的值。 (2)估计 ARMA(2,1)模型 112211 −−− −=−− ttttt aaXXX θϕϕ 参数的初始值。 对于 ARMA(2,1)模型,我们有: 2,01 >=− −1 jII jj θ , 于是 2 3 123 0 I III =⇒=− 1 θθ 。 注意:以 AR(3)中的 321 ,, III 替代 ARMA(2,1) 中的 321 ,, III 是一种近似代替。通 -307- 过这种方法求得的 1θ 的绝对值若大于 1,则取其倒数作为初始值,以满足可逆性条件。 知道了 321 ,, III 及 1θ ,再用下式来确定 ARMA(2,1)模型中的 21,ϕϕ : 111 θϕ += I ; 21122 II +−= θθϕ 。 (3)以(2)中得到的 121 ,, θϕϕ 为初始值,利用非线性最小二乘法得到 121 ,, θϕϕ 的终值及置信区间,并且求出残差平方和(RSS)。 3. 1+= nn ,拟合 ARMA )12,2( −nn 模型 其基本步骤与 2 类似。 4.用 F 准则检验模型的适用性。若 F 检验显著,则转入第 2 步。若 F 检验不显 著,转入第 5 步。 对于 ARMA 模型的适用性检验的实际就是对 ta 的独立性检验。检验 ta 的独立性的 一个简便而有效的办法是拟合更高阶的模型。若更高阶模型的残差平方和有明显减少, 就意味着现有模型的 ta 不是独立的,因而模型不适用;若更高阶模型的残差平方和没 有明显减少,同时更高阶模型中的附加参数的值也很小(其置信区间包含 0),则可认 为该模型是适用的。具体的检验准则如下。 设有模型 ),(ARMA 11 mn 和 ),(ARMA 22 mn , 1212 , mmnn >> 。假设 ),(ARMA 110 mnA = 模型的残差 ta 之平方和, ),(ARMA 221 mnA = 模型的残差 ta 之 平方和, N 是采集数据的数目,则检验准则为: ),(~001 γγ −− −= NsFN A s AAF , 其中 22 mn +=γ , )( 1122 mnmns +−+= 。 若这样得到的 F 值超过由 F 分布查表所得的在 5%置信水平上的 ),( γ−NsF 值, 那么由 ),(ARMA 11 mn 模型改变为 ),(ARMA 22 mn 时,残差平方和的改善是显著的, 因而拒绝关于模型 ),(ARMA 11 mn 的适用性假设; F 值低于查表所得之值,就可以认 为在该置信水平上这个模型是适用的。 5.检查 122 , −nn θϕ 的值是否很小,其置信区间是否包含零。若不是,则适用的模型 就是 )12,2ARMA( −nn 。 若 122 , −nn θϕ 很小,且其置信区间包含零,则拟合 )22,12ARMA( −− nn 。 6.利用 F 准则检验模型 )12,2ARMA( −nn 和 )22,12ARMA( −− nn ,若 F 值不 显著,转入第 7 步;若 F 值显著,转入第 8 步。 7.舍弃小的 MA 参数,拟合 22 −< nm 的模型 ),12ARMA( mn − ,并用 F 准则 进行检验。重复这一过程,直到得出具有最小参数的适用模型为止。 8.舍弃小的 MA 参数,拟合 12 −< nm 的模型 ),2ARMA( mn ,并用 F 准则进行 检验。重复这一过程,直到得出具有最小参数的适用模型为止。 习题二十四 1.我国 1974~1981 年布的产量如表 11 所示。 表 11 1974~1981 年布的产量 年份 1974 1975 1976 1977 1978 1979 1980 1981 产量(亿米) 80.8 94.0 88.4 101.5 110.3 121.5 134.7 142.7 -308- (1)试用趋势移动平均法(取 3=N ),建立布的年产量预测模型。 (2)分别取 3.0=α , 6.0=α , 7.873 321)2( 0 )1( 0 =++== yyySS ,建立布的直 线指数平滑预测模型。 (3)计算模型拟合误差,比较 3 个模型的优劣。 (4)用最优的模型预测 1982 年和 1985 年布的产量。 2.1960~1982 年全国社会商品零售额如表 12 所示(单位:亿元)。 表 12 全国社会商品零售额数据 年份 1960 1961 1962 1963 1964 1965 1966 1967 零售总额 696.9 607.7 604 604.5 638.2 670.3 732.8 770.5 年份 1968 1969 1970 1971 1972 1973 1974 1975 零售总额 737.3 801.5 858 929.2 1023.3 1106.7 1163.6 1271.1 年份 1976 1977 1978 1979 1980 1981 1982 零售总额 1339.4 1432.8 1558.6 1800 2140 2350 2570 试用三次指数平滑法预测 1983 年和 1985 年全国社会商品零售额。 3.某地区粮食产量(亿千克),从 1969~1983 年顺次为:3.78,4.19,4.83,5.46, 6.71,7.99,8.60,9.24,9.67,9.87,10.49,10.92,10.93,12.39,12.59,试选用 2~3 种适当的曲线预测模型,预测 1985 年和 1990 年的粮食产量。 -317- 第二十五章 存贮论 存贮论(或称为库存论)是定量方法和技术最早的领域之一,是研究存贮系统的 性质、运行规律以及如何寻找最优存贮策略的一门学科,是运筹学的重要分支。存贮论 的数学模型一般分成两类:一类是确定性模型,它不包含任何随机因素,另一类是带有 随机因素的随机存贮模型。 §1 存贮模型中的基本概念 所谓存贮实质上是将供应与需求两个环节以存贮中心联结起来,起到协调与缓和 供需之间矛盾的作用。存贮模型的基本形式如图 1 所示。 图 1 存贮问题基本模型 1.存贮问题的基本要素 (1)需求率:单位时间内对某种物品的需求量,用 D 表示。 (2)订货批量:一次订货中,包含某种货物的数量,用Q 表示。 (3)订货间隔期:两次订货之间的时间间隔,用T 表示。 2.存贮模型的基本费用 (1)订货费:每组织一次生产、订货或采购的费用,通常认为与定购数量无关, 记为 DC 。 (2)存贮费:所有用于存贮的全部费用,通常与存贮物品的多少和时间长短有关。 单位存贮费记为 PC 。 (3)短缺损失费:由于物品短缺所产生的一切损失费用,通常与损失物品的多少 和短缺时间的长短有关,记为 SC 。 3.存贮策略 所谓一个存贮策略,是指决定什么情况下对存贮进行补充,以及补充数量的多少。 下面是一些比较常见的存贮策略。 (1)t 循环策略:不论实际的存贮状态如何,总是每隔一个固定的时间t ,补充 一个固定的存贮量Q 。 (2) ),( St 策略:每隔一个固定的时间t 补充一次,补充数量以补足一个固定的 最大存贮量 S 为准。因此,每次补充的数量是不固定的,要视实际存贮量而定。当存 -318- 贮(余额)为 I 时,补充数量为 ISQ −= 。 (3) ),( Ss 策略:当存贮(余额)为 I ,若 sI > ,则不对存贮进行补充;若 sI ≤ , 则对存贮进行补充,补充数量 ISQ −= 。补充后达到最大存贮量 S 。s 称为订货点(或 保险存贮量、安全存贮量、警戒点等)。在很多情况下,实际存贮量需要通过盘点才能 得知。若每隔一个固定的时间t 盘点一次,得知当时存贮 I ,然后根据 I 是否超过订货 点 s ,决定是否订货、订货多少,这样的策略称为 ),,( Sst 策略。 §2 无约束的确定型存贮模型 我们首先考察经济订购批量存贮模型。 所谓经济订购批量存贮模型(economic ordering quantity, EOQ)是指不允许缺货、 货物生产(或补充)的时间很短(通常近似为 0)的模型。 2.1 模型一:不允许缺货,补充时间极短—基本的经济订购批量存贮模型 基本的经济订购批量存贮模型有以下假设: (1)短缺费为无穷,即 ∞=SC ; (2)当存贮降到零后,可以立即得到补充; (3)需求是连续的、均匀的,即需求速度(单位时间的需求量) D 为常数; (4)每次的订货量不变,订购费不变; (5)单位存贮费为 pC 。 由上述假设,存贮量的变化情况如图 2 所示。 图 2 EOQ 模型的存贮量曲线 在每一个周期(T )内,最大的存贮量为Q ,最小的存贮量为 0,且需求是连续均 匀的,因此在一个周期内,其平均存贮量为 Q2 1 ,存贮费用为 QCP2 1 。 -319- 一次订货费为 DC ,那么在一个周期(T )内的平均订货非为 TCD / 。由于在最初 时刻,订货量为Q ,在T 时刻,存贮量为 0,而且单位时间的需求量为 D 且连续均匀 变化,因此,得到订货量Q 、需求量 D 和订货周期T 之间的关系 D QT = 。 由此计算出一个单位时间内的平均总费用 Q DCQCC D P += 2 1 (1) 对式(1)求导数,并令其为 0,即 02 1 2 =−= Q DCCdQ dC D P (2) 得到费用最小的订货量 P D C DCQ 2* = (3) 最佳订货周期 DC C D QT P D2* * == (4) 最小费用 DCCQ DCQCC PD D P 22 1 ** =+= (5) 公式(3)称为经济订购批量(economic ordering quantity,简写 EOQ)公式,也称 为经济批量(economic lot size)公式。 例 1 某商品单位成本为 5 元,每天保管费为成本的 0.1%,每次定购费为 10 元。 已知对该商品的需求是 100 件/天,不允许缺货。假设该商品的进货可以随时实现。问 应怎样组织进货,才能最经济。 解 根据题意, 005.0%1.05 =×=pC (元/件·天), 10=DC 元, 100=D 件/ 天。 由式(3)~(5),有 632005.0 1001022* =××== P D C DCQ (件) -320- 32.6100 632* * === D QT (天) 16.32* == DCCC PD (元/天) 所以,应该每隔 6.32 天进货一次,每次进货该商品 632 件,能使总费用(存贮费 和定购费之和)为最少,平均约 3.16 元/天。 进一步研究,全年的订货次数为 75.5732.6 365 ==n (天) 但 n 必须为正整数,故还需要比较 57=n 与 58=n 时全年的费用。 编写如下LINGO程序: model: sets: times/1 2/:n,Q,C; endsets data: n=57 58; enddata C_D=10; D=100*365; C_P=0.005*365; @for(times:n=D/Q;C=0.5*C_P*Q+C_D*D/Q); end 求得全年组织 58 次订货费用少一点。 利用 LINGO 软件,我们可以直接求出问题的整数解。 LINGO 程序如下: model: sets: times/1..100/:C,Q; !100不是必须的,通常取一个适当大的数就可以了; endsets C_D=10; D=100*365; C_P=0.005*365; @for(times(i):Q(i)=D/i;C(i)=0.5*C_P*Q+C_D*D/Q); C_min=@min(times:C); Q_best=@sum(times(i):Q(i)*(C(i) #eq# C_min)); N_best=D/Q_best; end -321- 求得一年组织 58 次订货,每次的订货量为 629.3 件,最优费用为 1154.25 元。 2.2 模型二:允许缺货,补充时间较长—经济生产批量存贮模型 模型假设条件: (1)需求是连续的,即需求速度 D 为常数; (2)补充需要一定时间。即一旦需要,生产可立刻开始,但生产需要一定周期。 设生产是连续均匀的,即生产速度 P 为常数。同时,设 DP > ; (3)单位存贮费为 PC ,单位缺货费为 SC ,订购费为 DC 。不考虑货物价值。 存贮状态图见图 3。 图 3 允许缺货且补充时间较长的存贮模型 ],0[ T 为一个存贮周期, 1t 时刻开始生产, 3t 时刻结束生产。 ],0[ 2t 时间内存贮为 0, 1t 时达到最大缺货量 B , ],[ 21 tt 时间内产量一方面以速度 D 满足需求,另一方面以速度 DP − 补充 ],0[ 1t 时间内的缺货,至 2t 时刻缺货补足。 ],[ 32 tt 时间内产量一方面以速度 D 满足需求,另一方面以速度 DP − 增加存贮。 至 3t 时刻达到最大存贮量 A ,并停止生产。 ],[ 3 Tt 时间内以存贮满足需求,存贮以速度 D 减少。至T 时刻存贮降为零,进入 下一个存贮周期。 下面,根据模型假设条件和存贮状态图,首先导出 ],0[ T 时间内的平均总费用(即 费用函数),然后确定最优存贮策略。 从 ],0[ 1t 看,最大缺货量 1DtB = ;从 ],[ 21 tt 看,最大缺货量 ))(( 12 ttDPB −−= 。 -322- 故有 ))(( 121 ttDPDt −−= ,从中解出: 21 tP DPt −= (6) 从 ],[ 32 tt 看,最大存贮量 ))(( 23 ttDPA −−= ;从 ],[ 3 Tt 看,最大存贮量 )( 3tTDA −= 。故有 )())(( 323 tTRttDP −=−− ,从中解得 )( 223 tTP Dtt −=− (7) 易知,在 ],0[ T 时间内: 存贮费为 ))()((2 1 223 tTttDPCP −−− ; 缺货费为 212 1 tDtCS ; 定购费为 DC 。 故 ],0[ T 时间内平均总费用为 ⎥⎦ ⎤ ⎢⎣ ⎡ ++−−−= DsP CtDtCtTttDPCTtTC 212232 2 1))()((2 11),( 故将(6)和(7)代入,整理后得 T C T tCCtCTCP DDPtTC D SPPp +⎥⎦ ⎤ ⎢⎣ ⎡ ++−−= 2 2 22 )(22 )(),( (8) 解方程组 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ =∂ ∂ =∂ ∂ 0),( 0),( 2 2 2 t tTC T tTC 可得 )1( )(2* P DCDC CCCT SP SPD − += -323- ** 2 TCC Ct SP P += 容易证明,此时的费用 ),( * 2 * tTC 是费用函数 ),( 2tTC 的最小值。 因此,模型的最优存贮策略各参数值为: 最优存贮周期 )1( )(2** P DCDC CCCTT SP SPD − +== (9) 经济生产批量 )1( )(2** P DCC CCDCDTQ SP SPD − +== (10) 缺货补足时间 )1)(( 2** 2 P DCCC DCCTCC Ct SPS PD SP P −+ =+= (11) 开始生产时间 )( )1(2 * 2 * 1 SPS PD CCC P DDCC tP DPt + − =−= (12) 结束生产时间 * 2 ** 3 )1( tP DTP Dt −+= (13) 最大存贮量 )( * 3 ** tTDA −= (14) 最大缺货量 * 1 * DtB = (15) 平均总费用 * * 2 T CC D= (16) 例 2 有一个生产和销售图书设备的公司,经营一种图书专用设备,基于以往的销 售记录和今后市场预测。估计今后一年的需求量为 4900 个,由于占用资金的利息以及 存贮库房和其它人力物力的费用,存贮一个书架一年要花费 1000 元。这种书架是该公 司自己生产的,每年的生产量 9800 个,而组织一次生产要花费设备调试等生产准备费 500 元。如果允许缺货,缺货费为每年每件 2000 元。该公司为了把成本降到最低,应 如何组织生产?要求出其生产、存贮周期,每个周期的最优生产量,以及最少的年总费 用。 解 根据题意知, 4900=D , 1000=PC , 9800=P , 500=DC , 2000=SC , -324- 利用式(9)~(13),(16)求相关的指标。 编写的 LINGO 程序如下: model: D=4900; C_P=1000; P=9800; C_D=500; C_S=2000; T1=(2*C_D*(C_P+C_S)/(D*C_P*C_S*(1-D/P)))^0.5; !单位为年; T=T1*365; !单位为天; Q=D*T1; T_S=C_P*T/(C_P+C_S); !求缺货时间; T_P=D*T/P; ! 求生产周期; C=2*C_D/T1; ! 求年总费用; end 求得每个周期为 9 天,其中 9 天中有 4.5 天在生产,每次的生产量为 121 件,而且 缺货的时间有 3 天。总的费用(包括存贮费、订货费和缺货费)为 4044.52 元。 可以把模型一看作模型二的特殊情况。在模型二中,取消允许缺货和补充需要一定 时间的条件,即 ∞→SC , ∞→P ,则模型二就是模型一。事实上,如将 ∞→SC 和 ∞→P 代入模型二的最优存贮策略各参数公式,就可得到模型一的最优存贮策略。只 是必须注意,按照模型一的假设条件,应有 0* 3 * 2 * 1 === ttt , ** QA = , 0* =B 2.3 模型三:不允许缺货,补充时间较长—基本的经济生产批量存贮模型 在模型二的假设条件中,取消允许缺货条件(即设 ∞→sC , 02 =t ),就成为模 型三。因此,模型三的存贮状态图和最优存贮策略可以从模型二直接导出。 模型三的存贮状态见图 4。下面我们用另外的方法导出模型三的最优存贮策略。 图 4 经济生产批量模型存贮量的变化情况 经济生产批量存贮模型除满足基本假设外,其最主要的假设是:当存贮降到零后, -325- 开始进行生产,生产率为 P ,且 DP > ,即生产的产品一部分满足需求,剩余部分才 作为存贮。 设生产批量为Q ,生产时间为t ,则生产时间与生产率之间的关系为 P Qt = 对于经济生产批量模型,有 最高存贮量 QP D P QDPtDP )1()()( −=−=−= (17) 而平均存贮量是最高存贮量的一半,关于平均固定生产费与经济定购模型中的平均订货 费相同,同样是 Q DCD 。这样,平均总费用为 Q DCQCP DC D P +−= )1(2 1 (18) 类似于前面的推导,得到最优生产量、最优存贮周期、最大存贮量和最优存贮费用 )1( 2* P DC DCQ P D − = (19) )( 2* * DPDC PC D QT P D −== (20) P D C DCP D QP DA )1(2 )1( ** − =−= (21) DCCP D T CC DP D )1(22 * * −== (22) 例 3 商店经销某商品,月需求量为 30 件,需求速度为常数。该商品每件进价 300 元,月存贮费为进价的 2%。向工厂订购该商品时订购费每次 20 元,定购后需 5 天才 开始到货,到货速度为常数,即 2 件/天。求最优存贮策略。 解 本例特点是补充除需要入库时间(相当于生产时间)外,还需要考虑拖后时 间。因此,订购时间应在存贮降为零之前的第 5 天。除此之外,本例和模型三的假设条 件完全一致。本例的存贮状态见图 5。 -326- 图 5 拖后时间的存贮模型 从图 5 可见,拖后时间为 ],0[ 0t ,存贮量 L 应恰好满足这段时间的需求,故 0DtL = 。 根据题意,有 2=P 件/天, 1=D 件/天, 2.030 1%2300 =××=PC 元/天·件, 20=DC 元/次, 50 =t 天, 551 =×=L 件。代入(19)~(22),求得 20* =Q 件, 20* =T 天, 10* =A 件, 2* =C 元 在本例中, L 称为订货点,其意义是每当发现存贮量降到 L 或更低时就定购。在 存贮管理中,称这样的存贮策略为“定点订货”。类似地,称每隔一个固定时间就订货 的存贮策略为“定时订货”,称每次订购量不变的存贮策略为“定量订货”。 2.4 模型四:允许缺货,补充时间极短的经济订购批量存贮模型 在模型二的假设条件中,取消补充需要一定时间的条件(即设 ∞→P ),就成为 模型四。因此,和模型三一样,模型四的存贮状态图和最优存贮策略也可以从模型二直 接导出。 模型四的存贮状态图见图 6。下面我们用另外的方法导出模型四的最优存贮策略。 设 T 仍为时间周期,其中 1T 表示T 中不缺货时间, 2T 表示T 中缺货时间,即 TTT =+ 21 。 S 为最大缺货量, sC 为缺货损失的单价,Q 仍为每次的最高订货量,则 SQ − 为最高存贮量,因为每次得到订货量Q 后,立即支付给顾客最大缺货 S 。 -327- 图 6 允许缺货的经济订购批量存贮模型的存贮情况 以一个周期为例,计算出平均存贮量、平均缺货量和平均总费用。 平均存贮量 T TSQ T TTSQ 2 )(0)(2 1 1 21 −= +− = (23) 其中 D SQT −=1 , D ST =2 , D QT = (24) 由此计算出 平均存贮量 Q SQ T TSQ 2 )( 2 )( 2 1 −=−= , (25) 平均缺货量 Q S T ST 22 2 2 == (26) 因此,允许缺货的经济订购批量存贮模型的平均总费用 Q SC Q DC Q SQCC SDP 22 )( 22 ++−= (27) 求式(10)关于Q 和 S 的偏导数,并求出其极小点 sP sPD CC CCDCQ )(2* += (28) ** QCC CS sP P += (29) 最佳订货周期 DCC CCC D QT sP sPD )(2* * +== (30) -328- 最大存贮量 )( 2*** sPP SD CCC DCCSQA +=−= (31) 最小费用 * 2* ** 2** * * 2 )( 2 )(2 Q SC Q DC Q SQC T CC SDPD ++−== (32) 例 4 某电器公司的生产流水线需要某种零件,该零件需要靠订货得到。已知批量 订货的订货费 12000 元/次,每个零件的存贮机费用为 0.3 元/(件·月),每个零件的缺 货损失为 1.1 元/(件·月),设该零件的每月需求量为 8000 件。求全年的订货次数、订 货量以及最优存贮费用。 解 根据题意,取一年为单位时间,由已知条件,订货费 12000=DC 元/次,存贮 费 6.3=PC 元/(件·年),缺货损失费 2.13=SC 元/(件·年),需求率 96000=D 件 /年。该存贮问题可由一个整数规划来表示 Q SC Q DC Q SQC SDP 22 )(min 22 ++− s.t. Q Dn = , 0, ≥SQ , 0≥n 且取整数 编写 LINGO 程序如下: model: min=0.5*C_P*(Q-S)^2/Q+C_D*D/Q+0.5*C_S*S^2/Q; n=D/Q;@gin(n); data: C_D=12000; D=96000; C_P=3.6; C_S=13.2; enddata end 求得全年组织 3 次订货,每次的订货量为 32000 件,最大缺货量为 6857.141 件, 最优费用为 81257.14 元。 对于确定型存贮问题,上述四个模型是最基本的模型。其中,模型一、三、四又 -329- 可看作模型二的特殊情况。在每个模型的最优存贮策略的各个参数中,最优存贮周期T 是最基本的参数,其它各个参数和它的关系在各个模型中都是相同的。根据模型假设条 件的不同,各个模型的最优存贮周期 *T 之间也有明显的规律性。因子 S SP C CC + 对应了 是否允许缺货的假设条件,因子 DP P − 对应了补充是否需要时间的假设条件。 一个存贮问题是否允许缺货或补充是否需要时间,完全取决于对实际问题的处理 角度,不存在绝对意义上的不允许缺货或绝对意义上的补充不需要时间。如果缺货引起 的后果或损失十分严重,则从管理的角度应当提出不允许缺货的建模要求;否则,可视 为允许缺货的情况。至于缺货损失的估计,应当力求全面和精确。如果补充需要的时间 相对于存贮周期是微不足道的,则可考虑补充不需要时间的假设条件;否则,需要考虑 补充时间。在考虑补充时间时,必须分清拖后时间和生产时间,两者在概念上是不同的。 2.5 模型五:经济定购批量折扣模型 所谓经济订购批量折扣模型是经济订购批量存贮模型的一种发展,即商品的价格 是不固定的,是随着订货量的多少而改变的。就一半情况而论,物品订购的越多,物品 的单价也就越低,因此折扣模型就是讨论这种情况下物品的订购数量。 一年花费的总费用由三个方面组成:年平均存贮费、年平均订货费和商品的购买 费用,即 )()(2 1 QDKQ DCQQCC D P ++= (33) 在式(33)中, )(QK 是物品的价格,它与物品的订购数量有关,一般是一个分段表示 的函数,即 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ ≤< ≤< ≤≤ = − mmm QQQK QQQK QQK QK 1 212 11 , , 0, )( M 其中 miiQ ≤≤1}{ 是单调递增的,而 miiC ≤≤1}{ 是单调递减的。 物品的存贮费 )(QCP 与物品的价格有关,通常是价格 )(QK 的 r ( 10 << r )倍, 即 )()( QrKQCP = (34) -330- 在经济订购批量存贮模型中,也应包含时(33)中的第三项,但当时 cQK =)( 是 常数,因此,第三项也为常数,与目标函数求极值无关,因此,在分析时,没有讨论此 项。 对于折扣模型,经济订购批量折扣存贮模型中求最优订购量的公式(3)仍然成立, 只不过此时的 PC 不是常数罢了。假设 PC 是由式(29)和式(30)确定的,则最优订 购量为 j D j rK DCQ 2* = , mj ,,2,1 L= , (35) DKQ DCQrKC j j D jjj ++= * ** 2 1 , mj ,,2,1 L= (36) 然后再根据 * jQ 所在的区间和 * jC 的值,选择合适的 * jQ 。实际上,若存在某个 },,2,1{ mi L∈ ,使得 ],[ 1 * iii QQQ −∈ ,则该 * iQ 就为最优订货量。 例 5 某公司计划订购一种商品用于销售。该商品的年销售量为 40000 件,每次订 货费为 9000 元,商品的价格与订货量的大小有关,为 ⎪ ⎪ ⎩ ⎪⎪ ⎨ ⎧ < ≤< ≤< ≤≤ = Q Q Q Q QK 30000,825.33 3000020000,175.34 2000010000,525.34 100000,225.35 )( 存贮费是商品价格的 20%。问如何安排订购量与订货时间。 解 按上述方法,编写如下的 LINGO 程序: model: sets: range/1..4/:B,K,C_P,Q,EOQ,C; !B是订货量的分界点,Q表示由式(35)计算出 的订货量,EOQ是调整后的订货量; endsets data: D=40000; C_D=9000; R=0.2; B=10000,20000,30000,40000; K=35.225,34.525,34.175,33.825; Enddata @for(range:C_P=R*K;Q=(2*C_D*D/C_P)^0.5); EOQ(1)=Q(1)-(Q(1)-B(1))*(Q(1)#gt# B(1)); -331- @for(range(i)|i #gt# 1:EOQ(i)=Q(i)+(B(i-1)-Q(i)+1)*(Q(i) #lt# B(i-1))-(Q(i)-B(i))*(Q(i) #gt# B(i))); @for(range:C=0.5*C_P*EOQ+C_D*D/EOQ+K*D); C_min=@min(range:C); Q_best=@sum(range:EOQ*(C #eq# C_min)); T_best=Q_best/D; end 求得最优订货量为 10211 件,最优存贮费用为 145151510 元,最优订货周期是平均 0.255 年一次。 比较计算结果中的 Q 值与 EOQ 值,会对程序的理解有很大的帮助。 我们也可以使用如下的LINGO程序求得最优订货量和最优订货周期。 model: sets: range/1..4/:B,K,C_P,Q; !B是订货量的分界点,Q表示由式(35)计算出的订货量, EOQ是调整后的订货量; endsets data: D=40000; C_D=9000; R=0.2; B=10000,20000,30000,40000; K=35.225,34.525,34.175,33.825; Enddata n=@size(range); @for(range:C_P=R*K;Q=(2*C_D*D/C_P)^0.5); Q_best=Q(1)*(Q(1) #le# B(1))+@sum(range(i)| i #ne# 1 :Q(i)*(Q(i) #gt# B(i-1) #and# Q(i) #le# B(i))); T_best=Q_best/D; end §3 有约束的确定型存贮模型 3.1 带有约束的经济订购批量存贮模型 现在考虑多物品、带有约束的情况。设有 m 种物品,采用下列记号: (1) iii KQD ,, ( mi ,,2,1 L= )分别表示第i 种物品的单位需求量、每次订货的 批量和物品的单价; (2) DC 表示实施一次订货的订货费,即无论物品是否相同,订货费总是相同的; (3) iPC ( mi ,,2,1 L= )表示第i 种产品的单位存贮费; -332- (4) TWJ, 分别表示每次订货可占用资金和库存总容量; (5) iw ( mi ,,2,1 L= )表示单位第i 种物品占用的库容量。 类似于前面的推导,可以得到带有约束的多物品的 EOQ 模型。 3.1.1 具有资金约束的 EOQ 模型 类似前面的分析,对于第i( mi ,,2,1 L= )种物品,当每次订货的订货量为 iQ 时, 单位时间总平均费用为 i iD iPi Q DCQCC i += 2 1 每种物品的单价为 iK ,每次的订货量为 iQ ,则 iiQK 是该种物品占用的资金。因此, 资金约束为 JQK m i ii ≤∑ =1 综上所述,得到具有资金约束的 EOQ 模型 ∑ = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ + m i i iD iP Q DCQC i 1 2 1min (37) s.t. JQK m i ii ≤∑ =1 (38) 0≥iQ , mi ,,2,1 L= (39) 3.1.2 具有库容约束的 EOQ 模型 单位第i 种物品占用的库容量是 iw ,因此, iiQw 是该种物品占用的总的库容量, 结合上面的分析,具有库容约束的 EOQ 模型是 ∑ = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ + m i i iD iP Q DCQC i 1 2 1min (40) s.t. T m i ii WQw ≤∑ =1 (41) 0≥iQ , mi ,,2,1 L= (42) -333- 3.1.3 兼有资金与库容约束的最佳批量模型 结合上述两种模型,得到兼有资金与库容约束的最佳批量模型 ∑ = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ + m i i iD iP Q DCQC i 1 2 1min (43) s.t. JQK m i ii ≤∑ =1 (44) T m i ii WQw ≤∑ =1 (45) 0≥iQ , mi ,,2,1 L= (46) 对于这三种模型,可以容易地用 LINGO 软件进行求解。 例 6 某公司需要 5 种物资,其供应与存贮模式为确定性、周期补充、均匀消耗和 不允许缺货模型。设该公司的最大库容量 )( TW 为 1500m3,一次订货占用流动资金的上 限( J )为 40 万元,订货费( DC )为 1000 元。5 种物资的年需求量 iD ,物资单价 iK , 物资的存贮费 iPC ,单位占用库 iw 如表 1 所示。试求各种物品的订货次数、订货量和 总的存贮费用。 表 1 物资需求、单价、存贮费和单位占用库容情况表 物资 i 年需求量 iD 单价 iK (元/件) 存贮费 iPC (元/(件·年)) 单位占用库容 iw (m3/ 件) 1 600 300 60 1.0 2 900 1000 200 1.5 3 2400 500 100 0.5 4 12000 500 100 2.0 5 18000 100 20 1.0 解 设 in 是第i ( 5,4,3,2,1=i )中物资的年订货次数,按照带有资金与库容约束 的最佳批量模型(43)~(46),写出相应的整数规划模型 ∑ = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ + 5 1 2 1min i i iD iP Q DCQC i -334- s.t. JQK i ii ≤∑ = 5 1 T i ii WQw ≤∑ = 5 1 0≥iQ , 5,,2,1 L=i i i i Q Dn = ,且 in 为整数, 5,,2,1 L=i 编写 LINGO 程序如下: model: sets: kinds/1..5/:C_P,D,K,W,Q,N; endsets min=@sum(kinds:0.5*C_P*Q+C_D*D/Q); @sum(kinds:K*Q)