【笔记】运筹(中)——Rita_Aloha

目录

 一、非线性规划

1.无约束问题

2.约束极值问题

二、动态规划

1.动态规划的基本概念

2.动态规划的模型

3.动态规划的最优性原理和最优性定理

4.动态规划的基本方法

三、图与网络规划

1.图的基本概念

2.最短路径问题

3.最长路径问题

4*.第k短路径问题

5.最小生成树

6*.中国邮路问题

7.运输网络

8.最大流

9.最小代价流问题

四、网络计划技术 

1.网络计划图

2.网络计划的优化

3.非肯定型PERT网络

五、排队论

1.泊松过程、生灭过程和负指数分布

2.一般排队系统结构

3.泊松输入、负指数分布的排队模型

4.一般服务分布M/G/1排队模型


 一、非线性规划

1.无约束问题

(1)基本概念

①非线性规划问题的数学模型

非线性规划的数学模型常表示成以下形式

                                                \left\{\begin{matrix} \min f(X)\\ h_{i}(X)=0,i=1,2,...,m\\ g_{j}(X)\geqslant 0,j=1,2,...,l \end{matrix}\right.

其中自变量X=(x_{1},x_{2},...,x_{n})^{T}是n维欧式空间E^{n}中的向量(点);f(X)为目标函数,h_{i}(X)=0g_{j}(X)\geqslant 0为约束条件。

②极值问题

非线性规划有时求出的某个解是一部分可行域上的极值点,但却并不一定是整个可行域上的全局最优解。现说明极值点存在的必要条件和充分条件。

【定理(必要条件)】设R是n维欧式空间E^{n}上的某一开集,f(X)R上有一阶连续偏导数,且在点X^{*}\in R取得局部极值,则必有

                                              \frac{\partial f(X^{*})}{\partial x_{1}}=\frac{\partial f(X^{*})}{\partial x_{2}}=...=\frac{\partial f(X^{*})}{\partial x_{n}}=0

                                                                \triangledown f(X^{*})=0

上式中

                                           \triangledown f(X^{*})=\left ( \frac{\partial f(X^{*})}{\partial x_{1}},\frac{\partial f(X^{*})}{\partial x_{2}},...,\frac{\partial f(X^{*})}{\partial x_{n}}\right )^{T}

为函数f(X)在点X^{*}处的梯度。

【定理(充分条件)】设R是n维欧式空间E^{n}上的某一开集,f(X)R上具有二阶连续偏导数,X^{*}\in R,若\triangledown f(X^{*})=0,且对任何非零向量Z\in E^{n}

                                                        Z^{T}H(X^{*})Z>0

X^{*}f(X)的严格局部极小点。

此处H(X^{*})为在点X^{*}处的海塞(Hesse)矩阵

                                H(X^{*})=\begin{bmatrix} \frac{\partial^2 f(X^{*})}{\partial x_{1}^2}& \frac{\partial^2 f(X^{*})}{\partial x_{1}\partial x_{2}}&\cdots &\frac{\partial^2 f(X^{*})}{\partial x_{1}\partial x_{n}} \\ \frac{\partial^2 f(X^{*})}{\partial x_{2}\partial x_{1}}& \frac{\partial^2 f(X^{*})}{\partial x_{2}^2}& \cdots &\frac{\partial^2 f(X^{*})}{\partial x_{2}\partial x_{n}} \\ & & \vdots & \\ \frac{\partial^2 f(X^{*})}{\partial x_{n}\partial x_{1}}& \frac{\partial^2 f(X^{*})}{\partial x_{n}\partial x_{2}}& \cdots & \frac{\partial^2 f(X^{*})}{\partial x_{n}^2} \end{bmatrix}

③凸函数与凹函数

i.什么是凸函数和凹函数

f(X)为定义在n维欧式空间中凸集R上的函数,若对任何实数\alpha (0<\alpha <1)以及R中的任意两点X^{(1)}X^{(2)},恒有

                                f(\alpha X^{(1)}+(1-\alpha) X^{(2)})\leqslant \alpha f(X^{(1)})+(1-\alpha) X^{(2)}

则称f(X)为定义在R上的凸函数。

若对任意\alpha (0<\alpha <1)X^{(1)}\neq X^{(2)}\in R恒有

                                f(\alpha X^{(1)}+(1-\alpha) X^{(2)})< \alpha f(X^{(1)})+(1-\alpha) X^{(2)}

则称f(X)为定义在R上的严格凸函数。

将上述两式中的不等号反向,即可得到凹函数和严格凹函数的定义。显然,若函数f(X)是凸函数(严格凸函数),则-f(X)一定是凹函数(严格凹函数)。

ii.凸函数的性质

【性质1】设f(X)为定义在凸集R上的凸函数,则对任意实数\beta \geqslant 0,函数\beta f(X)也是定义在上的凸函数。

【性质2】设f_{1}(X)f_{2}(X)为定义在凸集R上的两个凸函数,则其和f(X)=f_{1}(X)+f_{2}(X)仍为定义在R上的凸函数。

【性质3】设f(X)为定义在凸集R上的凸函数,则对任一实数\beta,集合

                                                S_{\beta }=\left \{ X|X\in R,f(X)\leqslant \beta \right \}

是凸集(S_{\beta }称为水平集)。

iii.函数凸性的判定

【定理(一阶条件)】设R为n维欧式空间E^{n}上的开凸集,f(X)R上具有一阶连续偏导数,则f(X)R上的凸函数的充要条件是,对任意两个不同点X^{(1)}\in RX^{(2)}\in R,恒有

                                f(X^{(2)})\geqslant f(X^{(1)})+\bigtriangledown f(X^{(1)})^{T}(X^{(2)}-X^{(1)})

【定理(二阶条件)】设R为n维欧式空间E^{n}上的某一开凸集,f(X)R上具有二阶连续偏导数,则f(X)R上的凸函数的充要条件是:f(X)的海塞矩阵H(X)R上处处半正定。

iv.凸函数的极值

【定理】若为定义在凸集上的凸函数,则它的任一极小值就是它在上的最小点(全局极小点),而且它的极小点形成一个凸集。

【定理】设f(X)是定义在凸集R上的可微凸函数,若存在点X^{*}\in R,使得对于所有的X\in R

                                                \bigtriangledown f(X^{*})^{T}(X-X^{*})\geqslant 0

X^{*}f(X)R上的最小点(全局极小点)。

④凸规划

考虑非线性规划

                                                \left\{\begin{matrix} \min_{X\in R}f(X)\\ R=\left \{ X|g_{j}(X)\geqslant 0,j=1,2,...,l \right \} \end{matrix}\right.

假定其中f(X)为凸函数,g_{j}(X)(j=1,2,...,l)为凹函数(或者说-g_{j}(X)为凸函数),这样的非线性规划称为凸规划。

上述凸规划的可行域为凸集,其局部最优解即为全局最优解,而且其最优解的集合形成一个凸集。当凸规划的目标函数f(X)为严格凸函数时,其最优解必定唯一(假定最优解存在)。由此可见,凸规划是一类比较简单而又具有重要理论意义的非线性规划。

由于线性函数既可视为凸函数,又可视为凹函数,故线性规划也属于凸规划。

⑤下降迭代算法

迭代法的基本思想是:为了求函数f(X)的最优解,首先给定一个初始估计X^{(0)},然后按某种规则(即算法)找出比X^{(0)}更好的解X^{(1)}(对极小化问题,f(X^{(1)})<f(X^{(0)});对极大化问题,f(X^{(1)})>f(X^{(0)})),再按此种规则找出比X^{(1)}更好的解X^{(2)}……。如此即可得到一个解的序列\left \{ X^{(k)} \right \}。若这个解序列有极限X^{*},即

                                                        \lim _{k\rightarrow \infty}\left \| X^{(k)}-X^{*} \right \|=0

则称它收敛于X^{*}

若由某算法所产生的解的序列\left \{ X^{(k)} \right \}使目标函数值f(X^{(k)})逐步减少,就称这算法为下降算法

下降迭代算法的步骤可总结如下:

  1. 选定某一初始点X^{(0)},并令k:=0
  2. 确定搜索方向P^{(k)}
  3. X^{(k)}出发,沿方向P^{(k)}求步长\lambda _{k},以产生下一个迭代点X^{(k+1)}
  4. 检查得到的新点X^{(k+1)}是否为极小点或近似极小点。若是,则停止迭代。否则,令k:=k+1,转回2继续进行迭代。

在以上步骤中选取搜索方向P^{(k)}是最关键的一步,有关各种算法的区分,主要在于确定搜索方向的方法不同。

确定步长\lambda _{k}可选用不同的方法。最简单的一种是令它等于某一常数,这样做计算简便,但不能保证使目标函数值下降。第二种称为可接受点算法,只要能使目标函数值下降,可取任意步长\lambda _{k}。第三种方法是基于搜索方向使目标函数值下降最多,即沿射线X=X^{(k)}+\lambda P^{(k)}求目标函数f(X)的极小(注意,这里是指无约束问题)

                                                \lambda _{k}:\min f(X^{(k)}+\lambda P^{(k)})

由于这项工作是求以\lambda为变量的一元函数f(X^{(k)}+\lambda P^{(k)})的极小点\lambda _{k},故常称这一过程为(最优)一维搜索线搜索,这样确定的步长为最佳步长。

一维搜索有个十分重要的性质:在搜索方向上所得最优点处目标函数的梯度和该搜索方向正交。

【定理】设目标函数f(X)具有一阶连续偏导数,X^{(k+1)}按下述规则产生

                                ​​​​​​​                \left\{\begin{matrix} \lambda _{k}:\min_{k}f(X^{(k)}+\lambda P^{(k)})\\ X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)} \end{matrix}\right.
则有                                                \bigtriangledown f(X^{(k+1)})^{T}P^{(k)}=0

对一个好的算法,不仅要求它产生的点列能收敛到问题的最优解,还要求具有较快的收敛速度。设序列\left \{ X^{(k)} \right \}收敛于X^{*},若存在与迭代次数k无关的数0<\beta <\infty\alpha \geqslant 1,使k从某个k_{0}>0开始都有

                                             \left \| X^{(k+1)}-X^{*} \right \|\leqslant \beta \left \| X^{(k)}-X^{*} \right \|^{\alpha }

成立,就称\left \{ X^{(k)} \right \}收敛的阶为\alpha,或\left \{ X^{(k)} \right \}\alpha阶收敛。

\alpha =2时,称为二阶收敛,也可说\left \{ X^{(k)} \right \}具有二阶敛速。

1< \alpha <2时,称超线性收敛。

\alpha =10<\beta <1时,称线性收敛或一阶收敛。

若一个算法具有超线性或更高的收敛速度,就认为它是一个很好的算法。

因为真正的最优解事先不知道,为决定什么时候停止计算,只能根据相继两次迭代的结果。常用的终止计算准则有以下几种:

i.根据相继两次迭代的绝对误差

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                \left \| X^{(k+1)}-X^{(k)} \right \|<\varepsilon _{1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left | f(X^{(k+1)})-f(X^{(k)}) \right |<\varepsilon _{2}

ii.根据相继两次迭代的相对误差

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\left \| X^{(k+1)}-X^{(k)} \right \|}{\left \| X^{(k)} \right \|}<\varepsilon _{3}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\left | f(X^{(k+1)})-f(X^{(k)}) \right |}{\left | f(X^{(k)}) \right |}<\varepsilon _{4}

这时要求分母不等于和不接近于零。

iii.根据目标函数梯度的模足够小

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​\left \| \bigtriangledown f(X^{(k)}) \right \|<\varepsilon _{5}

其中,\varepsilon _{1},\varepsilon _{2},\varepsilon _{3},\varepsilon _{4},\varepsilon _{5}为事先给定的足够小的正数。

(2)一维搜索

当用上述迭代法求函数的极小点时,常常要用到一维搜索,即沿某一已知方向求目标函数的极小点。一维搜索的方法很多,常用的有:

  1. 试探法(“成功-失败”法,斐波那契法,0.618法等)
  2. 插值法(抛物线插值法,三次插值法等)
  3. 微积分中的求根法(切线法,二分法等)

①斐波那契法(分数法)

y=f(t)是区间[a,b]上的下单峰函数,在此区间内它有唯一极小点t^{*}。若在此区间内任取两点a_{1}b_{1}a_{1}<b_{1},并计算函数值f(a_{1})f(b_{1}),可能出现以下两种情形:

  1. f(a_{1})<f(b_{1}),这时极小点t^{*}必在区间[a,b_{1}]内。
  2. f(a_{1})\geqslant f(b_{1}),这时极小点t^{*}必在区间[a_{1},b]内。

如果用F_{n}表示计算n个函数值能缩短为单位区间的最大原区间长度,显然

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                F_{0}=F_{1}=1

序列\left \{ F_{n} \right \}可写成一个递推公式

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        F_{n}=F_{n-1}+F_{n-2}

这些F_{n}就是通常所说的斐波那契数。

计算n次函数值所能获得的最大缩短率(缩短后的区间长度与原区间长度之比)为\frac{1}{F_{n}}。现在,想要计算n个函数值,而把区间的长度缩短为原来长度的\delta倍,即缩短后的区间长度为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        b_{n-1}-a_{n-1}\leqslant (b_{0}-a_{0})\delta

则只要n足够大,能使下式成立即可

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        F_{n}\geqslant \frac{1}{\delta }

其中,\delta为一个正小数,称为区间缩短的相对精度。有时给出区间缩短的绝对精度\eta,即要求

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        b_{n-1}-a_{n-1}\leqslant \eta

显然,上述相对精度和绝对精度之间有如下关系

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​\eta =(b_{0}-a_{0})\delta

用这个方法缩短的区间的步骤如下:

i.确定试点的个数n。根据相对精度\delta,即可计算出F_{n},然后由下表确定最小的n。

n 0 1 2 3 4 5 6 7 8 9 10 11 12
F_{n} 1 1 2 3 5 8 13 21 34 55 89 144 233

ii.选取前两个试点的位置

由序列的递推公式可知第一次缩短时的两个试点位置分别是

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} t_{1}=a_{0}+\frac{F_{n-2}}{F_{n}}(b_{0}-a_{0})\\ \;=b_{0}+\frac{F_{n-1}}{F_{n}}(a_{0}-b_{0})\\ t_{1}^{'}=a_{0}+\frac{F_{n-1}}{F_{n}}(b_{0}-a_{0})\end{matrix}\right.

它们在区间内的位置是对称的。

iii.计算函数值f(t_{1})f(t_{1}^{'}),并比较它们的大小。

f(t_{1})<f(t_{1}^{'}),则取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \begin{matrix} a_{1}=a_{0} & b_{1}=t_{1}^{'} &t_{2}^{'}=t_{1} \end{matrix}

并令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        t_{2}=b_{1}+\frac{F_{n-2}}{F_{n-1}}(b_{1}-a_{1})

否则,取

         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \begin{matrix} a_{1}=t_{1} & b_{1}=b_{0} & t_{2}=t_{1}^{'} \end{matrix}

并令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        t_{2}^{'}=a_{1}+\frac{F_{n-2}}{F_{n-1}}(b_{1}-a_{1})​​​​​​​

iv.计算f(t_{2})f(t_{2}^{'})(其中的一个已经算出),如第3步那样一步步迭代。计算试点的一般公式为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} t_{k}=b_{k-1}+\frac{F_{n-1}}{F_{n-k-1}}(a_{k-1}-b_{n-1})\\ t_{k}^{'}=a_{k-1}+\frac{F_{n-k}}{F_{n-k+1}}(b_{k-1}-a_{k-1}) \end{matrix}\right.

其中,k=1,2,...,n-1

v.当进行至k=n-1

t_{n-1}=t_{n-1}^{'}=\frac{1}{2}(a_{n-1}+b_{n-2})

这就无法借比较函数值f(t_{n-1})f(t_{n-1}^{'})的大小以确定最终区间,为此,取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} t_{n-1}=\frac{1}{2}(a_{n-2}+b_{n-2})\\ t_{n-1}^{'}=a_{n-2}+(\frac{1}{2}+\varepsilon )(b_{n-2}-a_{n-2}) \end{matrix}\right.

其中\varepsilon为任意小的数。在t_{n-1}t_{n-1}^{'}这两点中,以函数值较小者为近似极小点,相应的函数值为近似极小值,并得到最终区间[a_{n-2},t_{n-1}^{'}][t_{n-1},b_{n-2}]

②0.618法(黄金分割法)

现用不变的区间缩短率0.618,代替斐波那契法每次不同的缩短率,就得到了黄金分割法(0.618法)。这个方法可以看成是斐波那契法的近似,实现起来比较容易,效果也相当好,因而易于为人们接受。

当用0.618方法时,计算n个试点的函数值可以把原区间[a_{0},b_{0}]连续缩短n-1次,因为每次的缩短率均为\mu,故最后的区间长度为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        (b_{0}-a_{0})\mu ^{n-1}

当已知缩短的相对精度为\delta时,可用下式计算试点个数n

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu ^{n-1}\leqslant \delta

当然,也可以不预先计算试点的数目n,而在计算过程中逐次加以判断,看是否已满足了提出的精度要求。

0.618法是一种等速对称进行试探的方法,每次的试点均取在区间长度的0.618倍和0.382倍处。

(3)无约束极值问题的解法

无约束极值问题可表述为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \min f(X),X\in E^{n}

在求解上述问题时常使用迭代法,迭代法可大体分为两类。一类要用到函数的一阶导数(或)二阶导数,由于函数的解析性质,故称为解析法;另一类在迭代过程中仅用到函数值,而不要求函数的解析性质,这类方法称为直接法。

①梯度法(最速下降法)

假定无约束极值问题中的目标函数f(X)有一阶连续偏导数,具有极小点X^{*}。以X^{(k)}表示极小点的第k次近似,为了求其第k+1次近似点X^{(k+1)},在点X^{(k)}沿方向P^{(k)}作射线

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X=X^{(k)}+\lambda P^{(k)}\: \: (\lambda \geqslant 0)

称方向

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P^{(k)}=-\triangledown f(X^{(k)})

为负梯度方向,它是使函数值下降最快的方向(在X^{(k)}的某一小范围内)。

用梯度法解无约束极值问题的步骤简要总结如下:

i.给定初始近似点X^{(0)}及精度\varepsilon >0,若\left \| \triangledown f(X^{(0)}) \right \|\leqslant \varepsilon,则X^{(0)}即为近似极小点。

ii.若\left \| \triangledown f(X^{(0)}) \right \|^{2}>\varepsilon,求步长\lambda _{0},并计算

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X^{(1)}=X^{(0)}-\lambda _{0}\triangledown f(X^{(0)})

求步长可用一维搜索法、微分法或试错法。若求最佳步长,则应使用前两种方法。

iii.一般的,设已迭代到点X^{(k)},若\left \| \triangledown f(X^{(k)} )\right \|^{2}\leqslant \varepsilon,则X^{(k)}即为所求的近似解;若\left \| \triangledown f(X^{(k)} )\right \|^{2}>\varepsilon,则求步长\lambda _{k},并确定下一个近似点

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​X^{(k+1)}=X^{(k)}-\lambda _{k}\triangledown f(X^{(k)})

如此继续,直至达到要求的精度为止。

②共轭梯度法

XY是n维欧式空间E^{n}中的两个向量,若有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X^{T}Y=0

就称XY正交。再设A为n×n对称正定阵,如果XAY正交,即有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   ​​​​​​​      X^{T}AY=0

则称XY关于A共轭,或XYA共轭(A正交)。

一般地,设A为n×n对称正定阵,若非零向量组P^{(1)},P^{(2)},...,P^{(n)}\in E^{n}满足条件

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​(P^{(i)})^{T}AP^{(j)}=0(i\neq j;i,j=1,2,...,n)

则称该向量组为A共轭。如果A=I(单位阵),则上述条件即为通常的正交条件。

【定理】设A为n×n对称正定阵,P^{(1)},P^{(2)},...,P^{(n)}A共轭的非零向量,则这一组向量线性独立。

【定理】设向量P^{(i)},i=0,1,2,...,n-1A共轭,则从任一点X^{(0)}出发,相继以P^{(0)},P^{(1)},...,P^{(n-1)}为搜索方向的下述算法

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \min_{\lambda }f(X^{(k)}+\lambda P^{(k)})=f(X^{(k)}+\lambda _{k}P^{(k)})\\ X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)} \end{matrix}\right.

经n次一维搜索收敛于无约束极值问题\min f(X)=\frac{1}{2}X^{T}AX+B^{T}X+cA为n×n对称正定阵,X,B\in E^{n}c为常数)的极小点X^{*}

共轭梯度法的计算步骤如下:

i.选择初始近似X^{(0)},给出允许误差\varepsilon >0

ii.计算

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P^{(0)}=-\triangledown f(X^{(0)})

并算出X^{(1)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)},k=0,1,...,n-1

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda _{k}=-\frac{\triangledown f(X^{(k)})^{T}P^{(k)}}{(P^{(k)})^{T}AP^{(k)}}

计算步长也可使用以前介绍的一维搜索法。

iii.一般地,假定已得出X^{(k)}P^{(k)},则可计算其第k+1次近似X^{(k+1)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)}\\ \lambda _{k}:\min_{\lambda }f(X^{(k)}+\lambda P^{(k)}) \end{matrix}\right.

iv.若\left \| \triangledown f(X^{(k+1)}) \right \|^{2}\leqslant \varepsilon,停止计算,X^{(k+1)}即为要求的近似解。否则,若k<n-1,则计算\beta _{k}P^{(k+1)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P^{(k+1)}=-\triangledown f(X^{(k+1)})+\beta _{k}P^{(k)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \beta _{k}=\frac{\triangledown f(X^{(k+1)})^{T}\triangledown f(X^{(k+1)})}{\triangledown f(X^{(k)})^{T}\triangledown f(X^{(k)})}

并转向第3步。

可将共轭梯度法推广到求解一般无约束极值问题。一般有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)}\\\lambda _{k}=-\frac{\triangledown f(X^{(k)})^{T}P^{(k)}}{(P^{(k)})^{T}H(X^{(k)})P^{(k)}} \\ P^{(k+1)}=-\triangledown f(X^{(k+1)})+\beta _{k}P^{(k)}\\ \beta _{k}=\frac{\triangledown f(X^{(k+1)})^{T}H(X^{(k)})P^{(k)}}{(P^{(k)})^{T}H(X^{(k)})P^{(k)}}\end{matrix}\right.

就是推广到非二次函数的共轭梯度法的计算公式。

③变尺度法

假定无约束问题的目标函数f(X)具有二阶连续偏导数,X^{(k)}为其极小点的某一个近似。取-H(X^{(k)})^{-1}\triangledown f(X^{(k)})为搜索方向,即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} P^{(k)}=-H(X^{(k)})^{-1}\triangledown f(X^{(k)})\\ X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)} \\ \lambda _{k}:\min_{\lambda }f(X^{(k)}+\lambda P^{(k)})\end{matrix}\right.

按照这种方式求函数f(X)的极小点的方法,称作广义牛顿法。上式确定的搜索方向,为f(X)在点X^{(k)}的牛顿方向。

对于非二次函数,仿照二次函数的情形,要求其海塞矩阵的逆阵的第k+1次近似矩阵\bar{H}^{(k+1)}满足关系式                                     

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   X^{(k+1)}-X^{(k)}=\bar{H}^{(k+1)}\left [ \triangledown f(X^{(k+1)})-\triangledown f(X^{(k)})\right ]

此式就是拟牛顿条件。

变尺度法的计算步骤如下:

i.给定初始点X^{(0)}梯度允许误差\varepsilon >0

ii.若

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left \| \triangledown f(X^{(0)}) \right \|^{2}\leqslant \varepsilon

X^{(0)}即为近似极小点,停止迭代。否则,转向下一步。

iii.令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \bar{H}^{(0)}=I(单位阵)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P^{(0)}=-\bar{H}^{(0)}\triangledown f(X^{(0)})

P^{(0)}方向进行一维搜索,确定最佳步长\lambda _{0}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​           \min_{\lambda }f(X^{(0)}+\lambda P^{(0)})=f(X^{(0)}+\lambda _{0}P^{(0)})

如此可得下一个近似点

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X^{(1)}=X^{(0)}+\lambda _{0}P^{(0)}

iv.一般地,设已得到近似点X^{(k)},算出\triangledown f(X^{(k)}),若

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left \| \triangledown f(X^{(k)}) \right \|^{2}\leqslant \varepsilon

X^{(k)}即为所求的近似解,停止迭代;否则,计算\bar{H}^{(k)}

        ​​​​​​​        \bar{H}^{(k+1)}=\bar{H}^{(k)}+\frac{\Delta X^{(k)}(\Delta X^{(k)})^{T}}{(\Delta G^{(k)})^{T}\Delta X^{(k)}}-\frac{\bar{H}^{(k)}\Delta G^{(k)}(\Delta G^{(k)})^{T}\bar{H}^{(k)}}{(\Delta G^{(k)})^{T}\bar{H}^{(k)}\Delta G^{(k)}}

并令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P^{(k)}=-\bar{H}^{(k)}\triangledown f(X^{(k)})
P^{(k)}方向进行一维搜索,确定最佳步长\lambda _{k}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     \min_{\lambda }f(X^{(k)}+\lambda P^{(k)})=f(X^{(k)}+\lambda _{k}P^{(k)})

其下一个近似点为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X^{(k+1)}=X^{(k)}+\lambda _{k}P^{(k)}

v.若X^{(k+1)}点满足精度要求,则X^{(k+1)}即为所求的近似解。否则,转回第iv步,直到求出某点满足精度要求为止。

④步长加速法

用模矢法求解无约束极值问题的计算步骤如下:

i.任选初始近似点B_{1},以它为初始基点进行探索。

ii.为每一独立变量x_{i}(i=1,2,...,n)选定步长

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \Delta _{i}=\begin{bmatrix} 0\\ \vdots\\ 0\\ \delta _{i}\\ 0\\ \vdots\\ 0 \end{bmatrix}

上式中\Delta _{i}为第i个分量是\delta _{i},而其他所有分量均为零的向量。

iii.算出初始基点B_{1}的目标函数值f(B_{1}),考虑点B_{1}+\Delta _{1},若f(B_{1}+\Delta _{1})<f(B_{1}),就以B_{1}+\Delta _{1}为临时矢点,并记为T_{11}。这里的第一个下标表示现在是在建立第一个模矢,第二个下标表示变量x_{1}已被摄动。若B_{1}+\Delta _{1}不比B_{1}点好,就试验B_{1}-\Delta _{1},如果它比B_{1}点好,就以它为临时矢点,否则,以B_{1}为临时矢点。即

        ​​​​​​​        ​​​​​​​        T_{11}=\left\{\begin{matrix} B_{1}+\Delta _{1}, &\textup{if} \; \; f(B_{1}+\Delta _{1})<f(B_{1})\\ B_{1}-\Delta _{1},& \textup{if} \; \; f(B_{1}-\Delta _{1})<f(B_{1})\leqslant f(B_{1}+\Delta _{1})\\ B_{1}, & \textup{if} \; \; f(B_{1})\leqslant \min\left [ f(B_{1}+\Delta _{1}),f(B_{1}-\Delta _{1}) \right ] \end{matrix}\right.

对于下一个独立变量x_{2}进行类似的摄动,这时,用临时矢点T_{11}代替原来的基点B_{1}。一般地

        ​​​​​​​        ​​​​​​​        T_{1,j+1}=\left\{\begin{matrix} T_{1j}+\Delta _{j+1}, &\textup{if} \; \; f(T_{1j}+\Delta _{j+1})<f(T_{1j})\\ T_{1j}-\Delta _{j+1},& \textup{if} \; \; f(T_{1j}-\Delta _{j+1})<f(T_{1j})\leqslant f(T_{1j}+\Delta _{j+1})\\ T_{1j}, & \textup{if} \; \; f(T_{1j})\leqslant \min\left [ f(T_{1j}+\Delta _{j+1}),f(T_{1j}-\Delta _{j+1}) \right ] \end{matrix}\right.

上式中,0\leqslant j\leqslant n-1,T_{10}=B_{1}

n个变量都摄动之后,得临时矢点T_{1n},并令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        T_{1n}=B_{2}

原来的基点B_{1}和新基点B_{2}确定了第一个模矢。

iv.将第一个模矢延长一倍,得第二个模矢的初始临时矢点T_{20}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        T_{20}=B_{1}+2(B_{2}-B_{1})=2B_{2}-B_{1}

v.在T_{20}附近进行和上面类似的探索,建立临时矢点T_{21},T_{22},...,T_{2n},以T_{2n}为第三个基点B_{1}。这样,B_{2},B_{3}就确立了第二个模矢。第三个模矢的初始临时矢点为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        T_{30}=B_{2}+2(B_{3}-B_{2})=2B_{3}-B_{2}

注意,在进行如上探索时,若在一个方向上重复见效,就会使模矢增长,

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        B_{3}-B_{2}=2(T_{20}-B_{2})=2(B_{2}-B_{1})

vi.继续上述过程。对于第i个模矢,如果

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f(T_{i0})<f(B_{i})

但沿各坐标方向的所有摄动均得不出比T_{i0}更好的点,则以T_{i0}B_{i+1},而且不把这个模矢延长。

f(T_{i0})\geqslant f(B_{i}),且由T_{i0}产生不出比B_{i}更好的点,则应退回到B_{i},并在B_{i}附近进行探索。如能得出新的下降点,即可引出新的模矢;否则,将步长缩小,以进行更精细的探查。当步长缩小到要求的精度时,即可停止迭代。

2.约束极值问题

带有约束条件的极值问题称为约束极值问题,也叫规划问题。非线性规划的一般形式为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​\left\{\begin{matrix} \min f(X),X\in R\subset E^{n}\\ R=\left \{ X|g_{j}(X)\geqslant 0 ,j=1,2,...,l\right \} \end{matrix}\right.

(1)最优性条件

考虑上述一般非线性规划,假定f(X)g_{j}(X)(j=1,2,...,l)具有一阶连续偏导数。

【定理】设X^{*}是非线性规划的一个局部极小点,目标函数f(X)X^{*}处可微,而且

  • j\in JJ为这个点所有起作用约束下标的集合),g_{j}(X)X^{*}处可微
  • j\bar{\in }Jg_{j}(X)X^{*}处连续

则在X^{*}点不存在可行下降方向,从而不存在向量D同时满足:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \triangledown f(X^{*})^{T}D<0\\ \triangledown g_{j}(X^{*})^{T}D>0 & j\in J \end{matrix}\right.

假定是非线性规划的极小点,该点可能位于可行域的内部,也可能处于可行域的边界上。若是前者,这事实上是个无约束问题,必满足条件;若是后者,情况较为复杂。

X^{*}位于第i个约束条件形成的可行域边界上,即第i个约束条件是点的起作用约束(g_{i}(X^{*})=0)。若X^{*}是极小点,则\triangledown g_{i}(X^{*})必与-\triangledown f(X^{*})在一条直线上且方向相反,因此,存在实数\gamma _{i}\geqslant 0,使

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \triangledown f(X^{*})-\gamma _{i}\triangledown g_{i}(X^{*})=0

以此类推,可以得到

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​    ​​​​​​​        \triangledown f(X^{*})-\sum_{j\in J}\gamma _{j}\triangledown g_{j}(X^{*})=0

为了把不起作用约束也包括进式中,增加条件

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \gamma _{j} g_{j}(X^{*})=0\\ \gamma _{j}\geqslant 0 \end{matrix}\right.

当时g_{j}(X^{*})=0\gamma _{j}可不为零;当g_{j}(X^{*})\neq 0时,必有\gamma _{j}=0。如此即可得到著名的库恩—塔克(简写为K-T)条件。

库恩—塔克条件是确定某点为最优点的必要条件。但一般说它并不是充分条件,因而满足这个条件的点也不一定就是最优点(对于凸规划,它既是最优点存在的必要条件,同时也是充分条件)。

X^{*}是非线性规划式的极小点,而且在X^{*}点的各起作用约束的梯度线性无关,则存在向量\Gamma ^{*}=(\gamma _{1}^{*},...,\gamma _{j}^{*})^{T},使下述条件成立:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \triangledown f(X^{*})-\sum_{j=1}^{l}\gamma _{j}^{*}\triangledown g_{j}(X^{*})=0 & \\ \gamma _{j}^{*} g_{j}(X^{*})=0 &j=1,2,...,l \\ \gamma _{j}^{*}\geqslant 0 &j=1,2,...,l \end{matrix}\right.

上述条件式常简称为K-T条件。满足这个条件的点(它当然也满足非线性规划的所有约束条件)称为库恩—塔克点(或K-T点)。

(2)二次规划

若某非线性规划的目标函数为自变量的二次函数,约束条件又全是线性的,就称这种规划为二次规划。二次规划的数学模型可表述如下:

        ​​​​​​​        \left\{\begin{matrix} \min f(X)=\sum_{j=1}^{n}c_{j}x_{j}+\frac{1}{2}\sum_{j=1}^{n}\sum_{k=1}^{n}c_{jk}x_{j}x_{k} & \\ c_{jk}=c_{kj} &k=1,2,...,n \\ \sum_{j=1}^{n}a_{ij}x_{j}+b_{i}\geqslant 0 & i=1,2,...,m\\ x_{j}\geqslant 0 & j=1,2,...,n \end{matrix}\right.

如果上式中的二次型正定(或半正定),则目标函数为严格凸函数(或凸函数);此外,二次规划的可行域为凸集,因而,上述规划属于凸规划(在极大值问题中,如果上述二次型为负定或半负定,则也属于凸规划)。凸规划的局部极值即为全局极值。对于这种问题来说,库恩—塔克条件不但是极值点存在的必要条件,而且是充分条件。

将库恩—塔克条件应用于二次规划式,并用y代替库恩—塔克条件中的\gamma,即可得到如下线性规划问题

        ​​​​​​​        \left\{\begin{matrix} \min \varphi (Z)=\sum_{j=1}^{n}z_{j} & \\ \sum_{i=1}^{m}a_{ij}y_{n+i}+y_{j}-\sum_{k=1}^{n}c_{jk}x_{k}+\textup{sgn}(c_{j})z_{j}=c_{j} &j=1,2,...,n \\ \sum_{j=1}^{n}a_{ij}x_{j}-x_{n+1}+b_{i}=0 & i=1,2,...,m\\ x_{j}\geqslant 0\;\;j=1,2,...,n+m & \\ y_{j}\geqslant 0\;\;j=1,2,...,n+m & \\ z_{j}\geqslant 0\;\;j=1,2,...,n & \end{matrix}\right.

该线性规划尚应满足

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        x_{i}y_{j}=0,\;j=1,2,...,m

这相当于说,不能使x_{i}y_{j}(对每一个j)同时为基变量。解上述线性规划,若得到最优解

        ​​​​​​​        ​​​​​​​        \left ( x_{1}^{*},x_{2}^{*},....,x_{n+m}^{*},y_{1}^{*},y_{2}^{*},...,y_{n+m}^{*},z_{1}=0,z_{2}=0,...,z_{n}=0 \right )

\left ( x_{1}^{*},x_{2}^{*},...,x_{n}^{*} \right )就是原二次规划问题的最优解。

(3)可行方向法

X^{(k)}点的起作用约束集非空,为求X^{(k)}点的可行下降方向,可由下述不等式组确定向量D

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \triangledown f(X^{(k)})^{T}D<0 & \\ \triangledown g_{i}(X^{(k)})^{T}D>0 & j\in J \end{matrix}\right.

这等价于由下面的不等式组求向量D和实数\eta

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \triangledown f(X^{(k)})^{T}D\leqslant \eta & \\ -\triangledown g_{j}(X^{(k)})^{T}D\leqslant \eta & j\in J\\ \eta <0& \end{matrix}\right.

现使\triangledown f(X^{(k)})^{T}D-\triangledown g_{j}(X^{(k)})^{T}D(对所有j\in J)的最大值极小化(必须同时限制向量D的模),即可将上述选取搜索方向的工作,转换为求解下述线性规划问题

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \min \eta & \\ \triangledown f(X^{(k)})^{T}D\leqslant \eta & \\ -\triangledown g_{j}(X^{(k)})^{T}D\leqslant \eta & j\in J(X^{(k)})\\ -1\leqslant d_{i}\leqslant 1 & i=1,2,...,n \end{matrix}\right.

式中d_{i}(i=1,2,...,n)为向量D的分量。在上式中加入最后一个限制条件,为的是使该线性规划有有限最优解;由于我们的目的在于寻找搜索方向D,只需知道D的各分量的相对大小即可。

将上述线性规划的最优解记为(D^{(k)},\eta _{k}),如果求出的\eta _{k}=0,说明求出的X^{(k)}点不存在可行下降方向,在\triangledown g_{j}(X^{(k)})(此处j\in J(X^{(k)}))线性无关的条件下,X^{(k)}为一K-T点。若解出的\eta _{k}<0,则得到可行下降方向D^{(k)},这就是我们所要的搜索方向。

上述可行方向法的迭代步骤如下:

①确定允许误差\varepsilon _{1}>0\varepsilon _{2}>0,选初始近似点X^{(0)}\in R,并令k:=0

②确定起作用的约束指标集

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        J(X^{(k)})=\left \{ j|g_{j}(X^{(k)})=0,1\leqslant j\leqslant l \right \}

i.若J(X^{(k)})=\varnothing,而且\left \| \triangledown f(X^{(k)})\right \|^{2}\leqslant \varepsilon _{1},停止迭代,得点X^{(k)}

ii.若J(X^{(k)})=\varnothing,但\left \| \triangledown f(X^{(k)})\right \|^{2}>\varepsilon _{1},则取搜索方向D^{(k)}=-\triangledown f(X^{(k)}),然后转向第⑤步。

iii.若J(X^{(k)})\neq \varnothing,转向下一步

③求解线性规划

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \min \eta & \\ \triangledown f(X^{(k)})^{T}D\leqslant \eta & \\ -\triangledown g_{j}(X^{(k)})^{T}D\leqslant \eta & j\in J(X^{(k)})\\ -1\leqslant d_{i}\leqslant 1 & i=1,2,...,n \end{matrix}\right.

设它的最优解是(D^{(k)},\eta _{k})

④检验是否满足

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left | \eta _{k} \right |\leqslant \varepsilon _{2}

若满足则停止迭代,得到点X^{(k)};否则,以D^{(k)}为搜索方向,并转下一步。

⑤解下述一维极值问题

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda _{k}:\min_{0\leqslant \lambda \leqslant \bar{\lambda }}f(X^{(k)}+\lambda D^{(k)})

此处

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \bar{\lambda }=\max\left \{ \lambda |g_{j}(X^{(k)})+\lambda D^{(k)}\geqslant 0,j=1,2,...,l \right \}

⑥令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X^{(k+1)}=X^{(k)}+\lambda _{k}D^{(k)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        k:=k+1

转回第②步

(4)制约函数法

非线性规划问题的制约函数法可将非线性规划问题的求解转化为求解一系列无约束极值问题,因而也称这种方法为序列无约束极小化技术,简记为SUMT(sequential unconstrained minimization technique)。常用的制约函数基本上有两类:一是惩罚函数(penalty function);一为障碍函数(barrier function),对应于这两种函数,SUMT有外点法和内点法。

①外点法

考虑非线性规划问题,为求其最优解,构造一个函数\psi (t)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \psi (t)=\left\{\begin{matrix} 0 & t\geqslant 0\\ \infty & t<0 \end{matrix}\right.

现把g_{j(X)}视为t,则有

  • X\in R时,                \psi (g_{j}(X))=0,j=1,2,...,l
  • X\bar{\in}R时,                  \psi (g_{j}(X))=\infty  

再构造函数

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \varphi (X)=f(X)+\sum_{j=1}^{l}\psi (g_{j}(X))

现将非线性规划问题求解转化为求解无约束问题

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \min \varphi(X)

但是,用上述方法构造的函数\psi(t)t=0处不连续,更没有导数,为此,将该函数修改为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \psi(t)=\left\{\begin{matrix} 0 &t\geqslant 0 \\ t^{2} & t<0 \end{matrix}\right.

修改后的函数\psi(t),当t=0时导数等于零,而且\psi(t)\psi^{'}(t)对任意t都连续。

  • X\in R时                         \sum_{j=1}^{l}\psi (g_{j}(X))=0
  • X\bar{\in} R时                         0<\sum_{j=1}^{l}\psi (g_{j}(X))<\infty

取一个充分大的数M>0,将\varphi (X)改为

        ​​​​​​​        ​​​​​​​        ​​​​​​​      P(X,M)=f(X)+M\sum_{j=1}^{l}\psi (g_{j}(X))

或等价于

        ​​​​​​​        ​​​​​​​        P(X,M)=f(X)+M\sum_{j=1}^{l}\left [ \min(0,g_{j}(X)) \right ]^{2}

从而可使\min P(X,M)的解X(M)为原问题的极小解或近似极小解。若求得的X(M)\in R,则它必定是原问题的极小解。

外点法的迭代步骤如下:

i.取M_{1}>0,允许误差\varepsilon >0,并令k:=1

ii.求无约束极值问题的最优解:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \min_{X\in E^{n}}P(X,M_{k})=P(X^{(k)},M_{k})

式中

        ​​​​​​​        ​​​​​​​      P(X,M_{k})=f(X)+M_{k}\sum_{j=1}^{j}\left [ \min(0,g_{j}(X)) \right ]^{2}

iii.若对某一个j(1\leqslant j\leqslant l)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        -g_{j}(X^{(k)})\geqslant \varepsilon

则取M_{k+1}>M_{k},令k:=k+1,并转向第ii步。否则,停止迭代,得

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X_{min}\approx X^{(k)}

外点法的一个重要特点,就是函数是在整个空间内进行优化,初始点可任意选择,这给计算带来了很大的方便。而且外点法也可用于非凸规划的最优化。外点法不只适用于含有不等式约束条件的非线性规划问题,对于等式约束条件或同时含有等式和不等式约束条件的问题也同样适用。

②内点法

如果要求每次迭代得到的近似解都在可行域内,以便观察目标函数值的变化情况;或者,f(X)在可行域外的性质比较复杂,甚至没有定义,这时就无法使用外点法。

仿照外点法,通过函数叠加的办法来改造原目标函数,使得改造后的目标函数(称为障碍函数)具有这样的性质:在可行域R的内部与其边界面较远的地方,障碍函数与原来的目标函数f(X)尽可能相近;而在接近R的边界面时可以有任意大的值。

因此,可将非线性规划转化为下述一系列无约束性质的极小化问题

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \min_{X\in R_{0}}\bar{P}(X<r_{k})

其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  \bar{P}(X,r_{k})=f(X)+r_{k}\sum_{j=1}^{l}\frac{1}{g_{j}(X)},(r_{k}>0)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \bar{P}(X,r_{k})=f(X)-r_{k}\sum_{j=1}^{l}\log (g_{j}(X)),(r_{k}>0)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        R_{0}=\left \{ X|g_{j}(X)>0,j=1,2,...,l \right \}

易见,在R的边界上(即至少有一个g_{j}(X)=0),\bar{P}(X,r_{k})为正无穷大。

内点法的迭代步骤如下:

i.取r_{1}>0,允许误差\varepsilon >0

ii.找出一可行内点X^{(0)}\in R_{0},并令k=1

iii.构造障碍函数,障碍项可采用倒数函数

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      \bar{P}(X,r_{k})=f(X)+r_{k}\sum_{j=1}^{l}\frac{1}{g_{j}(X)},(r_{k}>0)

也可采用对数函数

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       \bar{P}(X,r_{k})=f(X)-r_{k}\sum_{j=1}^{l}\log (g_{j}(X)),(r_{k}>0)

iv.以X^{(k-1)}\in R_{0}为初始点,对障碍函数进行无约束极小化(在R_{0}内):

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} \min_{x\in R_{0}}\bar{P}(X,r_{k})=\bar{P}(X^{(k)},r_{k})\\ X^{(k)}=X(r_{k})\in R_{0} \end{matrix}\right.

v.检验是否满足收敛准则

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        r_{k}\sum_{j=1}^{l}\frac{1}{g_{j}(X^{(k)})}\leqslant \varepsilon

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left | r_{k}\sum_{j=1}^{l}\log(g_{j}(X^{(k)})) \right |\leqslant \varepsilon

如满足上述准则,则以X^{(k)}为原问题的近似极小解X_{min};否则,取r_{k+1}<r_{k},令k:=k+1,转向第iii步继续进行迭代。

另外,根据情况,收敛准则也可采用不同的形式。

二、动态规划

在多阶段决策问题中,各阶段采取的决策,一般来说是与时间有关的。决策依赖于当前的状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的。因此,把处理问题的方法称为动态规划法。但是,一些与时间没有关系的静态规划(如线性规划、非线性规划等)问题,只要人为地引进“时间”因素,也可把它视为多阶段决策问题,用动态规划方法去处理。

1.动态规划的基本概念

(1)阶段

把所给问题的过程,恰当地分成若干个相互联系的阶段,以便能按一定的次序去求解。描述阶段的变量称为阶段变量,常用k表示。阶段的划分,一般是根据时间和空间的自然特征来划分。

(2)状态

状态表示每个阶段开始所处的自然状况或客观条件,它描述了研究问题过程的状况,又称不可控因素。描述过程状态的变量称为状态变量,用s_{k}表示。s_{k}可用一个数、一组数或意向量来描述。s_{k}取值的全体记作S_{k},称作第k阶段的状态集合。

状态的定义在动态规划中往往是最重要的概念。它必须具备3个特征:

①描述性。各阶段状态的演变能描述决策过程。

②无后效性。如果第k阶段状态给定,则在这阶段以后过程的发展不受这阶段以前各阶段状态的影响。

③可知性。各阶段状态变量的取值,直接或间接是可知的。

(3)决策

决策表示当过程处于某一阶段的某个状态时,可以作出不同的决定(或选择),从而确定下一阶段的状态,这种决定称为决策。描述决策的变量,称为决策变量。它可用一个数、一组数或一向量来描述。常用u_{k}(s_{k})表示第k阶段当状态处于s_{k}时的决策变量。它是状态变量的函数。常用D_{k}(s_{k})表示第k阶段从状态s_{k}出发的允许决策集合,显然有u_{k}(s_{k})\in D_{k}(s_{k})

(4)策略

策略是一个按顺序排列的决策组成的集合。由过程的第k阶段开始到终止状态为止的过程,称为问题的后部子过程(或称为k子过程)。由每段的决策按顺序排列组成的决策函数序列\left \{ u_{k}(s_{k}),...,u_{n}(s_{n}) \right \}称为k子过程策略,简称子策略,记为p_{k,n}(s_{k})。在实际问题中,可供选择的策略有一定的范围,此范围称为允许策略集合,用P表示。从允许策略集合中找出达到最优效果的策略称为最优策略。

(5)状态转移方程

状态转移方程是确定过程由一个状态到另一个状态的演变过程。若给定第k阶段状态变量s_{k}的值,如果该段的决策变量u_{k}一经确定,第k+1阶段的状态变量s_{k+1}的值也就完全确定。记为

                                        ​​​​​​​        s_{k+1}=T(s_{k},u_{k})

并称其为状态转移方程。

(6)权函数

在第k阶段,当状态取定s_{k}、决策取定u_{k}时,该阶段所实现的效益指标称为权函数,以\omega _{k}(s_{k},u_{k})​​​​​​​表示。\omega _{k}(s_{k},u_{k})不一定有解析式。

(7)指标函数和最优值函数

用来衡量所实现过程优劣的一种数量指标,称为指标函数。它是定义在全过程和所有后部子过程上确定的数量函数。常用V_{k,n}表示,即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        V_{k,n}=V_{k,n}(s_{k},u_{k},s_{k+1},...,s_{n+1}),k=1,2,...,n

对于要构成动态规划模型的指标函数,应具有可分离性,并满足地推关系。即V_{k,n}可以表示为s_{k},u_{k},V_{k+1,n}的函数,记为

        ​​​​​​​        ​​​​​​​        V_{k,n}(s_{k},u_{k},s_{k+1},...,s_{n+1})= \psi _{k}[s_{k},u_{k},V_{k+1,n}(s_{k+1},...,s_{n+1})]

常见的指标函数的形式如下:

①过程和它的任一子过程的指标是它所包含的各阶段的指标的和。即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        V_{k,n}(s_{k},u_{k},...,s_{n+1})=\sum_{j=k}^{n}v_{j}(s_{j},u_{j})

式中v_{j}(s_{j},u_{j})表示第j阶段的阶段指标。这时上式可写成

        ​​​​​​​        ​​​​​​​        V_{k,n}(s_{k},u_{k},...,s_{n+1})=v_{k}(s_{k},u_{k})+V_{k+1,n}(s_{k+1},u_{k+1},...,s_{n+1})

②过程和它的任一子过程的指标是它所包含的各阶段的指标的乘积。即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        V_{k,n}(s_{k},u_{k},...,s_{n+1})=\prod _{j=k}^{n}v_{j}(s_{j},u_{j})

这时就可写成

        ​​​​​​​        ​​​​​​​        V_{k,n}(s_{k},u_{k},...,s_{n+1})=v_{k}(s_{k},u_{k})V_{k+1,n}(s_{k+1},u_{k+1},...,s_{n+1})

指标函数的最优值,称为最优值函数,记为f_{k}(s_{k})。它表示从第k阶段的状态开始到第n阶段的终止状态的过程,采取最优策略所得到的指标函数值。即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{k}(s_{k})=\textup{opt}_{\left \{ u_{k},...,u_{n} \right \}}V_{k,n}(s_{k},u_{k},...,s_{n+1})

其中,opt视问题性质可取min或max。

k阶段至第n阶段可获得的效益函数为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \omega _{k}(s_{k},u_{k})\odot f_{k+1}(s_{k+1})

其中,符号\odot表示加法或乘法运算。

(8)递归方程

称下列方程为递归方程:

        ​​​​​​​     \left\{\begin{matrix} f_{N+1}(s_{N+1})=0 or 1 \\ f_{k}(s_{k})=\textup{opt}_{u_{k}\in D_{k}(s_{k})}\left \{ \omega _{k}(s_{k},u_{k})\odot f_{k+1}(s_{k+1}) \right \},k=N,N-1,...,1 \end{matrix}\right.

其中,符号opt视问题性质可取min或max,同时,当符号\odot取加法运算时,取f_{N+1}(s_{N+1})=0;当符号\odot取乘法运算时,取f_{N+1}(s_{N+1})=1。这种递推关系式称为动态规划的基本方程。

动态规划递归方程的建立是基于下述动态规划的最优化原理:

作为整个过程的最优策略具有这样的性质:无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。即,最优策略的子策略,构成最优子策略。

2.动态规划的模型

(1)动态规划的基本思想归纳

①动态规划方法的关键在于正确地写出基本的递推关系式和恰当的边界条件。要做到这一点,必须先将问题的过程分成几个相互联系的阶段,恰当地选取状态变量和决策变量及定义最优值函数,从而把一个大问题化成一组同类型的子问题,然后逐个求解。即,从边界条件开始,逐段递推寻优,在每一个子问题的求解中,均利用了它前面的子问题的最优化结果,依次进行,最后一个子问题所得的最优解,就是整个问题的最优解。

②在多阶段决策过程中,动态规划方法是既把当前一段和未来各段分开,又把当前效益和未来效益结合起来考虑的一种最优化方法。因此,每段决策的选取是从全局来考虑的,与该段的最优选择答案一般是不同的。

③在求解整个问题的最优策略时,由于初始状态是已知的。而每段的决策都是该段状态的函数,故最优策略所经过的各段状态便可逐次变换得到,从而确定了最优路线。

(2)建立动态规划模型步骤

①划分阶段,并正确地定义各阶段状态变量s_{k}使之具有描述性、无后效性和可知性3个特性,同时确定状态集合。

②定义决策变量u_{k}及每阶段的允许决策集合D_{k}(s_{k})

③确定权函数

④建立状态转移方程

⑤确定指标函数,它应该满足下列性质:

i.是定义在全过程和所有后部子过程上的数量函数。

ii.要具有可分离性,并满足地推关系

iii.函数\psi _{k}对于变量V_{k+1,n}要严格单调

⑥建立递归方程

3.动态规划的最优性原理和最优性定理

动态规划的最优性原理:“作为整个过程的最优策略具有这样的性质:即无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。”即,一个最优策略的子策略总是最优的。

【动态规划的最优性定理】设阶段数为n的多阶段决策过程,其阶段编号为k=0,1,..,n-1。允许策略p_{0,n-1}^{*}=(u_{0}^{*},u_{1}^{*},...,u_{n-1}^{*})为最优策略的充要条件是对任意一个k(0<k<n-1)s_{0}\in S_{0}

V_{0,n-1}(s_{0},p_{0,n-1}^{*})=\textup{opt}_{ p_{0,n-1}\in p_{0,k-1}(s_{0}) }\left \{ V_{0,k-1}(s_{0},p_{0,k-1})+\textup{opt}_{ p_{k,n-1}\in p_{k,n-1}(\tilde{s}_{k}) }V_{k,n-1}(\tilde{s}_{k},p_{k,n-1})\right \}

式中p_{0,n-1}^{*}=(p_{0,k-1},p_{k,n-1}),\tilde{s}_{k}=T_{k-1}(s_{k-1},u_{k-1}),它是由给定的初始状态s_{0}和子策略p_{0,k-1}所确定的k段阶段。当是效益函数时,opt取max;当V是损失函数是,opt取min。

【推论】若允许策略p_{o,n-1}^{*}是最优策略,则对任意的k(0<k<n-1),它的子策略p_{k,n-1}^{*}对于以为s_{k}^{*}=T_{k-1}(s_{k-1}^{*},u_{k-1}^{*})起点的kn-1子过程来说,必是最优策略(注意,k阶段状态s_{k}^{*}是由s_{0}p_{0,k-1}^{*}所确定的)。

4.动态规划的基本方法

(1)逆推解法

设已知初始状态为s_{1},并假定最优值函数f_{k}(s_{k})表示第k阶段的初始状态为s_{k},从k阶段到n阶段所得到的最大效益。

从第n阶段开始,则有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{n}(s_{n})=\max_{x_{n}\in D_{n}(s_{n})}v_{n}(s_{n},x_{n})

其中D_{n}(s_{n})是由状态s_{n}所确定的第n阶段的允许决策集合。解此一维极值问题,就得到最优解x_{n}=x_{n}(s_{n})和最优值f_{n}(s_{n}),要注意的是,若D_{n}(s_{n})只有一个决策,则x_{n}\in D_{n}(s_{n})就应写成x_{n}=x_{n}(s_{n})

在第n-1阶段有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{n-1}(s_{n-1})=\max_{x_{n-1}\in D_{n-1}(s_{n-1})}[v_{n-1}(s_{n-1},x_{n-1})\ast f_{n}(s_{n})]

其中s_{n}=T_{n-1}(s_{n-1},x_{n-1});解此一维极值问题,得到最优解x_{n-1}=x_{n-1}(s_{n-1})和最优值f_{n-1}(s_{n-1})

在第k阶段,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{k}(s_{k})=\max_{x_{k}\in D_{k}(s_{k})}[v_{k}(s_{k},x_{k})\ast f_{k+1}(s_{k+1})]

其中s_{k+1}=T_{k}(s_{k},x_{k});解得最优解x_{k}=x_{k}(s_{k})和最优值f_{k}(s_{k})

如此类推,直到第一阶段,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{1}(s_{1})=\max_{x_{1}\in D_{1}(s_{1})}[v_{1}(s_{1},x_{1})\ast f_{2}(s_{2})]

其中s_{2}=T_{1}(s_{1},x_{1});解得最优解x_{1}=x_{1}(s_{1})和最优值f_{1}(s_{1})

由于初始状态s_{1}已知,故x_{1}=x_{1}(s_{1})f_{1}(s_{1})是确定的,从而s_{2}=T_{1}(s_{1},x_{1})也就可确定,于是x_{2}=x_{2}(s_{2})f_{2}(s_{2})也就可确定。这样,按照上述递推过程相反的顺序推算下去,就可逐步确定出每阶段的决策和效益。

(2)顺推解法

设已知终止状态s_{n+1},并假定最优值函数f_{k}(s_{k})表示第阶段末的结束状态为s_{k},从1阶段到k阶段所得到的最大收益。但应注意,这里是在上述状态变量和决策变量的记法不变的情况下考虑的,因而此时的状态变量是上面状态变换的逆变换,记为s_{k}=T_{k}^{*}(s_{k+1},x_{k});从运算而言,即是由s_{k+1}x_{k}而确定的。顺推解法与逆推解法的符号一样,但含义是不同的,这里的s_{k}是表示k阶段末的结束状态。

从第1阶段开始,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{1}(s_{2})=\max_{x_{1}\in D_{1}(s_{2})}v_{1}(s_{2},x_{1})

其中s_{1}=T_{1}^{*}(s_{2},x_{1}),解得最优解x_{1}=x_{1}(s_{2})和最优值f_{1}(s_{2})。若D_{1}(s_{2})只有一个决策,则x_{1}\in D_{1}(s_{2})就写成x_{1}=x_{1}(s_{2})

在第2阶段,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{2}(s_{3})=\max_{x_{2}\in D_{2}(s_{})}[v_{2}(s_{3},x_{2})\ast f_{1}(s_{2})]

式中s_{2}=T_{2}^{*}(s_{3},x_{2}),解得最优解x_{2}=x_{2}(s_{3})和最优值f_{2}(x_{3})

如此类推,直到第n阶段,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        f_{n}(s_{n+1})=\max_{x_{n}\in D_{n}(s_{n+1})}[v_{n}(s_{n+1},x_{n})\ast f_{n-1}(s_{n})]

其中s_{n}=T_{n}^{*}(s_{n+1},x_{n}),解得最优解x_{n}=x_{n}(s_{n+1})和最优值f_{n}(s_{n+1})

由于终止状态s_{n+1}是已知的,故x_{n}=x_{n}(s_{n+1})f_{n}(s_{n+1})是确定的。再按计算过程的G相反顺序推算上去,就可逐步确定出每阶段的决策及效益。

三、图与网络规划

1.图的基本概念

(1)无向图

无向图——设V是一个有n个顶点的非空集合:V=\left \{ v_{1},...,v_{n} \right \}E是一个有m条无向边的集合:E=\left \{ e_{1},...,e_{m} \right \},则称VE这两个集合组成了一个无向图,记作无向图G=(V,E)E中任一条边e若连接顶点uv,则记为e=[u,v](或[v,u]),并称uv为无向边的两个端点;边e与顶点uv相关联,顶点u与顶点v相邻。

平行边——若两条不同的边ee^{'}具有相同的端点,则称ee^{'}G的平行边。

简单图——若图G无平行边,则称图G为简单图。

完备图——若图G中任两个顶点之间恰有一条边相关联,则称图G为完备图。

子图——设G=(V,E),G_{1}=(V_{1},E_{1})都是图,且V_{1}\subseteq V,E_{1}\subseteq E,则称图G_{1}为图G的子图,并记为图G_{1}\subseteq G

生成子图——若G_{1}\subseteq G,且V_{1}=V,则称图G_{1}为图G的生成子图。 

导出子图——设图G=(V,E),非空边集E_{1}\subset E,如果G中与E_{1}中诸边相关联的顶点全体记为V_{1},则子图G_{1}=(V_{1},E_{1})称为图G的由E_{1}导出的子图,记G(E_{1})=(V_{1},E_{1})=G_{1}

链——无向图G中一个由顶点和边交错而成的非空有限序列:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        Q=v_{i_{0}}e_{j_{1}}v_{i_{1}}\cdots v_{i_{s-1}}e_{j_{s}}v_{i_{s}}\cdots v_{i_{k-1}}e_{j_{k}}v_{i_{k}}

e_{j_{s}}=[v_{j_{s-1}},v_{j_{s}}](s=1,...,k),则称QG中的一条连接v_{i_{0}}v_{i_{k}}的链。在简单图中,链由它的顶点序列确定,所以简单图中的链可用其顶点表示:Q=v_{i_{0}}v_{i_{1}}...v_{i_{k}}。若e为链Q中的边,可简写为e\in Q。链Q中的边的全体记为E(Q)。若k>1,且v_{i_{0}}=v_{i_{k}},则称Q为闭链,当v_{i_{0}}\neq v_{i_{k}},称Q为开链。

初等链——若开链Q中诸顶点皆不相同,则称Q为一条初等链。

回路——若一个闭链Q,除了第一个顶点和最后一个顶点相同外,没有相同的顶点和相同的边,则该闭链Q称为回路。

连通图——若图G中任意两顶点uv之间存在一条链(称uvG内连通),则称图G为连通图。否则,称为分离图。

割边——若G为连通图,将G中边e取走后所得图为分离图,则称e为图G的割边。

次——以点v为端点的边的个数称为v的次。

【定理】图G=(V,E)中,所有的点的次之和是边树的两倍,即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sum_{v\in V}d(v)=2q

次为奇数的点,称为奇点,否侧称为偶点。

【定理】任一图中,奇点的个数为偶数。

(2)有向图

有向图——设V是一个有n个顶点的非空集合:V=\left \{ v_{1},...,v_{n} \right \}E是一个有m条有向边的集合:E=\left \{ e_{1},...,e_{m} \right \},则称VE这两个集合组成了一个有向图,记作有向图D=(V,E)。若e\in Eu为有向边e的起点,v为有向边e的终点,则记e=(u,v)

平行边——不同的有向边ee^{'}的起点与终点都相同,则称边ee^{'}为有向图D的平行边。

孤立点——V中不与E中任一条边关联的点称为D的孤立点。

简单图——无平行边的有向图称为简单图。

完备图——图中任两个顶点uv之间,恰有两条有向边(u,v),及(v,u),则称该有向图D为完备图。

基本图——把有向图D的每条边除去定向就得到一个相应的无向图G,称GD的基本图,称DG的定向图。

子图——设D=(V,E)D_{1}=(V_{1},E_{1})都是有向图,且V_{1}\subseteq V,E_{1}\subseteq E,则称D_{1}D的子图,并记为D_{1}\subseteq D

导出子图——若V_{1}\subset V,E_{1}=\left \{ e|e=(u,v)\in E,u,v\in V_{1} \right \},则称有向图D_{1}=(V_{1},E_{1})为有向图D中关于V_{1}的导出子图。

导出生成子图——若D_{1}=(V_{1},E_{1})是有向图D关于V_{1}的导出子图,则图(V,E_{1})称为D关于V_{1}的导出生成子图,记为D(V_{1})=(V,E_{1})

同构图——如果有向图D_{1}=(V_{1},E_{1})和有向图D_{2}=(V_{2},E_{2})的顶点集合V_{1}V_{2}以及边集E_{1}E_{2}之间在保持关联性质的条件下一一对应,则称图D_{1}D_{2}为同构图。

链——若Q是有向图D的基本图G中的一条链,则Q就称为D的一条链。

初等链——若Q是有向图D的基本图G中的一条初等链,则Q就称为D的一条初等链。

路——若Q是有向图D的基本图G中的一条链,且有e_{j_{s}}=(v_{i_{s-1}},v_{i_{s}})(s=1,...,k),则称QDv_{i_{0}}v_{i_{k}}的单向路,简称为路。

路径——若有向图D的路Q中每个顶点都不相同,则称QDv_{i_{0}}v_{i_{k}}的单向路径,简称路径,并称v_{i_{0}}可达v_{i_{k}}

回路——若有向图D的单向路径Q的第一个顶点与最后一个顶点相同,则称QD的单向回路,简称回路。

(3)图的矩阵表示

给无向图G=(V,E),其中V=\left \{ v_{1},...,v_{n} \right \},E=\left \{ e_{1},...,e_{m} \right \},若用矩阵的行标号i对应图G的顶点下标,用列标号j对应图G的边下标,可构造一个n×m矩阵A(G)=(a_{ij})_{n\times m}与图G对应,其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​a_{ij}=\left\{\begin{matrix} 1 & \textup{if}\; v_{i}\;\textup{is relative to}\;e_{j} \\ 0& \textup{otherwise} \end{matrix}\right.

称矩阵A为图G的关联矩阵,它描写了无向图G的顶点与边的关联情况。

若矩阵的行标号i和列标号j都对应图G顶点下标,则可以构造一个n×n矩阵B(G)=(b_{ij})_{n\times n}与图G对应,其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        b_{ij}=连接顶点v_{i}v_{j}的边的数目

并称矩阵B为图G的邻接矩阵,它描写了图G的顶点间的邻接情况。

(4)树

树——无回路且连通的无向图G称为树,树中的边称为枝。

生成树——若T是无向图G的生成子图,且T又是树,则称TG的生成树。

【定理】作为树T的定义,下列定义是等价的:

T连通且无回路; 

T无回路且有n-1条边;

T连通且有n-1条边;

T无回路,但不相邻的两个顶点之间连以以便,恰得一个回路; 

T连通,但去掉T 的任一条边,T 就不连通; 

⑥ T的任两顶点间恰有一条初等链。 

根树——给有向图T,若顶点xT中其他顶点u都恰有一条初等链,则称T为以x为根的根树。 

有向树——给有向图T,若顶点xT中其他顶点u都恰有一条路径,则称T为以x为根的有向树。

2.最短路径问题

假若,现给有向图D=(V,E),V=\left \{ v_{1},...,v_{n} \right \},设图D的每条边e=(v_{i},v_{j})都与一个实数W(e)=W(v_{i},v_[j])=\omega _{ij}对应,W(e)称为边e的权,图D称为赋权图,俗称网络。

PDuv的路径,称W(P)=\sum_{e\in P}W(e)为路径P的长度。

P^{*}Duv的路径,且有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(P^{*})=\min\{W(P)|PDuv的路径\}

则称P^{*}Duv的最短路径。

(1)狄克斯特拉算法

给有向图D=(V,E),V=\left \{ v_{1},...,v_{n} \right \},且任e\in E,有权W(e)\geqslant 0,称D为非负赋权图。

假若顶点v_{1}至顶点v_{j}的最短路径为P_{ij}^{*}=v_{1}\cdots v_{i}\cdots v_{j},其长度记为d_{1j}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        d_{1j}=W(P_{1j}^{*})

显然,P_{ij}^{*}=v_{1}\cdots v_{i}\cdots v_{j}具有性质:P_{1j}^{*}的子路v_{1}\cdots v_{i}v_{i}\cdots v_{j}分别为v_{1}v_{i}v_{i}v_{j}的最短路径。

在运算过程中,算法具有如下特点:

P_{1j}^{*}v_{1}v_{j}的最短路径,且顶点v_{i}P_{1j}^{*}上,则P_{1j}^{*}v_{1}v_{i}的子路就作为v_{1}v_{i}的最短路径(尽管Dv_{1}v_{i}还可能有其他最短路径)。从而,v_{1}至各个顶点的最短路径将组成一棵以v_{1}为根的方向树。

狄克斯特拉算法:

①取l_{1}(v_{1})=0;l(v_{j})=+\infty (j=2,...,n).d_{11}=0.v^{*}=v_{1},A=\left \{ v_{1} \right \},\bar{A}=V-A,k=1.

k=n?

若是,则算法终止。

若否,则对v\in \bar{A},取:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        l_{k+1}(v)=\min\left \{ l_{k}(v),l_{k}(v^{*})+W(v^{*},v) \right \}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​l_{k+1}(v^{*})=\min_{v\in \bar{A}}l_{k+1}(v),d(v_{1},v)=l_{k+1}(v^{*})

d(v_{1},v^{*})<+\infty?

若是,则取A=A\cup \left \{ v^{*} \right \},\bar{A}=\bar{A}-\left \{ v^{*} \right \},k=k+1,转步骤②;

若否,则Dv_{1}v(v\in \bar{A})的路径不存在,算法终止。

如果只要知道v_{1}v_{j}的最短路径长度,则当v_{j}有永久性标号时,算法就可终止。

寻求P_{1j}^{*}的逆向追踪法也可如此进行:

在算法进行过程中,每当\bar{A}中的一个顶点v的试探性标号l_{k+1}(v)=l_{k}(v^{*})+W(v^{*},v)<l_{k}(v)时,则顶点v^{*}就应记录下来。在运算表格中,可以把v^{*}的下标i记录在l_{k+1}(v)数值的右下角。若求v_{1}v_{j}的最短路径P_{1j}^{*},由v_{j}逆向追踪P_{1j}^{*}v_{j}的紧前顶点v_{s},再由v_{s}逆向追踪P_{1j}^{*}中的紧前顶点v_{k},直至回溯到顶点v_{1},串联起来,即得一条具体的最短路径P_{1j}^{*}=v_{1}\cdots v_{k}v_{s}v_{j}

(2*)弗劳德算法

设有向图D=(V,E),V=\left \{ v_{1},...,v_{n} \right \},若对任e=(v_{i},v_{j})\in E,有W(e)=W_{ij}\neq 0,则称图D为实数赋权有向图。

假定D中无负回路(若回路QW(Q)<0,则Q称为负回路),即对D中任一回路Q,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(Q)=\sum_{e\in Q}W(e)\geqslant 0

弗劳德算法是求D中任意两个顶点v_{i}v_{j}的最短路径P_{ij}^{*}及其长度d_{ij}=W(P_{ij}^{*})

给出下列记号:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        V_{ij}^{k}=\left \{ v_{i},v_{j} \right \}\cup \left \{ v_{1},v_{2},\cdots ,v_{k} \right \}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        V_{ii}^{k}=\left \{ v_{i} \right \}\cup \left \{ v_{1},v_{2},\cdots ,v_{k} \right \}

D(V_{ij}^{k})D(V_{ii}^{k})分别为D关于V_{ij}^{k}V_{ii}^{k}的导出生成子图。令P_{ij}^{k}D(V_{ij}^{k})v_{i}v_{j}的最短路径,d_{ij}^{k}为其长度。于是有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        d_{ij}^{k}=\min \left \{ d_{ij}^{k-1},d_{ik}^{k-1}+d_{kj}^{k-1} \right \},i,j=1,...,n

D(V_{ij}^{0})D(V_{ij}^{n})定义,可知:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        d_{ij}^{0}=\left\{\begin{matrix} W_{ij} & \textup{if}\;(v_{i},v_{j})\in E\\ +\infty & \textup{others} \end{matrix}\right.

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        d_{ij}^{n}=d_{ij},i,j=1,...,n

由上述分析D(V_{ij}^{k})中路径P_{ij}^{k}的特点及上式可知:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \theta _{ij}^{k}=\left\{\begin{matrix} \theta _{ij}^{k-1}, & d_{ij}^{k-1}\leqslant d_{ik}^{k-1}+d_{kj}^{k-1}\\ \theta _{kj}^{k-1},& d_{ij}^{k-1}>d_{ik}^{k-1}+d_{kj}^{k-1} \end{matrix}\right.

弗劳德算法的具体步骤如下:

①取d_{ij}^{0}=W_{ij},\theta _{ij}^{0}=i(i,j=1,...,n),k=1

②对每一组i,j(i,j=1,...,n),d_{ij}^{k-1}\leqslant d_{ik}^{k-1}+d_{kj}^{k-1},成立否?

若是,则d_{ij}^{k}=d_{ij}^{k-1},\theta _{ij}^{k}=\theta _{ij}^{k-1}

若否,则d_{ij}^{k}=d_{ik}^{k-1}+d_{kj}^{k-1},\theta _{ij}^{k}=\theta _{kj}^{k-1}

d_{ii}^{k}=0i=1,...,n都成立否?

若是,则转步骤④;

若否,则转步骤⑤。

k=n?

若是,则取d_{ij}=d_{ij}^{n}(i,j=1,...,n)。由矩阵\theta ^{n}=(\theta _{ij}^{n}) _{n\times n}的信息,应用逆向追踪法求得Dv_{i}v_{j}的最短路径P_{ij}^{*}(i,j=1,...,n),算法终止(若d_{ij}=+\infty,说明Dv_{i}v_{j}不存在路径);

若否,则取k=k+1,转步骤②。

⑤若d_{ii}^{k}<0D中存在一条含有顶点v_{i}的负回路,则由\theta ^{k}=(\theta _{ij}^{k}) _{n\times n}的信息,应用逆向追踪法求出此回路Q,算法终止。

3.最长路径问题

给实数赋权有向图D=(V,E),其中V=\left \{ v_{1},...,v_{n} \right \},对任e=(v_{i},v_{j}\in E),有W(e)= \omega _{ij}\neq 0​​​​​​​。现设D中无正回路。即若QD的一个回路,则必有W(Q)=\sum_{e\in Q}W(e)\leqslant 0

又不妨设D为完备图:若D中有平行边,则保留权最大的边;若D中不存在顶点u至顶点v的有向边,则在E中增加有向边(u,v),且W(u,v)=-\infty。 

P^{*}Duv的一条路径,且有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(P^{*})=\max \{W(P)|PDuv的路径\}

则称P^{*}uv的最长路径。

由于D中无正回路,则Duv的最长路径具有下列性质:

  1. uv的最长路径至多含有n个点,从而至多含有n-1条边;
  2. uv的最长路径P^{*}=u\cdots t\cdots v,则子路u\cdots tt\cdots v分别为uttv的最长路径。

本算法求v_{1}至顶点v_{j}(j=1,...,n)的最长路径P_{1j}^{*},其长度记为h_{1j}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        h_{1j}=W(P_{1j}^{*})

算法采用标号方法。由于迭代过程中标号方法的固有特点,我们时在v_{1}v_{j}的路中寻找v_{1}v_{j}的最长路径P_{1j}^{*}

若在v_{1}v_{j}包含边数不超过k的所有的路中,最长路的长度用h_{1j}^{*}表示,即

        ​​​​​​​        ​​​​​​​        h_{1j}^{*}=\max\{W(P)|Pv_{1}v_{j}的路,|E(P)\leqslant k\}

由此定义,下列两式显然成立:

        ​​​​​​​        ​​​​​​​        h_{1j}^{k+1}=\max\left \{ h_{1i}^{k}+\omega _{ij}|i=1,...,n \right \},j=1,...,n

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        h_{1j}^{k+1}\geqslant h_{1j}^{k},j=1,...,n

【定理】若h_{1j}^{k+1}=h_{1j}^{k}j=1,...,n都成立,则v_{1}v_{j}的最长路径长度h_{1j}=h_{1j}^{k}(j=1,...,n)

最长路径算法的具体步骤如下:

①取h_{11}^{0}=0,h_{1j}^{0}=-\infty(j=2,...,n),k=0

k+1为奇数否?

若是,则按j=1,...,n的顺序,取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ h_{1j}^{k+1}=\max\left \{ h_{1i}^{k+1}+\omega _{ij},1\leqslant i <j ;h_{1j}^{k}\right \}

若否,则按j=n,...,1的顺序,取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        h_{1j}^{k+1}=\max\left \{h_{1j}^{k}; h_{1i}^{k+1}+\omega _{ij},j<i\leqslant n \right \}

h_{1j}^{k+1}=h_{1j}^{k}j=1,...,n都成立否?

若是,则h_{1j}=h_{1j}^{k}(j=1,...,n),用逆向追踪法求v_{1}v_{j}的最长路径P_{1j}^{*},算法终止;

若否,则转步骤④。

k+1=n?

若是,则D中存在正回路,算法终止;

若否,则k=k+1,转步骤②。

算法运行结束,我们用逆向追踪法来求v_{1}v_{j}的最长路径P_{1j}^{*}

4*.第k短路径问题

先给非负赋权有向图D=(V,E),其中V=\left \{ v_{1},...,v_{n} \right \},任e\in E,有权W(e)\geqslant 0

k短路径——若P^{1},P^{2},...,P^{k}为顶点v_{1}至顶点vk条路径,W(P^{1})\leqslant W(P^{2})\leqslant\cdots\leqslant W(P^{k}),现P为顶点v_{1}至顶点v的任一条路径P\bar{\in}\left \{ P^{1},...,P^{k} \right \},且W(P)\geqslant W(P^{k}),则称P^{k}为顶点v_{1}至顶点v的第k短路径。

偏移——若有路径

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P=v_{1}u_{1}u_{2}\cdots u_{j}u_{j+1}\cdots u_{q}v

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     Q=v_{1}u_{1}u_{2}\cdots u_{j}t\cdots v

其中(u_{j},t)\neq (u_{j},u_{j+1})(特殊情况,u_{j}=v_{1}),且有W(P)\leqslant W(Q),则称QP的偏移。

若已取得顶点v_{1}至顶点v的第1至第k短路径P^{1},...,P^{k},作

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      P^{k}=v_{1}u_{1}\cdots u_{j}\cdots u_{q}v

的部分偏移集合F(P^{k})

eD中边,PD中路径,则D-\left \{ e \right \}为将D中边e取走所得图:而D-P为将D中属于P的边都取走后所得图。

        ​​​​​​​        ​​​​​​​        D_{0}=D-\{(v_{1},u)|(v_{1},u)为某一条第i短路径P^{i}的边,1\leqslant i\leqslant k\}

D_{0}v_{1}v的最短路径Q_{0}。显然Q_{0}\left \{ P^{1},...,P^{k} \right \}中任一路径的偏移。

一般地,令

        D_{j}=D-v_{1}u_{1}\cdots u_{j}-\{(u_{j},u)|v_{1}u_{1}\cdots u_{j}u为某一条第i短路径P^{i}的子路,1\leqslant i\leqslant k\}

D_{j}中顶点u_{j}v的最短路径\tilde{Q}_{j},并将路径v_{1}u_{1}\cdots u_{j}与路径\tilde{Q}_{j}相衔接,得路Q_{j}

Q_{j}中顶点都不相同,则Q_{j}\left \{ P^{1},...,P^{k} \right \}中任一路径的偏移,记

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        F(P^{k})=\left \{ Q_{0},Q_{1},\cdots Q_{q} \right \}

自然,对任一Q\in F(P^{k}),有W(Q)\geqslant W(P^{k})

算法的迭代过程可如下进行:

若以求得顶点v_{1}v的最短路径P^{1}P^{1}的部分偏移集合F(P^{1}),记

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      B=F(P^{1})

\tilde{P}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​    W(\tilde{P})=\min\left \{ W(Q)|Q\in B \right \}

此时,还未确定的从v_{1}v的任一路径P必为集合B中某一路径Q的偏移,从而有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​ W(P)\geqslant W(Q)\geqslant W(\tilde{P})

于是,路径\tilde{P}为第2短路径P^{2}

从集合B中去掉\tilde{P},再作F(P^{2}),并取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       B=B\cup F(P^{2})

显然,还未确定过的顶点v_{1}v的任一路径PB中某一条路径Q的偏移。取\tilde{P}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      W(\tilde{P})=\min\left \{ W(Q)| Q\in B\right \}

\tilde{P}D中顶点v_{1}v的第3短路径P^{3}。从集合B中去掉\tilde{P},作集合F(P^{3}),取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        B=B\cup F(P^{3}) 

如此继续迭代下去,直至求得所需要的的顶点v_{1}v的第k短路径。

下面给出v_{1}v的第k^{*}短路径算法:

①取一条v_{1}v的最短路径P^{1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        A=\left \{ P^{1} \right \},B=\varnothing ,k=1

②对P^{k}F(P^{k})

P^{k}=v_{1}v,令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        D_{0}=D-\{(v_{1},u)|(v_{1},u)为某一条路径P中的边,P\in A\}

D_{0}中顶点v_{1}v的最短路径Q_{0}F(P^{k})=\left \{ Q_{0} \right \},转步骤④;

P^{k}=v_{1}u_{1}\cdots u_{j}\cdots u_{q}v,令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        D_{0}=D-\{(v_{1},u)|(v_{1},u)为某一条路径P的边,P\in A\}

D_{0}中顶点v_{1}v的最短路径Q_{0}F(P^{k})=\left | Q_{0} \right |,j=0,转步骤③。

j=q?

若是,则转步骤④;

若否,则令

        D_{j+1}=D-v_{1}u_{1}\cdots u_{j+1}-\{(u_{j+1},u)|v_{1}u_{1}\cdots u_{j+1}u为某一路径中的子路,P\in A\}

D_{j+1}u_{j+1}v的最短路径\tilde{Q}_{j+1}。路径v_{1}u_{1}\cdots u_{j+1}\tilde{Q}_{j+1}路径相衔接,得路Q_{j+1}Q_{j+1}中有相同顶点时,j=j+1,转步骤③;

Q_{j+1}中顶点都不相同时,F(P^{k})=F(P^{k})\cup \left \{ Q_{j+1} \right \},j+1=j,转步骤③。

B=B\cup F(P^{k})

B=\varnothing ?

若是,则算法终止(v_{1}v的路径搜索完毕)。

若否,则取W(\tilde{P})=\min\left \{ W(P)|P\in B \right \}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        P^{k+1}=\tilde{P},A=A\cup \left \{ P^{k+1} \right \},B=B-\left \{ P^{k+1} \right \}

转步骤⑥。

k+1=k^{*}?

若是,则算法终止,路径P^{k+1}为所求第k^{*}最短路径。

若否,则k=k+1,转步骤②。

5.最小生成树

若给连通赋权无向图G=(V,E)(不妨设G为简单图),其中V=\left \{ v_{1},...,v_{n} \right \},E=\left \{ e_{1},...,e_{m} \right \}

TG的生成树,T中边e就记为e\in T,则树T的权

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(T)=\sum_{e\in T}W(e)

最小生成树——若T^{*}G的生成树,且有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(T^{*})=\min\{W(T)|TG的一棵生成树\}

则称T^{*}G的最小生成树。

(1)破回路法

破回路法的基本步骤是:任取G中一个回路,删除权最大的边(若有两条以上权最大的边,则删除其中任一条边即可)。按此方法反复进行,直至无回路为止。余下的边的集合E_{1}的导出子图,即为G的最小生成树T^{*}

(2)克鲁斯卡算法

由定理知,生成树应无回路且边数为n-1。克鲁斯卡算法根据“在无回路的条件下优先选取权小的边”这一原则,从Gm条边中逐个挑选出n-1条边来。运算过程中,记被挑选的边的集合为E_{1}

下面给出克鲁斯卡算法:

①将Gm条边按权的递增顺序进行排列。现不妨设

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   W(e_{1})\leqslant W(e_{2})\leqslant ...\leqslant W(e_{m})

E_{1}=\varnothing ,l(v_{j})=j(j=1,...,n),k=1.

e_{k}的端点uv的标号l(u)l(v)相等否?

若是,则k=k+1,转步骤②。

若否,则E_{1}=E_{1}\cup \left \{ e_{k} \right \}

③对V中顶点v_{j},若l(v_{j})=\max\left \{ l(u),l(v) \right \},则取

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        l(v_{j})=\min\left \{ l(u),l(v) \right \}

E_{1}中边数\left \{ E_{1} \right \}=n-1?

若是,则G关于E_{1}的导出子图即为最小生成树T^{*},算法终止。

若否,则取k=k+1,转步骤②。

6*.中国邮路问题

(1)欧拉环游问题

欧拉链——若无向图G为连通图,QG的一条链,G的每一条边在Q中恰出现一侧,则称Q为欧拉链。

欧拉环游——闭的欧拉链称为欧拉环游。

欧拉图——若无向图G含有一条欧拉环游,则称图G为欧拉图。

顶点阶数——无向图G中与顶点v关联的边数称为顶点的阶数,记作\delta (v)。若\delta (v)为偶数,则称v为偶阶结点;若\delta (v)为奇数,则称v为奇阶顶点。

【定理】若无向图G=(V,E)n个顶点及m条边,则

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sum_{v\in V}\delta (v)=2m

【定理】任一无向图G中奇阶顶点的个数必为偶数。

【定理】⑴连通无向图G为欧拉图的充要条件为G中无奇阶顶点。

              ⑵连通无向图G含有欧拉开链的充要条件为G中奇阶顶点个数为2。

下面给出求欧拉环游的弗鲁瑞算法:

①任取欧拉图G中一个顶点v_{i_{0}},Q_{0}=v_{0},E=\varnothing ,k=0

k=m?

若是,则算法终止,Q_{k}即为所求的欧拉环游。

若否,则在G_{k}=G-E中选取v_{i_{k}}的关联边为e_{j_{k+1}}:除非G_{k}中仅有一条边与v_{i_{k}}关联,否则总不取G_{k}的割边为e_{j_{k+1}}。若e_{j_{k+1}}=[v_{i_{k}},v_{i_{k+1}}],令Q_{k+1}=Q_{k}e_{j_{k+1}}v_{i_{k+1}},E=E\cup \left \{ e_{j_{k+1}} \right \},k=k+1,转步骤②。

(2)中国邮路问题

“一个邮递员每次送信,从邮局出发,必须至少一次地走过他负责投递的范围的每一条街道,待完成任务后仍回到邮局。问他如何选择一条投递路线,使他所走的路程最短?”

若邮递员管辖的街道图视为无向图G=(V,E),任e=[v_{i},v_{j}]\in E,W(e)=W(v_{i},v_{j})=\omega _{ij}为街道e的长度,则中国邮路问题也就是:

在图G中寻找一条闭链Q^{*},使这条闭链Q^{*}的总长度最短,即

        ​​​​​​​        W(Q^{*})=\min \{W(Q)|QG中一条包含G全部边的闭链\}

若图G为欧拉图,则求G的欧拉环游即为最佳投递路线Q^{*}

但是一般情况下,图G不是欧拉图,它具有偶数个奇阶顶点。

此时,设Q为一条包含G的全部边的闭链,其中部分边重复出现,作相应的图G_{Q}

若边e=[u,v]Q中出现k+1次,则我们就在图G中添加k[u,v]e^{1},e^{2},...,e^{k}(称为添加边),且令每条添加边的权和原来边的权相等。于是,G_{Q}没有奇阶顶点,G_{Q}为欧拉图,Q就是G_{Q}中的欧拉环游。

【定理】若添加边集合F为一个可行解,则F为最优解的充分必要条件为

  1. F中无平行边。
  2. CG任一回路,则该回路的具有添加边的边集C_{1}的总长度W(C_{1})\leqslant \frac{1}{2}W(C),其中                                          C_{1}=\{e|e\in C,e有相应的添加边e^{'}\in F\}

下面将求最短投递线路的奇偶点图上作业法归纳如下:

①把G2q个奇阶顶点分成q对,每对顶点间取一条初等链,该q条初等链中边的全体取为初始可行解F

F中是否有平行边?

若是,则删除偶数条平行边,转步骤③。

若否,则转步骤③。

③对任一回路CC_{1}=\{e|e\in C,e有相应的添加边e^{'}\in F\}所给C_{1}W(C_{1})\leqslant \frac{1}{2}W(C)是否成立?

若是,则F即为最优解。在G_{Q}中运用欧拉环游算法求得欧拉环游Q,即为最短投递线路。

若否,则将C_{1}F中相应的添加边换成C_{2}=C-C_{1}相应的添加边,转步骤③。

7.运输网络

(1)运输网络与流

运输网络——给有向图N=(V,E),若对任一边e\in E,有相应的一个非负整数C(e),且已取定V的两个非空子集XY,X\cap Y=\varnothing,则称N=(V,E,C,X,Y)为一个运输网络。X中顶点x称为N的源,Y中顶点y称为的汇,I=V-(X\cup Y)中顶点称为中间顶点,C(e)称为边e的容量。

f(e)为一个以E为定义域、取值为非负整数的函数,又记f^{+}(v)为以v点(v\in V)为起点的所有有向边(v点的输出边)的相应函数值之和,f^{-}(v)为以v点为终点的所有有向边(v点的输入边)的相应函数值之和。

网络流——若对于网络N,其上非负整数函数f(e)满足以下两条件:

  1. 0\leqslant f(e)\leqslant C(e), e\in E
  2. f^{+}(v)=f^{-}(v), v\in I

则称fN上一个网络流,简称流。并称f(e)为流fe边上的流量。称条件1为容量约束条件,称条件2为守恒条件(直观上说,在每一个中间点v上,v的流入量之和等于v流出量之和,中间点的流量是守恒的)。显然,任一运输网络N,至少存在一个流:f(e)\equiv 0,e \in E,称它为零流。

流值Valf——称f^{+}(x)为流fN上的流值,记为Valf。显然,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Valf=f^{+}(x)=f^{-}(x)

(2)割、最小割和最大流

割——对于运输网络N=(V,E,C,x,y),若SV的一个子集,\bar{S}=V-S,x\in S,y\in \bar{S},则称边集

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        K=(S,\bar{S})=\left \{ e|e=(u,v),u\in S,v\in \bar{S} \right \}

为网络N的一个割,并称

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      C(S,\bar{S})=\sum_{e\in K}C(e)

为割(S,\bar{S})的容量。

最大流——若f^{*}为网络N上流值最大的流,即

Valf^{*}=\max \{ Valf|fN上流\}

则称f^{*}N的最大流。

最小割——若(S^{*},\bar{S}^{*})为容量最小的割,即C(S^{*},\bar{S}^{*})=\min\{C(S,\bar{S})|(S,\bar{S})N的一个割\}

则称割(S^{*},\bar{S}^{*})N的最小割。

fN上一个流,对任e\in E,若f(e)=C(e),则称边e为饱和边;若f(e)<C(e),则称边ef不饱和边;若f(e)>0,则称边ef正边;若f(e)=0,则称边e为零边。

【定理】设f(S,\bar{S})分别为网络N的流和割,那么

  1. Valf\leqslant C(S,\bar{S})
  2. Valf=C(S,\bar{S}),则f(S,\bar{S})分别为N的最大流和最小割;
  3. Valf=C(S,\bar{S})的充要条件为:任e\in (S,\bar{S}),边ef饱和边;任e\in(S,\bar{S}),边ef零边。

8.最大流

(1)增流链

Q=x\cdots uv\cdots tN的一条初等链。

N中有uv的有向边(u,v),则称边(u,v)Q的前向边;

N中有vu的有向边(v,u),则称边(v,u)Q的后向边。

fN上流,对e\in Q,令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        l(e)=\left\{\begin{matrix} C(e)-f(e) & \textup{if}\;e\;\textup{is a forward egde of}\;Q\\ f(e) & \textup{if}\;e\;\textup{is a backward egde of}\;Q \end{matrix}\right.

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        l(Q)=\min \left \{ l(e)|e\in Q \right \}

l(Q)=0,称Qf饱和链;当l(Q)>0,称Qf不饱和链。

f增流链——一条从源x至汇y的不饱和链,称为f增流链。

若网络N中存在一条增流链Q,我们可得N上一个新流\hat{f}

        ​​​​​​​        ​​​​​​​        ​​​​​​​   \hat{f}(e)=\left\{\begin{matrix} f(e)+l(Q) & \textup{if}\;e\;\textup{is a forward egde of}\;Q\\ f(e)-l(Q) & \textup{if}\;e\;\textup{is a backward egde of}\;Q \\ f(e) & \textup{others} \end{matrix}\right.

此时,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Val\hat{f}=Valf+l(Q)

\hat{f}f基于Q的修改流。

【定理】若f为运输网络N上流,则

  1. fN上最大流的充要条件为N中不存在f增流链。
  2. f为最大流,则其流值等于最小割的容量。

(2)最大流算法

f为网络N的一个流,N中满足下列条件的树T称为以x为根的f不饱和树:

  1. x\in V(T)
  2. v\in V(T) ,v\neq xT内有唯一的一条初等链Q=x\cdots vf不饱和链,l(Q)>0

每个点v\in V(T),都按下述方法给以标记:

Txv的初等链为Q=x\cdots uv

  1. 如果(u,v)N中边,则给v以标号(u,+,l(v)),其中第一个标号u表明在链Q_{v}uv的紧前顶点;第二个标号表明(u,v)Q_{v}中为前向边;第三个标号l(v)=l(Q_{v})。显然,有                                                    l(v)=\min\left \{ l(u),C(u,v)-f(u,v) \right \}
  2. 如果(v,u)N中边,则给v以标号(u,-,l(v)),其中第一个标号u表明在链Q_{v}uv的紧前顶点,第二个标号表明(v,u)Q_{v}中为后向边,第三个标号l(v)=l(Q_{v})。显然,有                                                          l(v)=\min \left \{ l(u),f(u,v) \right \}

下面给出求N中流值为指导值\lambda的流f的算法(若要求N的最大流,则只要在这一算法中将事先给定的数值\lambda取为+\infty即可):

①取N的一个初始流f(假如零流),计算Valf

Valf=\lambda ?

若是,则f即为所求之流,算法终止;

若否,则给x以标号l(x)=\infty ,S=\left \{ x \right \},\bar{S}=V-S,A=\left \{ x \right \}

A=\varnothing ?

若是,则N中无f增流链,f即为最大流,算法终止;

若否,则取A中第一元素u,作

        ​​​​​​​        ​​​​​​​        ​​​​​​​        M^{+}(u)=\left \{ v|\exists e=(u,v)\in E,v\in\bar{S},f(e)<C(e) \right \}

M^{+}(u)=\varnothing ?

若是,则取M^{-}(u)=\left \{ v|\exists e=(v,u)\in E,v\in\bar{S},f(e)>0 \right \},转步骤⑤;

若否,则转步骤⑥。

M^{-}(u)=\varnothing ?

若是,则A=A-\left \{ u \right \},转步骤③;

若否:对M^{-}(u)中点v都给以标号(u,-,l(v)),其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        l(v)=\min\left \{ l(u),f(v,u) \right \}

        ​​​​​​​        ​​​​​​​    S=S\cup M^{-}(u),\bar{S}=\bar{S}-M^{-}(u),A=A-\left \{ u \right \}\cup M^{-}(u)

M^{-}(u)中点按标号的先后给以顺序),转步骤③。

y\in M^{+}(u)?

若是:给y以标号(u,+,l(v)),其中l(y)=\min\left \{ l(u),C(u,y)-f(u,y) \right \},运用逆向追踪法求得Nxyf增流链Q_{y}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \delta =\min\left \{l(y),\lambda -Valf \right \}

令        ​​​​​​​        ​​​​​​​        \hat{f}(e)=\left\{\begin{matrix} f(e)+\delta &e=(u,v)\in E,(u,v)\in Q\\ f(e)-\delta & e=(v,u)\in E,(v,u)\in Q \\ f(e) & \textup{others} \end{matrix}\right.

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Val\hat{f}=Valf+\delta ,f=\hat{f}

转步骤②。

若否:对M^{+}(u)中顶点v都给以标号(u,+,l(v)),其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        l(v)=\min\left \{ l(u),C(u,v)-f(u,v) \right \}

        ​​​​​​​        ​​​​​​​        S=S\cup M^{+}(u),\bar{S}=\bar{S}-M^{+}(u),A=A\cup M^{+}(u)

M^{+}(u)中点按标号的先后给以顺序)。按

        ​​​​​​​        ​​​​​​​        ​​​​​​​        M^{-}(u)=\left \{ v|\exists e=(v,u)\in E,v\in\bar{S},f(e)>0 \right \}

取,转步骤⑤。

若运用上述算法求N的最大流,则算法终止时的顶点集合S\bar{S}对应的割(S,\bar{S}),即为最小割。

9.最小代价流问题

fN上一个流,Valf=\lambda,则

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(f)=\sum_{e\in E}W(e)f(e)

表示N内按照网络流f运送流量\lambda个单位从源x到汇y所花的代价,称W(f)为流f的代价。

最小代价流——设N为带代价的网络,f^{*}N上流,若Valf^{*}=\lambda,且有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(f^{*})=\min\{W(f)|fN上流,Valf=\lambda \}

则称f^{*}N上一个流值为\lambda的最小代价流。

最小代价的最大流——若\lambdaN上最大流的流值,则称满足

        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(f^{*})=\min\{W(f)|fN上流,Valf=\lambda \}

的流f^{*}为最小代价的最大流。

(1)伴随f的增流网络

f为带代价的运输网络N=(V,E,C,W,x,y)上一个网络流,现构造一个伴随f的增流网络N_{f}=(V_{f},E_{f},C^{'},W^{'},x,y)如下:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        V_{f}=V(N)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        E_{f}=E_{f}^{+}\cup E_{f}^{-}

其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        E_{f}^{+}=\left \{ (u,v)|(u,v)\in E(N),f(u,v)<C(u,v) \right \}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        E_{f}^{-}=\left \{ (u,v)|(v,u)\in E(N),f(u,v)>0 \right \}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        C^{'}(u,v)=\left\{\begin{matrix} C(u,v)-f(u,v) & (u,v)\in E_{f}^{+}\\ f(v,u) & (u,v)\in E_{f}^{-} \end{matrix}\right.

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W^{'}(u,v)=\left\{\begin{matrix} W(u,v) & (u,v)\in E_{f}^{+}\\ -W(v,u) & (u,v)\in E_{f}^{-} \end{matrix}\right.

E_{f}^{+}中的边为正规边,E_{f}^{-}中的边为非正规边。

f为带代价的网络N=(V,E,C,W,x,y)上的流,其伴随f的增流网络为N_{f}。若PN_{f}中一条xy的路径,令C^{'}(P)P中各边容量之最小值,即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        C^{'}(P)=\min\{C^{'}(e)|eP中有向边\}

则称C^{'}(P)为路径P的容量。

若取\delta为一个不超过C^{'}(P)的正整数,作N上流\hat{f}(可以验证如下取法的\hat{f}为流):

        ​​​​​​​        \hat{f}(e)=\left\{\begin{matrix} f(u,v)+\delta &(u,v)\in E\;\textup{and}\;(u,v) \in P\cap E_{f}^{+}\\ f(u,v)-\delta & (u,v)\in E\;\textup{and}\;(v,u) \in P\cap E_{f}^{-} \\ f(u,v) & \textup{others} \end{matrix}\right.

则称\hat{f}为关于P,\delta的修改流。可知

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Val\hat{f}=Valf+\delta

QN_{f}中一个回路,令C^{'}(Q)Q中各边容量之最小值,即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        C^{'}(P)=\min\{C^{'}(e)|eQ有向边\}

C^{'}(Q)为回路Q的容量。

若取\delta为一个不超过C^{'}(Q)的正整数,作N上流\title{f}\tilde{f}(可以验证如下取法的\tilde{f}为流):

        ​​​​​​​        \tilde{f}(e)=\left\{\begin{matrix} f(u,v)+\delta &(u,v)\in E\;\textup{and}\;(u,v) \in Q\cap E_{f}^{+}\\ f(u,v)-\delta & (u,v)\in E\;\textup{and}\;(v,u) \in Q\cap E_{f}^{-} \\ f(u,v) & \textup{others} \end{matrix}\right.

\tilde{f}f关于Q,\delta的修改流。容易验证:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Val \tilde{f}=Valf

W^{'}(Q)=\sum_{e\in Q}W^{'}(e),则不难知道有如下结论:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W(\tilde{f})=W(f)+\delta W^{'}(Q)

【定理】设f为网络N上流,Valf=\lambda,则

  1. fN中流值为\lambda的最小代价流的充分必要条件为:在N_{f}中不存在负回路。
  2. 如果fN中流值为\lambda的最小代价流,PN_{f}中一条从xy的最短路径,\delta为任一不超过C^{'}(P)的正整数,则f关于P,\delta的修改流\tilde{f}N中流值为\lambda +\delta的最小代价流。
  3. fN中最大流的充分必要条件为:N_{f}中不含一条从源x到汇y的路径。

(2)最小代价流算法

下面给出在中寻找流值为的最小代价流的两个算法:

求流值为的最小代价流算法一:

①在N中任取一个流值为\lambda的流f

②作N_{f}=(V_{f},E_{f},C^{'},W^{'},x,y)

③在N_{f}中是否存在一个负回路Q

若是,则取\delta =C^{'}(Q),作f关于Q,\delta的修改流\tilde{f},取f=\tilde{f},转步骤②;

若否,则f即为所求的最小代价流,算法终止。

求流值为的最小代价流算法二:

①取初始流f为零流。

Valf=\lambda ?

若是,则f即为N中流值为\lambda的最小代价流,算法终止;

若否,则作N_{f}=(V_{f},E_{f},C^{'},W^{'},x,y)

N_{f}中是否存在一条xy路径?

若是,则求N_{f}中一条xy的最短路径P。取\delta =\min\left \{ C^{'}(P),\lambda -Valf \right \},作f基于P,\delta的修改流\hat{f}Val\hat{f}=Valf+\delta,取f=\hat{f},转步骤②;

若否,则N中不存在流值为\lambda的流,fN中最小代价的最大流,算法终止。

如果要求N上的最小代价的最大流,则在应用上述算法时取\lambda =+\infty即可。

四、网络计划技术 

1.网络计划图

(1)基本术语

网络计划图是在网络图上标注时标和时间参数的进度计划图,实质上是有时序的有向赋权图。表述关键路线法(CPM)和计划评审技术(PERT)的网络计划图没有本质的区别,它们的结构和术语是一样的。仅前者的时间参数是确定型的,而后者的时间参数是不确定型的。

网络计划技术在实施时,主要是分4个步骤:第一步编制网络图,第二步确定问题各项活动的持续时间,第三步决定关键路线,第四步结合资源费用等因素制定工程的最优日程进度。

给出一套同一的术语和符号:

①节点、箭线是网络计划图的基本组成元素。箭线是一线段带箭头的实射线和虚射线,节点是箭线两端的连接点。

②工作(也称工序、活动、作业),将整个项目按需要粗细程度分解成若干需要耗费时间或需要耗费其他资源的子项目或单元。它们是网络计划图的基本组成部分。

③描述工程项目网络计划图有两种表达方式:双代号网络计划图和单代号网络计划图。双代号网络计划图在计算时间参数时又可分为工作计算法和节点计算法。

④双代号网络计划图。在双代号网络计划图中,用箭线表示工作,箭尾的节点表示工作的开始点,箭头的节点表示工作的完成点。

箭线之间的连接顺序表示工作之间的先后开工逻辑,

⑤单代号网络计划图。用节点表示工作,箭线表示工作之间的先后关系为逻辑关系。在节点中标记必需的信息。

(2)双代号网络计划图

①网络计划图的方向、时序和节点编号

网络计划图是有向、有序的赋权图,按项目的工作流程自左向右地绘制。在时序上反映完成后各项工作的先后顺序。在网络图中只能有一个起始节点,表示工程醒项目的开始。一个终点节点,表示工程项目的完成。

②紧前工作和紧后工作

紧前工作是指在本工作之前的工作,且开始或完成后,才能开始本工作。紧后工作是指紧排在本工作之后的工作,且本工作开始或完成后,才能做的工作。

③虚工作

在双代号网络计划图中,只表示相邻工作之间的逻辑关系,不占用时间和不消耗人力、资金等的虚设工作。

④相邻两节点之间只能有一条箭线连接,否则将造成逻辑上的混乱。

⑤网络计划图中不能有缺口和回路

在网络计划图中严禁出现从一个节点出发,顺箭线方向又回到原出发节点,形成回路。回路将表示这工作永远不能完成。

⑥平行工作:可与本工作同时进行的工作。

⑦起始节点与终点节点

在网络计划图中只能有一个起始节点和一个终点节点。当工程开始或完成时存在几个平行工作时,可以用虚工作将它们与起始节点或终点节点连接起来。

⑧线路

网络图中起点节点沿箭线方向顺序通过一系列箭线与节点,最后到达终点节点的通路。从网络图中可以计算处各线路的持续时间。其中有一条线路的持续时间最长线路是关键路线,或称为主要矛盾线。关键路线上的个工作日为关键工作。

⑨网络计划图的布局

尽可能将关键路线布置在网络计划图的中心位置,按工作的先后顺序将联系紧密的工作布置在邻近的位置。

⑩网络计划图的类型

i.总网络计划图。

ii.分级网络计划图。

iii.局部网络计划图。

(3)PERT网络图的时间参数和关键路径

对于网络图中任一个事项k引进第一个时间参数:

事项k的最早时间t_{E}(k)——从顶点1到顶点k的最长路径长度称为事项k的最早时间,记为t_{E}(k)

t_{E}(k)的实际意义是指:以事项k为地点的工序必须等它的紧前工序都完工后才能开工,它们的预期最早执行时间在整个工程开工t_{E}(k)天后(即在第t_{E}(k)+1天)。

工序(i,k)是以k为终点的工序之一(根据编号原则,有i<k),\omega _{ik}为工序(i,k)之长度,t_{E}(i)为顶点1至顶点i的最长路径长度,不难的达到下列递推公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} t_{E}(1)=0\\ t_{E}(k)=\max\left \{ t_{E}(i)+\omega _{ik}|i<k,(i,k)\in E \right \} \end{matrix}\right.

总工期——事项n的最早时间t_{E}(n)称为工程的总工期,记作T_{E}

T_{E}表示整个工程从开工到完工所需的最少时间。

事项k的最迟时间t_{L}(k)——总工期T_{E}与顶点k至顶点n的最长路径长度之差称为事项k的最迟时间,记为t_{L}(k)

t_{L}(k)的实际意义是指:在不误总工期T_{E}的前提下,以事项k为开工事项的工序最迟应在整个工程开工天t_{L}(k)后执行。也即以事项k为完工事项的工序最迟完工的时间为第t_{L}(k)天。

 工序(k,i)是以k为起点的工序之一,T_{E}-t_{L}(i)为顶点i到顶点n的最长路径长度。可得下列递推公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} t_{L}(n)=T_{E}\\ t_{L}(k)=T_{E}-\max\left \{ T_{E}-t_{L}(i)+\omega _{ki}|i>k ,(k,i)\in E\right \} \end{matrix}\right.

并可化为下列形式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} t_{L}(n)=T_{E}\\ t_{L}(k)=\min\left \{ t_{L}(i)-\omega _{ki}|i>k ,(k,i)\in E\right \} \end{matrix}\right.

关键路径——PERT网络N中从顶点1至顶点n的最长路径为网络的关键路径(可能不止一条),其长度即为T_{E}。关键路径上的工序称为关键工序。

关键事项——若对于事项kt_{E}(k)=t_{L}(k),则称事项k为关键事项。

利用事项的最早时间和最迟时间,给出工序(i,j)的6个时间参数:

工序(i,j)最早开工时间——t_{E}(i)即为工序(i,j)的最早开工时间。

工序(i,j)的最早完工时间——t_{E}(i)+\omega _{ij}即为工序(i,j)的最早完工时间。

工序(i,j)的最迟完工时间——t_{L}(j)即为工序(i,j)的最迟完工时间。

工序(i,j)的最迟开工时间——t_{L}(j)-\omega _{ij}即为工序(i,j)的最迟开工时间。

工序(i,j)的总时差——在不延长总工期的前提下,工序(i,j)完工期的机动时间称为工序(i,j)的总时差,记为R(i,j)。显然,R(i,j)是工序(i,j)的最迟完工时间与最早完工时间之差(或最迟开工时间与最早开工时间之差),因此,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        R(i,j)=t_{L}(j)-t_{E}(i)-\omega _{ij}

工序(i,j)的单时差——在不影响紧后工序最早开工时间的前提下,工序(i,j)的完工期的机动时间称为工序(i,j)的单时差,记为r(i,j)。显然r(i,j)为工序(i,j)的紧后工序的最早开工时间t_{E}(j)与工序(i,j)的最早完工时间之差,因此,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        r(i,j)=t_{E}(j)-t_{E}(i)-\omega _{ij}

【定理】工序(i,j)为关键工序的充分必要条件为R(i,j)=0

2.网络计划的优化

绘制网络计划图,计算时间参数和确定关键路线,仅得到一个初始计划方案。然后根据上级要求和实际资源的配置,需要对初始方案进行调整和完善,即进行网络计划优化。目标是综合考虑进度,合理利用资源,降低费用等。

(1)工期优化

若网络计划图的计算工期大于上级要求的工期,必须根据要求计划的进度,缩短工程项目的完工工期。主要采取以下措施,增加对关键工作的投入,以便缩短关键工作的持续时间,实现工期缩短。

  1. 采取技术措施,提高工效,缩短关键工作的持续时间,使关键路线的时间缩短。
  2. 采取组织措施,充分利用非关键工作的总时差,合理调配人力、物力和资金等资源。

(2)总工期—成本优化问题

一项工程的成本,一般可分为直接成本和间接成本两大类:

  1. 直接成本:如人工、原材料、燃料和机械设备租用等直接与工序工作有关的费用。直接成本要分摊到每道工序上。
  2. 间接成本:如管理人员工资、行政办公费、采购费、劳保福利费等。间接成本不分摊到每道工序上而作为整个工程的成本。显然,总工期短间接成本就低。

①指定总工期的成本优化问题

若PERT网络确定的总工期为T_{E},现指定一个总工期\hat{T}_{E}(<T_{E}),来考虑成本优化问题。

由于总工期固定为\hat{T}_{E}(称为指定总工期),所以间接成本是固定的,故成本最低意味着各工序的直接成本总和最低。又由于每道工序成本由正常成本及赶工费用组成,所以直接成本总和最低也就是意味着各工序的赶工费用总和最低。

为了方便估算,假定在工序成本与工序时间之间有着线性的关系,其中\omega _{ij}^{g}c_{ij}^{g}分别表示在正常情况下工序(i,j)的作业时间和所需成本(分别称为工序的正常工序时间和正常成本);\omega _{ij}^{b}c_{ij}^{b}分别表示工序(i,j)的赶工时间限度和相应的成本。

赶工成本斜率——工序(i,j)缩短一个单位时间所增加的直接成本称为该工序的赶工成本斜率,记为c_{ij}^{*}。即工序(i,j)的赶工成本斜率

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        c_{ij}^{*}=\frac{c_{ij}^{b}-c_{ij}^{g}}{\omega _{ij}^{g}-\omega _{ij}^{b}}

(若每道工序(i,j)都采用它的时间限度\omega _{ij}^{b}作为它的长度,求得相应网络的总工期为T_{E}^{'},则应有\hat{T}_{E}\geqslant T_{E}^{'}。)

  • 枚举法​​​​​​​

首先对网络图中各工序的工序时间在取为正常时间时求出工程的总工期,若大于指定总工期,则就要采取赶工措施。赶工措施的原则为:

  1. 在关键路径上,对赶工成本斜率最低的工序采取赶工措施;
  2. 在关键路径赶工后,其他非关键路径有可能上升为关键路径。在今后赶工中,则对新的关键路径的有关工序也应进行赶工,但必须应使原有的关键路径继续保持为关键路径。
  3. 数条关键路径同时赶工时,应首先考虑共同工序赶工,并以支付最低的赶工成本为目的。
  • 负时差法

给PERT网络N=(V,E,W,1,n),若对(i,j)\in E,在取\omega _{ij}为正常工序时间\omega _{ij}^{g}时,工序(i,j)的总时差为R(i,j),工程的总工期为T_{E}

现在对网络N,指定总工期为\hat{T}_{E}(\hat{T}_{E}<T_{E})。令

\Delta T_{E}=T_{E}-\hat{T}_{E}

现对汇n,取t_{L}^{'}(n)=\hat{T}_{E},可知

t_{L}^{'}(j)=-\Delta T_{E}+t_{L}(j)

t_{L}^{'}(n)=\hat{T}_{E}的条件下,可知工序的开工日期(或完工日期)可推迟的天数为

\hat{R}(i,j)=R(i,j)-\Delta T_{E}

因为\Delta T_{E}>0,所以必有一些工序的\hat{R}(i,j)小于零,称其为负时差。

对网络N要实现新的总工期,必须对\hat{R}(i,j)<0的工序(i,j)进行赶工,而对\hat{R}(i,j)\geqslant 0的工序(i,j)赶工是没有意义的。

构造辅助网络N_{1}=(V,E_{1},C^{1},1,n)

E_{1}=\left \{ (i,j)|(i,j)\in E,\hat{R}(i,j)<0\right \}

c_{ij}^{1}=\left\{\begin{matrix} c_{ij}^{*}, &\omega _{ij}^{b}<\omega _{ij}\\ M, & \omega _{ij}^{b}=\omega _{ij} \end{matrix}\right.\;\;\;\;(i,j)\in E

其中M为一个充分大的正数。

下面给出具体的算法:

  1. 计算N=(V,E,W,1,n)的时间参数,取\Delta T_{E}=T_{E}-\hat{T}_{E},E_{0}=E,k=1,\hat{R}(i,j)=R(i,j)-\Delta T_{E} ((i,j)\in E)
  2. 取                                                                                                                                                                         E_{k}=\left \{ (i,j)|(i,j)\in E_{k-1},\hat{R}(i,j)<0 \right \}                                                                               \delta _{1}=\max\left \{ \hat{R}(i,j)|(i,j)\in E_{k} \right \}\;(\delta _{1}<0)                                                                               c_{ij}^{k}=\left\{\begin{matrix} c_{ij}^{*}, &\omega _{ij}^{b}<\omega _{ij}\\ M, & \omega _{ij}^{b}=\omega _{ij} \end{matrix}\right.\;\;\;\;(i,j)\in E_{k}
  3. 应用最大流算法求网络N_{k}=(V,E_{k},C^{k},1,n)的最小割(S_{k}^{*},\bar{S}_{k}^{*}),取                                                          \delta =\max\left \{ \delta _{1},\omega _{ij}^{b}-\omega _{ij}|(i,j)\in (S_{k}^{*},\bar{S}_{k}^{*}) \right \}\;\;(\delta <0)                                       在N中去                                                                                                                                                        \omega _{ij}=\left\{\begin{matrix} \omega _{ij}+\delta, & (i,j)\in (S_{k}^{*},\bar{S}_{k}^{*})\in E_{k}\\ \omega _{ij}, & \textup{others} \end{matrix}\right.                                                                                    T_{E}=T_{E}+\delta ,\Delta T_{E}=\Delta T_{E}+\delta
  4. \Delta T_{E}=0?                                                                                                                              若是,则T_{E}=\hat{T}_{E},算法终止。                                                                                            若否,则对(i,j)\in E_{k},取\hat{R}(i,j)=\hat{R}(i,j)-\delta ,k=k+1,转步骤2.
  • 线性规划法

对于大型PERT网络的总工期—成本优化问题,可以通过建立线性规划模型来进行最优决策。

②最低成本的最优总工期问题

求总成本最低的最优总工期T_{E}^{*},一般可按如下步骤来进行:

  1. 对PERT网络个工序都取正常的工序时间,求出总工期T_{E};再对网络各工序的工序时间取赶工的极限时间,求出总工期T_{E}^{'},则显然有T_{E}^{*}\in [T_{E}^{'},T_{E}]。在T_{E}^{'}T_{E}之间估计一个值\hat{T}_{E}作为T_{E}^{*}的初始值。
  2. 通过求解指定总工期分别为\hat{T}_{E}-1,\hat{T}_{E},\hat{T}_{E}+1的成本优化问题,得到直接成本(或赶工成本)最小的3个赶工方案,然后加上总工期为\hat{T}_{E}-1,\hat{T}_{E},\hat{T}_{E}+1时相应的间接成本,即得总工期为\hat{T}_{E}-1,\hat{T}_{E},\hat{T}_{E}+1时的总成本f(\hat{T}_{E}-1),f(\hat{T}_{E}),f(\hat{T}_{E}+1)
  3. 若有f(\hat{T}_{E})\leqslant f(\hat{T}_{E}-1),f(\hat{T}_{E})\leqslant f(\hat{T}_{E}+1),则\hat{T}_{E}就是所求的最优总工期T_{E}^{*},否则取f(\hat{T}_{E}-1)f(\hat{T}_{E}+1)中小者所相应的总工期为\hat{T}_{E}的新值,再重复步骤2。

(3)总工期—资源的优化问题

在编制初始网络计划图后,需要进一步考虑尽量利用现有资源的问题。即在项目的工期不变的条件下,均衡地利用资源。为了简化计算,具体操作如下:

  1. 优先安排关键工作所需要的的资源。
  2. 利用非关键工作的总时差,错开各工作日的开始时间,避开在同一时区内集中使用同一资源,以免出现高峰。
  3. 在确实受到资源制约,或在考虑综合经济效益的条件下,在许可时,也可以适当地推迟工程工期,实现错开高峰的目的。

下面对这类资源附有限制的网络计划问题作一般讨论:

假若网络计划问题所需要的的某种资源在单位时间内的最大供应量为\lambda _{max},那么,在此资源限制条件下,可以按以下步骤求总工期最短的计划方案:

  1. 当网络给定后,先求出有关的时间参数及总工期T_{E}。将每道工序(i,j)都先安排在t_{E}(i)+1天开始执行,由此绘制横道图,得到一条阶梯形的资源需求曲线。该曲线任何一个梯段的开始或结束,均意味着有某些工序开工或完工。
  2. 对资源需求曲线自左至右按梯段进行检查,如资源需求超过资源最大供应量\lambda _{max},就要加以调整,利用非关键工序的总时差,错开它们的开工时间,分散对资源需求的压力,力争在总工期T_{E}内完工。

显然,时间区间(t_{A},t_{B}]内的若干工序(i,j)必满足下面两个条件:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​           ​​​​​​​        \left\{\begin{matrix} s_{ij}+1\leqslant t_{B}\\ s_{ij}+\omega _{ij}>t_{A} \end{matrix}\right.

(t_{A},t_{B}]内的工序(i,j)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        (t_{A},t_{B}]\cap (s_{ij},s_{ij}+\omega _{ij}]\neq\varnothing

现令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu_{ij}=t_{L}(j)-t_{B}-\omega _{ij}

那么,在满足的各道工序(i,j)中,如何挑选,使其开工日期后移到第t_{B}+1天呢?

  1. 优先挑选\mu _{ij}大的工序(i,j),使它的开工时间s_{ij}=t_{B}。因为当\mu _{ij}\geqslant 0时,\mu _{ij}越大越说明工序(i,j)的开工时间后移后仍有较多的开工剩余机动时间;当\mu _{ij}<0时,\mu _{ij}越大,则\left | \mu _{ij} \right |越小,说明工序(i,j)的开工时间后移后使总工期拖延的天数越小。
  2. 为了减轻工程后期施工对资源需求的压力,一般不宜把过多的资源需求量推迟。最好是在满足资源限额的条件下,使资源的利用尽量均衡。
  3. s_{ij}的数值改变后,对于以事项j为开工事项的工序(j,k)来说,若s_{jk}<s_{ik}+\omega _{ij},则工序(j,k)已不能按照原定的日期第s_{jk}+1天开工,这时,应取s_{jk}=s_{ij}+\omega _{ij}。同样的,对于以事项k为开工事项的工序,其开工日期也应做相应改变,其余工序以此类推。

如何评价一个工程进度表对资源利用的均衡性呢?

若工程进度计划表确定后,用\lambda表示第t天对资源的需求量,T为进度表相应的总工期,则日资源利用量的均值为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \bar{\lambda }=\frac{1}{T}\sum_{t=1}^{T}\lambda _{t}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​    S^{2}=\frac{1}{T}\sum_{t=1}^{T}(\lambda _{t}-\bar{\lambda} )^{2}=\frac{1}{T}\sum_{t=1}^{T}\lambda_{t}^{2}-\bar{\lambda}^{2}

我们的问题就成为在计划工期T固定的条件下,找到一种进度计划使S^{2}取极小值。一般采用如下的试探法:

先求出网络图的时间参数,把每道工序(i,j)的开工日期都安排在第t_{E}(i)+1天。于是得到一张进度计划表,计算相应的S^{2}。然后利用非关键工序的总时差,依次对每道非关键工序的执行时间作试探性调整,若调整后的S^{2}值减少,则接受这个调整措施,从而获得一张新的进度计划表。重复上述过程,直到求得某一进度计划时,对每道非关键工序的试探性调整已无法使S^{2}减小,此时,即终止调整。

3.非肯定型PERT网络

我们称采用单一时间估计法估计各道工序作业时间的PERT网络为肯定型网络。

工序时间是随机变量的PERT网络称为非肯定的PERT网络。

我们采用3种时间估计法来估算非肯定型网络各工序的工序时间,即对每道工序的工序时间估计3种时间:

  1. 乐观时间a:在最顺利的情况下完成工序的时间;
  2. 保守时间b:在最不利的情况下完成工序的时间;
  3. 最可能的时间m:在正常情况下完成工序的最可能需要的时间。

假设工序这个随机变量服从取值范围从ab\beta分布,因而,此随机变量的期望值\mu和方差\sigma ^{2}分别为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu =\frac{a+4m+b}{6}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sigma ^{2}=(\frac{b-a}{6})^{2}

将按上式确定的工序(i,j)的工序时间期望值作为该工序的长度\omega _{ij},它的方差记为\sigma _{ij}^{2}

网络计划的总工期T_{E}是关键路径P中所有工序的工序时间的和,由于工序时间是随机变量,因此T_{E}也是随机变量。现假定各工序的工序时间是彼此独立的随机变量。当关键路径P上工序较多时,根据概率论中的中心极限定理可知,总工期T_{E}服从正态分布,它的数学期望和方差分别为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        E(T_{E})=\sum_{(i,j)\in P}\omega _{ij}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        D(T_{E})=\sum_{(i,j)\in P}\sigma _{ij}^{2}

五、排队论

排队论就是一门研究处理随机服务系统排队现象的学科。它的任务是考察服务系统随机现象的规律,建立数学模型,为决策者正确地设计与有效地运营服务系统而提供必要的科学依据,使决策者在系统服务费用和顾客的有关等待费用之间达到经济上的平衡。

可用如下模型来描述这一过程。

​​​​​​​

1.泊松过程、生灭过程和负指数分布

(1)泊松过程

若用N(t)表示在[0,t)时间内到达某服务系统的顾客数,则对于每个给定的时刻tN(t)都是一个随机变量,称依赖于连续参数时间t的随机变量族\left \{ N(t) |t\in [0,A)\right \}为一个随机过程。称N(t)的值为在时刻t时过程所处的状态,N(t)取值的全体称为状态集,记作I=\left \{ 0,1,2,... \right \}

假设对于任意的t_{1}<t_{2}<\cdots <t_{n}<t_{n+1},有

        ​​​​​​​        P(N(t_{n+1})=i_{n+1}|N(t_{1})=i_{1},N(t_{2})=i_{2},\cdots ,N(t_{n})=i_{n})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     =P(N(t_{n+1})=i_{n+1}|N(t_{n})=i_{n})

则称随机过程\left \{ N(t) |t\in [0,A)\right \}为马尔可夫过程,上式所表示的性质称为“马尔可夫性”或“无后效性”。

下面介绍马尔可夫过程之一——泊松过程。

若状态集I=\left \{ 0,1,2,... \right \}的随机过程\left \{ N(t) |t\in [0,A)\right \}具有所谓的独立增量性:对任一组t_{1}<t_{2}<...<t_{n}(n\geqslant 3),随机变量

        ​​​​​​​        ​​​​​​​        N(t_{2})-N(t_{1}),N(t_{3})-N(t_{2}),\cdots ,N(t_{n})-N(t_{n-1})

相互独立。同时,对任意t\in [0,A),有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     P(N(t)=k)=\frac{(\lambda t)^{k}}{k!}e^{-\lambda t},k=0,1,2,...

其中参数\lambda >0,则称这个过程为泊松过程。

在排队论里,人们常把泊松过程称为最简单流,参数\lambda称为最简单流的强度。在具体的问题中,是不难由统计资料求得的。

【定理】若随机过程\left \{ N(t) |t\in [0,A)\right \}满足3个条件:

  1. 独立增量性:对任一组t_{1}<t_{2}<...<t_{n}(n\geqslant 3),随机变量N(t_{2})-N(t_{1}),N(t_{3})-N(t_{2}),\cdots ,N(t_{n})-N(t_{n-1})相互独立。
  2. 平稳性:对于[s,s+t)\subset [0,A),总有                                                                                               P(N(s+t)-N(s)=k)=P(N(t)-N(0)=k)=P(N(t)=k)                 (设P(N(0)=0)=1,\sum_{k=0}^{\infty}P(N(t)=k)=1
  3. 普通性:令\psi (t)=\sum_{k=2}^{\infty}P(N(t)=k),则有                                                                                                                         \lim_{t\rightarrow 0}\frac{\psi (t)}{t}=0                                                                            则\left \{ N(t) |t\in [0,A)\right \}是一个泊松过程:                                                                                                                P(N(t)=k)=\frac{(\lambda t)^{k}}{k!}e^{-\lambda t}(\lambda >0),k=0,1,2,...

【定理】顾客到达过程\left \{ N(t) |t\in [0,A)\right \}是一个参数为\lambda的泊松过程的充分必要条件为:相应的顾客到达间隔T_{n}(n=1,2,...)是一族相互独立同分布的随机变量,它们的分布函数为负指数分布:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​        P(T_{n}\leqslant t)=\left\{\begin{matrix} 1-e^{-\lambda t}, & t\geqslant 0\\ 0, & t<0 \end{matrix}\right.

(2)生灭过程

生灭过程——若随机过程\left \{ N(t) |t\in [0,A)\right \}的状态集I=\left \{ 0,1,2,...,m \right \}I=\left \{ 0,1,2,... \right \}。设在时刻t\xi (t)=j,那么在时刻t+\Delta t时(j,j+1\in I),\xi(t+\Delta t)=j+1的概率为\lambda _{j}\Delta t+o(\Delta t)(其中\lambda _{j}>0为与t无关的常数);在时刻t+\Delta t时(j,j-1\in I),\xi(t+\Delta t)=j-1的概率为\mu _{j}\Delta t+o(\Delta t)(其中\mu _{j}>0也为与t无关的常数);在时刻t+\Delta t时,\xi(t+\Delta t)I中其他元素的概率均为o(\Delta t),则称该随机过程\left \{ \xi(t) |t\in [0,A)\right \}为生灭过程。

对一些生灭过程,常常关心下列概率:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}(t)=P(\xi(t)=j)(称为瞬时解)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lim_{t\rightarrow \infty}P(\xi(t)=j)=P_{j}(称为极限解)

生灭过程关于P_{j}(t)=P(\xi(t)=j)的微分方程组为

①当I=\left \{ 0,1,...,m \right \}时,

                ​​​P_{0}^{'}(t)=-\lambda _{0}P_{0}(t)+\mu _{1}P_{1}(t)

        ​​​​​​​        P_{j}^{'}(t)=\lambda _{j-1}P_{j-1}(t)-(\lambda _{j}+\mu _{j})P_{j}(t)+\mu _{j+1}P_{j+1}(t)(0<j<m)

        ​​​​​​​        P_{m}^{'}(t)=\lambda _{m-1}P_{m-1}(t)-\mu _{m}P_{m}(t)

②当I=\left \{ 0,1,2,... \right \}时,

        ​​​​​​​        P_{0}^{'}(t)=-\lambda _{0}P_{0}(t)+\mu _{1}P_{1}(t)

        ​​​​​​​        P_{j}^{'}(t)=\lambda _{j-1}P_{j-1}(t)-(\lambda _{j}+\mu _{j})P_{j}(t)+\mu _{j+1}P_{j+1}(t)(0<j<m)

求解这组方程,即可得到在时刻t时过程的状态概率分布\left \{ P_{j}(t),j\in I \right \},即得到生灭过程的瞬时解。

【定理】令

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \pi _{0}=1,\pi_{j}=\frac{\lambda _{0}\lambda_{1}\cdots \lambda_{j-1} }{\mu_{1} \mu_{2}\cdots \mu _{j}}(j=1,2,...)

则对I=\left \{ 0,1,...,m \right \}的生灭过程,或对I=\left \{ 0,1,2,... \right \}且满足条件

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sum_{j=0}^{\infty}\pi _{j}<+\infty,\sum_{j=0}^{\infty}\frac{1}{\lambda _{j}\pi_{j}}=+\infty

的生灭过程,对于任意正数s和任意i\in I,j\in I,都有

        ​​​​​​​        ​​​​​​​        \lim_{t\rightarrow \infty}P(\xi(t)=j)=\lim_{t\rightarrow \infty}P(\xi(s+t)=j|\xi(s)=i)=P_{j}>0

当状态集I=\left \{ 0,1,...,m \right \}时,

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​P_{0}=\left ( \sum_{j=0}^{m}\pi_{j} \right )^{-1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​                P_{j}=\pi_{j}P_{0}=\frac{\lambda _{j-1}}{\mu _{j}}P_{j-1},j=1,...,m

当状态集I=\left \{ 0,1,2,... \right \}时,

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{0}=\left ( \sum_{j=0}^{\infty}\pi_{j} \right )^{-1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}=\pi_{j}P_{0}=\frac{\lambda _{j-1}}{\mu _{j}}P_{j-1},j=1,2,...

P_{j}(j\in I)为生灭过程在统计平衡时的概率,或称稳态概率。

(3)负指数分布

若用V_{n}表示第n位顾客所需的服务时间,则\left \{ V_{n},n=1,2,... \right \}也是一族随机变量。假定\left \{ V_{n},n=1,2,... \right \}中各个随机变量相互独立,且服从相同的负指数分布:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(V_{n}\leqslant t)=\left\{\begin{matrix} 1-e^{-\mu t} & t\geqslant 0\\ 0 &t<0 \end{matrix}\right.

其中参数\mu >0。因而,其概率密度函数为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f(t)=\left\{\begin{matrix} \mu e^{-\mu t} & t\geqslant 0\\ 0 & t<0 \end{matrix}\right.

V_{n}的数学期望和方差分别为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        E(V_{n})=\frac{1}{\mu },D(V_{n})=\frac{1}{\mu ^{2}}

 因此

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu =\frac{1}{E(V_{n})}

从而,\frac{1}{\mu }为每位顾客所需要的的平均服务时间,\mu为在单位时间内受到服务的顾客的平均数。(用随机变量V表示顾客的服务时间)

【性质】负指数分布的密度函数f(t)t(t\geqslant 0)的一个严格单调减函数。

【性质】无记忆性。(剩余服务时间的分布独立于已经服务过的时间而与原来的分布相同。)

【性质】对于t>0,当\Delta t充分小时,有

        ​​​​​​​    P(V\leqslant t+\Delta t|V\geqslant t)=1-P(V\geqslant t+\Delta t|V\geqslant t)=1-e^{-\mu \Delta t}\approx \mu \Delta t

(4)爱尔朗分布

爱尔朗分布的密度函数为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f(t)=\left\{\begin{matrix} \frac{k\mu (k\mu t)^{k-1}}{(k-1)!}e^{-k\mu t} & t\geqslant 0\\ 0 & t < 0 \end{matrix}\right.

其中参数\mu >0k称为阶数。

若顾客服务时间V服从爱尔朗分布,则V的数学期望和方差分别为

E(V)=\frac{1}{\mu },D(V)=\frac{1}{k\mu ^{2}}

可以证明,如果\xi _{1},\xi _{2},...,\xi _{k}k个相互独立的随机变量,且服从同一参数k\mu (\mu >0)的负指数分布,则随机变量

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        V=\xi _{1}+\xi _{2}+...+\xi _{k}

服从k阶爱尔朗分布。

2.一般排队系统结构

一般排队系统都有三个基本组成部分:①输入过程;②排队规则;③服务机构。

(1)输入过程

输入过程是指各种类型的顾客按怎样的规律到达。要完全描述一个输入过程需要如下3方面信息:

①顾客源数。

顾客总体可能是有限集,也可能是无限可数集合,甚至可能是无限不可数集合。

②到达类型。

顾客来到的方式可以是单个到达,也可能是成批地到达。

③顾客相继到达的时间间隔分布。

描述顾客到达过程有两种方式:一种为随机过程\left \{ N(t)|t\in [0,A) \right \},其中N(t)[0,t)内到达的顾客数;另一种描述方式为随机变量序列\left \{ T_{n},n\geqslant 1 \right \},其T_{n}=t_{n}-t_{n-1}中为第n个顾客到达时刻,t_{0}=0。下面介绍几种常见的情况:

  1. 定长输入。顾客有规则地到达,每隔时间\alpha到达一位顾客。此时,顾客相继到达的时间间隔T_{n}的分布函数为                                                                                                                                                             F(t)=P(T_{n}\leqslant t)=\left\{\begin{matrix} 0, &t<\alpha \\ 1, & t\geqslant \alpha \end{matrix}\right.
  2. 最简单流。独立随机变量序列\left \{ T_{n},n\geqslant 1 \right \}服从同一负指数分布:                                                                                  P(T_{n}\leqslant t)=\left\{\begin{matrix} 0, & t<0\\ 1-e^{-\lambda t} & t\geqslant 0 \end{matrix}\right.                                                     或者说,随机过程\left \{ N(t)|t\in [0,A) \right \}是一个泊松过程,N(t)的概率分布为                                                                     P(N(t)=k)=\frac{(\lambda t)^{k}}{k!}e^{-\lambda t},k=0,1,2,...                                    其中\lambda >0
  3. k阶爱尔朗输入。独立随机变量\left \{ T(t),n\geqslant 1\right \}服从相同的爱尔朗分布,其密度函数为                                                           f(t)=\left\{\begin{matrix} \frac{k\lambda (k\lambda t)^{k-1}}{(k-1)!}e^{-k\lambda t}& t\geqslant 0\\ 0 & t <0 \end{matrix}\right.
  4. 一般独立输入。独立随机变量序列\left \{ T_{n},n\geqslant \geqslant 1 \right \}具有相同的分布。

④顾客的到达可以是相互独立的,否则就是有关联的。主要讨论的是相互独立的情形。

⑤输入过程可以是平稳的,或称对时间是齐次的,是指描述相继到达的间隔时间分布和所含参数(如期望值、方差等)都是与时间无关的,否则称为非平稳的。主要讨论平稳的情形。

(2)服务机构

服务机构应反映如下信息:服务台的个数、接受服务的方式(单个服务或成批服务)、服务时间的分布。下面介绍几种经常遇到的服务时间分布:

①定长分布。每位顾客的服务时间V_{n}均为常数\betaV_{n}的分布函数为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(V_{n}\leqslant t)=\left\{\begin{matrix} 0 & V_{n}<\beta \\ 1 & V_{n}\geqslant \beta \end{matrix}\right.

②负指数分布。各个顾客的服务时间V_{n}相互独立,具有相同的负指数分布:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(V_{n}\leqslant t)=\left\{\begin{matrix} 0 & t<0 \\ 1-e^{-\mu t} & t\geqslant 0 \end{matrix}\right.
其中参数\mu >0

k阶爱尔朗分布。各个顾客的服务时间V_{n}​​​​​​​相互独立,具有相同的k阶爱尔朗分布,其密度函数为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f(t)=\left\{\begin{matrix} \frac{k\mu (k\mu t)^{k-1}}{(k-1)!}e^{-k\mu t}& t\geqslant 0\\ 0 & t <0 \end{matrix}\right.

其中参数\mu >0

④一般独立分布。各个顾客的服务时间V_{n}相同独立,具有相同的概率分布。

(3)排队规则

排队规则体现到来的顾客按怎样的方式和顺序接受服务。

①损失制。当一个顾客到达时,若所有服务台均被占用,该顾客就自动消失,具有这种特点的排队规则称为损失制。

②等待制。当顾客到达时,若所有服务台均被占用,顾客就排成队伍等待服务,具有这种特点的排队规则称为等待制。顾客接受服务的次序可以采用下列各种规则:

i.先到先服务。即按顾客到达的先后顺序接受服务。

ii.后到先服务。

iii.随机服务。当服务台得空时,在等待的顾客中随机地选取一名进行服务,每一位等待的顾客被选到的概率相同。

iv.优先权服务。对于不同的顾客规定了不同的优先权。

③混合制。为损失制和等待制兼而有之的情况。有下列情况:

i.队长有限制。如果系统空间的容量有限,最多只能容纳k个顾客(包括正在接受服务和参加等待的顾客),那么当顾客到达时,如果系统内已有k个顾客,该顾客就自动离去;如果系统内顾客数小于k,该顾客就进入服务系统。

ii.等待时间有限制。顾客在队伍中的等待时间不能超过规定的时间,超过规定时间顾客就离去。

iii.逗留时间(等待时间与被服务时间之和)有限制。顾客在服务系统中的逗留时间不能超过规定时间,否则就离去。

(4)排队模型的符号表示

一般排队模型由6个主要特性所确定:输入过程(顾客到达时间间隔分布);服务时间分布;服务台个数(多个服务台时,假设各个服务台是并联的);系统容量(服务台个数加上可容纳的等待顾客数);顾客源数;服务规划。

在应用中,使用符号来表示不同的排队模型是较为方便的:

                        输入过程/服务分布/服务台个数/系统容量/顾客源数/服务规则

由于本文中讨论的问题都是采用先到先服务的服务规则,所以在模型的符号中不再列出服务规则符号。当系统容量或客源为无限时,也将它们从模型的符号表示中省略。

表示顾客到达时间间隔分布和服务时间分布的常用符号有:

M——输入过程为最简单流,或服务时间为负指数分布;

D——定长输入或定长服务;

E_{k}——顾客到达时间间隔分布或服务时间分布为k阶爱尔朗分布;

GI——一般独立输入:

G——一般服务分布。

服务台的个数用S表示,系统容量用k表示,顾客源数用f表示。

(5)排队模型数量指标和基本公式

排队论研究的问题,从大的方面来说,可以分成两类问题:第一类问题是在服务机构未设置之前就根据顾客输入过程与服务过程的要求,结合对系统的一定数量指标要求,对服务机构规模进行最优设计,我们称他们为静态最优问题;第二类问题是对已有的服务系统如何实行最优控制,称为动态最优问题。

解排队问题的目的,是研究排队系统运行的效率,估计服务质量,确定系统参数的最优值,以决定系统结构是否合理、研究设计改进措施等。所以必须确定用以判断系统运行优劣的基本数量指标,解排队问题就是首先求出这些数量指标的概率分布或特征数。

排队系统的优化问题,首要问题是在对系统作定量分析后,计算队长、等待时间和忙期3个数量指标的分布和数学期望:

①  队长。队长是指在系统中的顾客数目(包括正在接受服务的顾客和等待服务的顾客),它是一个随机变量,应确定其分布,至少应当知道它的平均值及有关各阶矩。

②等待时间和逗留时间。从顾客到达时刻起他接受服务时止这段时间称为等待时间,它是个随机变量,是顾客最为关心的数量指标,因为顾客总是希望他的等待时间越短越好。

③忙期。对多个服务台的排队模型,从服务系统开始无空闲的服务台这一时刻起,到有一个服务台开始空闲这一时刻止,这段时间称为系统的忙期。对于单服务台的排队模型,从顾客到达空闲的服务台这一时刻起,到服务台再次变为空闲这个时刻止,这段时间称为服务台的忙期。

由于排队模型一般都存在一个‘初始’时期,在这个时期中,队长分布、等待时间分布和忙期分布均依赖于系统已运营的时间t和初始状态(顾客数)。然而,服务系统运营充分长的时间后,系统趋于统计平衡,这些分布不再随时间变化且初始状态的影响也消失(但不意味着系统失去随机性),我们基本上只研究统计平衡时的有关状况。

为方便讨论具体的数学模型,给出下列数量指标的符号:

\lambda——单位时间内平均到达的顾客数,即平均到达率;

\frac{1}{\lambda }——平均到达间隔;

\mu——单位时间内受到服务的顾客平均数,即平均服务率;

\frac{1}{\mu }——每位顾客的平均服务时间;

S——服务台个数;

\rho——每个服务台的服务强度(利用率),表示每个服务台在单位时间内的平均负荷;

P_{j}——在统计平衡时,系统中具有j个顾客的概率;

D——顾客等待的概率;

Q——忙期;

L——队长(正在接受服务的和正在排队等待的顾客总数)的期望值;

L_{q}——等待队长的期望值;

W——逗留时间(顾客在系统中的等待时间和被服务时间的和)的期望值;

W_{q}——等待时间的期望值。

有效到达率\lambda _{e}——单位时间内平均进入服务系统的顾客数。对于等待制的排队系统有\lambda _{e}=\lambda

下面给出3个基本公式,对各类排队模型在处于统计平衡时都适用。

首先,根据逗留时间的含义,有下述公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W=W_{q}+\frac{1}{\mu }

此,给出下述两个李特尔公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L_{q}=\lambda _{e}W_{q}
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=\lambda _{e}W

3.泊松输入、负指数分布的排队模型

输入过程为最简单流、服务时间为负指数分布的随机服务系统,是排队论中最简单的模型,对于这种模型的各项数量指标,排队论具有比较漂亮的结论。

(1)M/M/S排队模型

M/M/S排队模型为泊松输入、负指数分布服务、S个服务台、系统容量不受限制、顾客源数为无限的等待制排队模型。如下图所示。

【笔记】运筹(中)——Rita_Aloha_第1张图片

假定到达率为\lambda的最简单流来到S个服务台的服务系统。一个顾客到来时,如果有一个以上的服务台空闲着,顾客就被随机地指派给任何一个有空的服务台进行服务;若所有服务台均在服务,则顾客排成一个队伍等待服务,顾客服务时间与顾客到达间隔时间相互独立,遵从参数为\mu的负指数分布。

\xi (t)为系统在时刻t时的队长,它是一个随机变量。若\xi (t)=j\leqslant S,表示在时刻tj个服务台正在进行服务,而剩下的S-j个服务台空闲着;若j>S,则表示在时刻t所有的S个服务台均在进行服务,且有j-S个顾客正在排队等待。可以证明\left \{ \xi (t)|t\geqslant 0 \right \}是一个生灭过程,其状态集I=\left \{ 0,1,2,... \right \}

由于顾客到的间隔T和顾客服务时间V分别服从参数为\lambda\mu的负指数分布,可知,当t>0时,对充分小的\Delta t,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(T\leqslant t+\Delta t|T\geqslant t)\approx \lambda \Delta t

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(V\leqslant t+\Delta t|V\geqslant t)\approx \mu \Delta t

即,在\Delta t时间内来一个顾客的概率为\lambda \Delta t+o(\Delta t);在\Delta t时间内一个服务台服务完一个顾客的概率为\mu \Delta t+o(\Delta t)。于是,若j个服务台都在服务,那么j个服务台服务完一个顾客的概率为\mu j\Delta t+o(\Delta t)(j\leqslant S)可见,对该生灭过程来说,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda _{j}=\lambda(j=0,1,2,...,)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​\mu _{j}=\left\{\begin{matrix} j\mu & j=1,2,...,S\\ S\mu & j=S+1,S+2,... \end{matrix}\right.

此生灭过程的稳态概率为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       \pi_{j}=\left\{\begin{matrix} \frac{S_{j}}{j!}\rho ^{j} & 1\leqslant j\leqslant S\\ \frac{S^{S}}{S!}\rho^{j} & j>S \end{matrix}\right.

其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \rho =\frac{\lambda }{S\mu}

\rho为服务强度,表示每个服务台在单位时间内的平均负荷,也即每个服务台的利用率。

可知,当\rho <1时,有下式成立

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sum_{j=0}^{\infty}\pi_{j}<+\infty

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sum_{j=0}^{\infty}\frac{1}{\lambda _{j}\pi_{j}}=+\infty

因此,在\rho <1条件下,得到系统队长的稳态概率:

        ​​​​​​​           P_{0}=\left ( \sum_{j=1}^{\infty} \pi_{j}\right )^{-1}=\left ( \sum_{j=0}^{S-1}\frac{(S\rho )^{j}}{j!}+\frac{(S\rho )^{S}}{S!}\frac{1}{1-\rho } \right )^{-1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}=\left\{\begin{matrix} \frac{(S\rho )^{j}}{j!}P_{0} & 1\leqslant j\leqslant S\\ \frac{S^{S}\rho ^{j}}{S!}P_{0} & j>S \end{matrix}\right.

显然,P_{0}即该系统的空闲系数。

所有服务台均被占用,以致来到一个顾客需要等待的概率D

        ​​​​​​​        ​​​​​​​        ​​​​​​​              ​​​​​​​        D=\sum_{j=S}^{\infty}P_{j}=\frac{1}{1-\rho }P_{S}

S较小时,也可采用下式来计算D

        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​         D=1-\sum_{j=0}^{S-1}P_{j}

 根据LL_{q}定义,可得:

        ​​​​​​​        ​​​​​​​        ​​​​​​​                L=\sum_{j=0}^{\infty}jP_{j}=S\rho +\frac{\rho}{(1-\rho )^{2}}P_{S}

        ​​​​​​​        ​​​​​​​        ​​​​​​​               ​​​​​​​L_{q}=\sum_{j=0}^{\infty}jP_{S+j}=\frac{\rho}{(1-\rho )^{2}}P_{S}

U_{q}为顾客的等待时间,则该随机变量的分布函数为

        ​​​​​​​        ​​​​​​​        F(t)=P(U_{q}\leqslant t)=\left\{\begin{matrix} 1-\frac{P_{S}}{1-\rho }e^{-(S\mu-\lambda )t} &t\geqslant 0 \\ 0& t<0 \end{matrix}\right.

特别

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(U_{q}>0)=\frac{P_{S}}{1-\rho }

它与等待概率的表达式相同。又可知

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W_{q}=E(U_{q})=\frac{\rho }{\lambda (1-\rho)^{2}}P_{S}

        ​​​​​​​        ​​​​​​​                            ​​​​​​​W=\frac{1}{\mu }+\frac{\rho }{\lambda (1-\rho )^{2}}P_{S}

对于\rho \geqslant 1的系统,可知P_{j}=0对一切j成立,这表示如果将这一系统维持很长一段时间,系统中的顾客队伍就会无限长。

下面讨论M/M/S排队系统的静态优化问题——系统设计的最优化。

我们建立系统的有关费用模型(考虑在单位时间内使服务费用和顾客等待/逗留费用之和最小),然后对有关的参数的优化进行决策。

服务费用是与服务水平密切相关的,一般来说,它是可以确切计算或估计的,而顾客的等待费用对大部分排队模型就很难估算。

(2)M/M/1排队模型

M/M/1排队模型为M/M/S在时的特例。现设

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \rho =\frac{\lambda }{\mu }<1

可知

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \left\{\begin{matrix} P_{0}=1-\rho & \\ P_{j}=(1-\rho )\rho ^{j} & j=1,2,... \end{matrix}\right.

因此有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        D=\rho

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       L_{q}=\frac{\lambda ^{2}}{\mu (\mu -\lambda )}
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​           L=\frac{\lambda }{\mu -\lambda }

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       W_{q}=\frac{\lambda }{\mu (\mu -\lambda )}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   W=\frac{1}{\mu -\lambda }

可以证明,若顾客在系统中的逗留时间为随机变量U,则

        ​​​​​​​        ​​​​​​​        ​​​​​​​        F(t)=P(U\leqslant t)=1-e^{-(\mu -\lambda )t}(t\geqslant 0)

下面计算M/M/1排队模型忙期Q的平均长度EQ

对服务台来说,整个时间轴可以分为两部分:忙期与闲期。当一个顾客到达空着的服务台时忙期就开始,一直到服务台再一次变成空闲(即,系统中没有等待的顾客),忙期才结束。所谓闲期,就是指以服务台变成空闲开始到新的顾客到达为止这段时间。由最简单流的性质可知,闲期长度遵从参数为\lambda的负指数分布,故闲期平均长度为\frac{1}{\lambda }。另一方面,P_{0}=1-\rho,因此在相当长的时期T_{0}内,服务台空闲的时间总长度为T_{0}(1-\rho ),所以在T_{0}时期内闲期的平均个数为\frac{T_{0}(1-\rho )}{\frac{1}{\lambda }}=(1-\rho )\lambda T_{0},它也等于T_{0}内忙期的平均个数。又知T_{0}时期内服务台忙碌时间总长度T_{0}\rho为,因此忙期平均长度

        ​​​​​​​        ​​​​​​​        ​​​​​​​      EQ=\frac{T_{0}\rho }{\lambda(1-\rho)T_{0} }=\frac{\rho}{\lambda(1-\rho)}=\frac{1}{\mu-\lambda}

可见有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        EQ=W

忙期的平均长度即为顾客在系统中逗留时间的期望值W。于是,一个忙期中所服务的顾客的平均数为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{1}{\mu-\lambda}\cdot \mu=\frac{1}{1-\rho}

(3)M/M/∞排队模型

M/M/∞排队模型为泊松输入、负指数分布服务、无限个服务台的服务系统。

假定参数为\lambda的最简单流到达无限个服务台的系统,则顾客一到达立即就可接受空闲着的服务台的服务。服务时间与到达间隔相互独立,服务时间是参数为\mu的负指数分布。

若同在时刻t时正在进行服务的服务台台数为j,就说在时刻t系统所处的状态\xi(t)=j,其状态集I=\left \{ 0,1,2,... \right \}

可以证明\left \{ \xi(t)|t\geqslant 0 \right \}为一个生灭过程。所以,对该生灭过程来说,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda_{j}=\lambda,(j=0,1,...)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu_{j}=j\mu (j=1,2,...)

可得

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}=\frac{\rho ^{j}}{j!}e^{-\rho},j=0,1,2,...

\rho=\frac{\lambda }{\mu }中。于是,可知系统中在服务的服务台平均数

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     L=\rho

(4)M/M/S/k排队模型

M/M/S/k排队模型为泊松输入、负指数分布服务、S个服务台、系统容量为的混合制系统。

假定参数为\lambda的最简单流到达S个服务台的系统,若顾客到达时有空闲的服务台,则顾客在任一空闲服务台接受服务,服务时间与到达时间间隔相互独立,遵从参数为\mu的负指数分布;若顾客到达时所有S个台都在进行服务,则当系统中的顾客数(包括正在服务的S个顾客)小于指定数k时,新来的顾客就排入队伍等待,而当系统中的顾客数等于k时,新来的顾客就被拒绝而损失。

\xi(t)为在时刻t时系统内的顾客数,则\left \{ \xi(t)|t\geqslant 0 \right \}是一个随机过程,可以证明它是一个状态集为I=\left \{ 0,1,...,k \right \}有限集的生灭过程。所以,对该生灭过程来说,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        \lambda_{j}=\lambda,(j=0,1,...,k-1)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        \mu_{j}=\left\{\begin{matrix} j\mu & j=1,2,...,S\\ S\mu & j=S+1,...,k \end{matrix}\right.

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        \rho=\frac{\lambda}{S\mu}

则可得系统的稳态概率

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​     P_{0}=\left [ \sum_{i=0}^{s-1}\frac{(S\rho)^{i}}{i!}+\sum_{i=s}^{k}\frac{S^{S}\rho^{j}}{S!} \right ]^{-1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​             P_{j}=\left\{\begin{matrix} \frac{(S\rho)^{j}}{j!}P_{0} & j=1,2,...,S\\ \frac{S^{S}\rho^{j}}{S!}P_{0} & j=S+1,...,k \end{matrix}\right.

显然,P_{k}就是顾客被拒之于系统之外的概率,称为损失率。

LL_{q}可根据其定义直接计算,即

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        L=\sum_{j=0}^{k}jP_{j}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                L_{q}=\sum_{j=0}^{k-S}jP_{s+j}=\sum_{j=s}^{k}(j-S)P_{j}

可以验证:

        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        L=L_{q}+S-\sum_{j=0}^{s-1}(S-j)P_{j}

或者根据下列公式来计算:

        ​​​​​​​                ​​​​​​​L_{q}=\frac{\rho (S\rho)^{S}P_{0}}{S!(1-\rho)^{2}}\left [ 1-\rho^{k-S}-(k-S)\rho^{k-S}(1-\rho) \right ](\rho\neq 1)
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                        L=L_{q}+S\rho(1-P_{k})

显然,顾客到达且能进入系统的概率为1-P_{k},故系统的有效到达率\lambda_{e}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​             ​​​​​​​                \lambda_{e}=\lambda(1-P_{k})

不难验证

        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        ​​​​​​​\lambda_{e}=\mu\left [ S-\sum_{j=0}^{S-1}(S-j)P_{j} \right ]

因此,根据李特尔公式可求得

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​               ​​​​​​​        W_{q}=\frac{L_{q}}{\lambda(1-P_{k})}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                W=\frac{L}{\lambda(1-P_{k})}

S=1时,对于M/M/1/k排队模型,有:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}=\left\{\begin{matrix} \frac{(1-\rho)\rho^{j}}{1-\rho ^{k+1}} & \rho\neq 1\\ \frac{1}{k+1} & \rho =1 \end{matrix}\right.j=0,1,2,...,k

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=\left\{\begin{matrix} \frac{\rho}{1-\rho}-\frac{(k+1)\rho^{k+1}}{1-\rho^{k+1}} & \rho\neq 1\\ \frac{k}{2} & \rho=1 \end{matrix}\right.

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L_{q}=\left\{\begin{matrix} \frac{\rho^{2}}{1-\rho}-\frac{(k+\rho)\rho^{k+1}}{1-\rho^{k+1}} & \rho\neq 1\\ \frac{k(k-1)}{2(k+1)} & \rho=1 \end{matrix}\right.

可知:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=L_{q}+(1-P_{0})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda _{e}=\mu(1-P_{0})

(5)M/M/S/m/m排队模型

M/M/S/m/m排队模型是顾客源有限的排队系统,即至多只有有限个(m个)顾客来到服务系统。一旦系统中已有m个顾客,就不会再有新顾客到达,除非系统中的一些顾客得到服务又返回顾客源,系统才可能有顾客继续来到。

【笔记】运筹(中)——Rita_Aloha_第2张图片

有限源服务系统的典型例子是机器看管问题。假定有S个工人共同看管m台机器(m\geqslant Sm台机器就是顾客源)。每当机器发生故障时,就需要一位工人负责修理,使其恢复生产。所以,出故障的机器就是要求获得服务的顾客,工人就是服务台。当S个工人分别正在修理m台出故障的机器时,新发生故障的机器就只能等待工人来修理。假定:

①每台机器连续正常运转时间都服从参数为\lambda的负指数分布,每台机器平均连续运转的时间为\frac{1}{\lambda }\lambda就是一台机器在单位运转时间内发生故障的平均数(应注意,\lambda不是一台机器单位时间内发生故障的平均数,因为一台机器一旦发生了故障,在修复之前不会再发生故障。)

②每台机器的修复时间都服从参数为\mu的负指数分布,工人修理一台机器的平均时间为\frac{1}{\mu}

③各台机器在任意时段内连续运转的时间与工人修复机器的时间彼此独立。

若以\xi(t)表示时刻t不在正常运转的机器数,它是一个随机变量,因而\left \{ \xi(t)|t\geqslant 0 \right \}是一个随机过程,它的状态集合为有限集I=\left \{ 0,1,...,m \right \}。可以证明,\left \{ \xi(t)|t\geqslant 0 \right \}为一个生灭过程。所以,对该生灭过程来说,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda _{j}=(m-j)\lambda ,j=0,1,...,m-1

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu _{j}=\left\{\begin{matrix} j\mu & j=1,...,S\\ S\mu & J=S+1,...,m \end{matrix}\right.

于是,可得系统的稳态概率:

        ​​​​​​​        ​​​​​​​        P_{0}=\left [ \sum _{i=0}^{S}\binom{m}{i}\left ( \frac{\lambda }{\mu} \right )^{i}+\sum_{i=S+1}^{m}\binom{m}{i}\frac{i!}{S!S^{i-S}}\left ( \frac{\lambda }{\mu}^{i} \right ) \right ]^{-1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}=\left\{\begin{matrix} \binom{m}{j}\left ( \frac{\lambda }{\mu} \right )^{i}P_{0} & j=1,...,S\\ \binom{m}{j}\frac{j!}{S!S^{j-S}}\left ( \frac{\lambda }{\mu} \right )^{i}P_{0} & j=S+1,...,m \end{matrix}\right.

由此即可计算L,L_{q},D

        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=\sum_{j=0}^{m}jP_{j},L_{q}=\sum_{j=0}^{m-S}jP_{S+j},D=\sum_{j=S}^{m}P_{j}

有效到达率\lambda_{e}的计算公式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lambda _{e}= \lambda (m-L)

应用李特尔公式和上式,即可计算WW_{q}

特别当S=1时,有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{0}=\left [ \sum_{i=0}^{m}\frac{m!}{(m-i)!}\left ( \frac{\lambda }{\mu} \right )^{i} \right ]^{-1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{j}=\frac{m!}{(m-j)!}\left ( \frac{\lambda }{\mu} \right )^{i}P_{0}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=m-\frac{\mu}{\lambda }(1-P_{0})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L_{q}=L-(1-P_{0})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W=\frac{m}{\mu(1-P_{0})}-\frac{1}{\lambda }

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W_{q}=W-\frac{1}{\mu}

系统M/M/S/m/的服务要比S个M/M/1/m/m系统来得好。

4.一般服务分布M/G/1排队模型

(1)M/G/1排队模型

M/G/1排队模型是1个服务台的等待制服务系统,输入过程是以\lambda为参数的最简单流,各顾客的服务时间是相互独立且具有相同分布的随机过程,其数学期望和方差分别为\frac{1}{\mu}\sigma ^{2}。服务台的服务强度

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \rho=\frac{\lambda }{\mu}

\rho<1时,有如下结论:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P_{0}=1-\rho

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=\rho +\frac{\rho^{2}+\lambda ^{2}\sigma ^{2}}{2(1-\rho)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L_{q}=\frac{\rho^{2}+\lambda ^{2}\sigma ^{2}}{2(1-\rho)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W_{q}=\frac{\rho^{2}+\lambda ^{2}\sigma ^{2}}{2\lambda (1-\rho)}

同时可知,忙期的平均长度为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        EQ=\frac{1}{\mu-\lambda }

在忙期内被服务的顾客的平均数为\frac{1}{1-\rho}

可见,在平均服务时间不能缩减时,也能减少服务时间方差的办法来减少平均队长和降低顾客的等待时间。

(2)M/D/1排队模型

M/D/1排队模型的服务时间为确定的常数\frac{1}{\mu},其方差\sigma ^{2}=0。于是,当\rho=\frac{\lambda }{\mu}<1时,有下列公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=\rho+\frac{\rho^{2}}{2(1-\rho)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L_{q}=\frac{\rho^{2}}{2(1-\rho)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        W_{q}=\frac{\rho^{2}}{2\lambda (1-\rho)}

(3)M/E_{k}/1排队模型

在 M/E_{k}/1排队模型中,顾客的服务时间V服从爱尔朗分布,此时有

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        EV=\frac{1}{\mu},DV=\frac{1}{k\mu^{2}}

因此,当\rho<1时,有下列各式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L=\rho+\frac{(k+1)\rho^{2}}{2k(1-\rho)}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​L_{q}=\frac{(k+1)\rho^{2}}{2k(1-\rho)}
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​W_{q}=\frac{(k+1)\rho}{2k(\mu-\lambda )}

 1.运筹学教材编写组 编. 《运筹学》第4版. 清华大学出版社. 1982

2.傅家良 编著. 《运筹学方法与模型》. 复旦大学出版社. 2014

3.第三章 效用函数 - 豆丁网

你可能感兴趣的:(动态规划,自动驾驶,机器学习)