应用一图论算法图论在计算机处理问题中占有重要地位,现实中的很多问题最终都可以转化成图论问题,或者要借助图结构来存储和处理。
但是怎么把一图存入计算机就要涉及到数学建模的知识。
比如下面一图:如果要求出从节点v1到节点v5的所有路径,就可以借助计算机来很轻松的解决。
但前提条件是,必须要把图以一种计算机可以理解的形式存进去,即要把它抽象为数学问题。
在此,我们需要定义一些关于图的概念,以便更好的描述问题。
边与顶点的关系有如下几种典型情况:简单图:无自回环,无重边的图。
无向图:边没有指向,1212e .i i i i i ψ()={v ,v }=v v 此时称边e i 与顶点12i i v ,v 关联,称顶点1i v 与顶点2i v 邻接。
有向图:边有指向,1212e .i i i i i ψ()=(v ,v )=v v下面是具体涉及到图如何存储的问题:1. 图G(V,E)的关联矩阵x R=(r )ij n m ,若G(V,E)为无向图,12i j ij i j j i j j v e r v e e v e e ⎧⎪=⎨⎪⎩与不关联与关联,为非自回环与关联,为自回环若G(V,E)为有向图,012i j ij i j i j v e r v e v e ⎧⎪=⎨⎪⎩与不关联是的起点是的终点因此该图可以用关联矩阵表示出来,如下所示110000*********10100100110100000111R ⎛⎫⎪⎪⎪= ⎪⎪ ⎪⎝⎭这样,我们就可以以矩阵的形式将图存入计算机2. 邻接矩阵图G(V,E)的邻接矩阵xn A=(a )ij n ,若G(V,E)为无向图,ij a =从i v 到的j v 边数,若不邻接,取0;若G(V,E)为有向图,ij a =从 i v 到j v 的有向边数,若无,取0.0110010011100110110101110A ⎛⎫⎪⎪ ⎪= ⎪ ⎪ ⎪⎝⎭应用二 动态规划问题动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。
20世纪50年代初美国数学家R.E.Bellman 等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。
也是信息学竞赛中选手必须熟练掌握的一种算法。
多阶段决策过程的最优化问题。
含有递推的思想以及各种数学原理(加法原理,乘法原理等等)。
动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。
举例线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;区域动规:石子合并,加分二叉树,统计单词个数,炮兵布阵等;树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等;背包问题:01背包问题,完全背包问题,分组背包问题,二维背包,装箱问题,挤牛奶。
多阶段决策的实际问题很多,下面通过具体例子,说明什么是动态规划模型中数学建模知识的运用。
最短路线问题:某工厂需要把一批货物从城市A运到城市E,中间可经过B1 、B2、B3、C1、C2、C3、D1、D2等城市,各城市之间的交通线和距离如下图所示,问应该选择一条什么路线,使得从A到E的距离最短?下面引进几个动态规划的基本概念和相关符号。
(1)阶段(Stage)把所给问题的过程,按时间和空间特征划分成若干个相互联系的阶段,以便按次序去求每个阶段的解,阶段总数一般用字母n表示,用字母k表示阶段变量。
如例中(最短路线问题)可看作是n=4阶段的动态规划问题,k=2表示处于第二阶段。
(2)状态(State)状态表示每个阶段开始时系统所处的自然状况或客观条件,它描述了研究问题过程状况。
描述各阶段状态的变量称为状态变量,常用字母s k表示第k阶段的状态变量,状态变量的取值围称为状态集,用S k表示。
如例l中,第一阶段的状态为A(即出发位置)。
第二阶段有三个状态:B1 、B2、B3,状态变量s2=B2表示第2阶段系统所处的位置是B2。
第2阶段的状态集S2={ B1 、B2、B3}。
动态规划中的状态变量应具有如下性质:当某阶段状态给定以后,在这个阶段以后过程的发展不受这个阶段以前各个阶段状态的影响。
也就是说,未来系统所处的状态只与系统当前所处的状态有关,而与系统过去所处的状态无关,即过去历史只能通过当前的状态去影响它未来的发展,这种特点称为无后效性(又称马尔可夫性)。
如果所选定的状态变量不具备无后效性,就不能作为状态变量来构造动态规划模型。
如例1中,当某阶段的初始状态即所在的城市选定以后,从这个状态以后的运货路线只与这个城市有关,不受以前的运货路线影响,所以是满足状态的无后效性的。
(3)决策(Decision)当系统在某阶段处于某种状态,可以采取的行动(或决定、选择),从而确定下一阶段系统将到达的状态,称这种行动为决策。
描述决策的变量,称为决策变量。
常用字母u k(s k)表示第k阶段系统处于状态s k时的决策变量。
决策变量的取值围称为决策集,用D k(s k)表示。
在例l的第二阶段中,若从状态B2出发,可以做出三种不同的决策,其允许的决策集为D2(B2)={ C1、C2、C3},决策u 2(B2)= C2表示第二阶段处于状态B2,选择的确行动下一阶段是走到C2。
(4)策略(Policy)系统从第k阶段的状态s k开始由每阶段的决策按顺序组成的决策序列{ up s。
k(s k) ,u k+1(s k+1),…,u n(s n)}称为一个策略(k=1,2, …,n),记作,()k n k 在例l中,p2,4(B2)={ u 2(B2)= C2,u3(C2)= D1,u 4(D1)=E}是一个策略,表示第二阶段从状态B2出发,沿着B2→C2→D1→E的方向走到终点。
注意策略必须是一串实际可行的序列行动。
(5)状态转移方程系统由这一阶段的—个状态进行决策后转变到下—阶段的另—个状态称为状态转移,状态转移既与状态有关,又与决策有关,描述状态转移关系的方程称为状态转移方程,记为:s k+1=T k (s k ,u k )它的实际意义是当系统第k 阶段处于状态s k 做决策u k 时,第k+1阶段系统转移到状态s k+1。
状态转移方程在不同的问题中有不同的具体表现形式,在例l 中,状态转移方程表示为:s k+1=u k (s k )。
(6)阶段指标阶段效益是衡量系统阶段决策结果的一种数量指标,记为:(,)k k k v s u表示系统在第k 阶段处于状态s k 做出决策u k 时所获得的阶段效益。
这里的阶段效益在不同的实际问题中有不同的意义。
在例l 中它表示两个中转站的距离,如2222222(,())(,)7v B u B C d B C ===表示从中转站B 2走到中转站C 2之间的距离为7。
更一般地有(,())(,())k k k k k k k v s u s d s u s =。
(7)指标函数指标函数是用来街量所实现过程的优劣的一种数量指标,它是一个定义在全过程和所有后部子过程上的确定的数量函数,记为:,11(,,,,,,)1,2,,k n k k k k k k V s u s u s u k n ++=它应具有可分离性,并满足递推关系式:,111,11(,,,,,,)[,,(,,,,)]k n k k k k k k k k k n k k k k V s u s u s u s u V s u s u ϕ+++++=常见的指标函数的形式是:1)过程和任一子过程的指标是它所包含的各阶段指标的和。
既,111,111(,,,,,,)(,)(,)(,,,,)]nk n k k k k k k j j j k k k k n k k k k j V s u s u s u v s u v s u V s u s u +++++===+∑2)过程和任一子过程的指标是它所包含的各阶段指标的积。
既,111,111(,,,,,,)(,)(,)(,,,,)]nk n k k k k k k j j j k k k k n k k k k j V s u s u s u v s u v s u V s u s u +++++===⋅∏(8)最优值函数指标函数的最优值,称为最优值函数,记为()k k f s 。
它表示系统在第k 阶段处于状态s k 时按最优策略行动所获得总的效益。
既,,11()()(,,,,,,)k n k k k k n k k k k k k p s f s opt V s u s u s u ++=其中opt 是最优化(optimization )的缩写,根据实际问题可取max(最大值)和min(最小值),,()k n k p s opt 表示对所有允许策略,()k n k p s 使后面算式取最优。
下面利用动态规划的逆推归纳法,将例1从最后一个城市E 逐步推算到第一个城市A ,在此()k k f s 表示第k 阶段从城市s k 到城市E 最短路。
1)当k=4时:要求44()f s ,由于第4阶段只有两个城市D 1、D 2(即s 4的取值为D 1、D 2),从D 1到E 只有一条路,故*41141()(,)4,()f D d D E u D E ===,同理*42242()(,)3,()f D d D E u D E ===。
2)当k=3时:s 3的取值为C 1、C 2、C 3,从C 1出发到E 有两条路,一条是经过D 1到E ,另一条是经过D 2到E ,显然:1141*313111242(,)()34()min min 7,()(,)()53d C D f D f C u C D d C D f D ++⎧⎫⎧⎫====⎨⎬⎨⎬++⎩⎭⎩⎭即从C 1出发到E 的最短路为7,相应决策为*311()u C D =,最短路线是C 1→D 1→E 。
同理 2141*323222242(,)()64()5,()(,)()23d C D f D f C u C D d C D f D ++⎧⎫⎧⎫====⎨⎬⎨⎬++⎩⎭⎩⎭3141*333313242(,)()14()5,()(,)()33d C D f D f C u C D d C D f D ++⎧⎫⎧⎫====⎨⎬⎨⎬++⎩⎭⎩⎭2)当k=2时:s 2的取值为B 1、B 2、B 3,从B 1出发到E 有三条路,分别是经过C 1、C 2、C 3到E ,则有:1131*2112322121333(,)()67()(,)()459,()55(,)()d B C f C f B d B C f C u B C d B C f C ++⎧⎫⎧⎫⎪⎪⎪⎪=+=+==⎨⎬⎨⎬⎪⎪⎪⎪++⎩⎭⎩⎭同理 2131*2222322232333(,)()87()(,)()7511,()65(,)()d B C f C f B d B C f C u B C d B C f C ++⎧⎫⎧⎫⎪⎪⎪⎪=+=+==⎨⎬⎨⎬⎪⎪⎪⎪++⎩⎭⎩⎭3131*233232233333(,)()77()(,)()8512,()75(3,)()d B C f C f B d B C f C u B C d B C f C ++⎧⎫⎧⎫⎪⎪⎪⎪=+=+==⎨⎬⎨⎬⎪⎪⎪⎪++⎩⎭⎩⎭2)当k=1时:s 1的只有一个取值为A. 从A 出发到E 有三条路,分别是经过B 1、B 2、B 3到E ,则有:121*122211323(,)()89()min (,)()min 91117,()612(,)()d A B f B f A d A B f B u A B d A B f B ++⎧⎫⎧⎫⎪⎪⎪⎪=+=+==⎨⎬⎨⎬⎪⎪⎪⎪++⎩⎭⎩⎭于是得到从A 到E 的最短距离17,为了找出最短路线,按计算的顺序逆推回去,可得到最优策略为:****1,41121232242(){(),(),(),()}p A u A B u B C u C D u D E =====,最短路线是A →B 1→C 2→D 2→E 。