文档库 最新最全的文档下载
当前位置:文档库 › 动态规划

动态规划

动态规划
动态规划

动态规划

————————————————————————————————作者:————————————————————————————————日期:

动态规划

和分治算法一样,动态规划(dyna mic pro gr ammi ng)是通过组合子问题的解而解决整个问题的。从第2章已经知道,分治算法是指将整个问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解。与此不同,动态规划使用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。在这种情况下,若用分治法则会做许多不必要的工作,及重复的求解公共的子子问题。动态规划算法对每个子子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案。

动态规划通常应用于最优化问题。此类问题可能有很多种可行解。每个解有一个值,而我们希望找出一个具有最优(最大或最小)值的解。称这样的解为该问题的“一个”最优解(而不是“确定”的最优解) ,因为可能存在多个取最优值的解。

动态规划算法的设计可以分为如下4个步骤:

1) 描述最优解的结构。

2) 递归定义最优解的值。

3) 按自底向上的方式计算最优解的值。

4) 由计算出的结果构造一个最优解。

第1~3步构成问题的动态规划解的基础。第4步在只要求计算最优解的值时可以略去。如果的确做了第4步,则有时要在第3步的计算中记录一些最优化问题,使构造一个最优解变得容易。

接下来的各节利用动态规划方法来求解一些最优化问题。15.1节分析包括两个汽车装配线的调度问题,在经过每个装配站后,组装中的汽车可以留在同一条装配线上,或者移动到另外一条装配线。15.2节讨论如何做一连串的矩阵乘法,使得所作的标量乘法总次数最少。在给出这些动态规划的例子之后,15.3节讨论为使动态规划成为可行的求解技术,一个问题必须具备的两个关键特征。然后,15.4节介绍如何找出两个序列的最长公共子序列。最后,15.5节介绍在已知待搜索的关键字分布的情况下,如何利用动态规划构造最优的二叉查找树。

15.1装配线调度

第一个动态规划的例子是求解一个制造问题。Col onel 汽车公司在有两条装配线的工厂内生产汽车,如图15-1所示。一个汽车底盘在进入每一条装配线后,在一些装配站中会在底盘上安装部件,然后,完成的汽车在装配线的末端离开。每一条装配线上有n个装配站,编号为j =1, 2, …, n。将装配线i (i 为1或2)的第j 个装配站表示为j i S ,。装配线1的第j个站(j S ,1)和装配线2的第j 个站(j S ,2)执行相同的功能。然而,这些装配站是在不同的时间建造的,并且采用了不同的技术。因此,每个站上所需的时间是不同

的,即使是在两条不同装配线相同位置的装配站上也是这样。我们把在装配站j i S ,上所需的装配时间记为j i a ,。如图15.1所示,一个汽车底盘进入其中一条装配线,然后从每一站进行到下一站。底盘进入装配线i 的进入时间为i e ,装配完的汽车离开装配线i 的离开时间为i x 。

在正常情况下,一旦一个底盘进入一条装配线后,它只会经过该条装配线。在相同的装配线中,从一个装配站到下一个装配站所花的时间可以忽略。偶尔会来一个特别急的订单,客户要求尽可能快地制造这些汽车。对这些加急的订单,底盘仍然依序经过n 个装配站,但是工厂经理可以将部分完成的汽车在任何装配站上从一条装配线移到另一条装配线上。把已经通过装配站j i S ,的一个底盘从装配线i移走所花的时间为j i ,t ,其中i =1,2,而j=1,2, …, n -1(因为在第n 个装配后,装配已经完成)。问题是要确定在装配线1内选择哪些站以及在装配线2内选择哪些站,以使汽车通过工厂的总时间最小。在图15-2a 所示的例子中,最快的总时间是选择装配线1的装配站1,3和6,以及装配线2的装配站2,4和5。

图15-1 一个找出通过工厂装配线的最快方式的制造问题。共有两条装配线,每条有n个装配站;装配线i 的第j 个装配站表示为j i S ,,在该站的装配时间是j i a ,。一个汽车底盘进入工厂,然后进入装配线i (i 为l 或2),花费时间i e 。在通过一条线的第j个装配站后,这个底盘来到任一条线的第(j +1)个装配站。如果它留在相同的装配线,则没有移动的开销;但是,如果在装配站j i S ,后,它移动到了另一条线上.则花费时间j i t ,。在离开一条线的第n 个装配站后,完成的汽车花费时间i x 离开工厂。待求解的问题是确定应该在装配线1内选择哪些站、在装配线2内选择些站,才能使汽车通过工厂的总时间量小

显然,当有很多个装配站时,用强力法(brut e fo rce)来极小化通过工厂装配线的时间是不可行的。如果给定一个序列,在装配线1上使用哪些站,在装配线2上使用哪些站,则可以在)(n Θ时间内,很容易计算出一个底盘通过工厂装配线要花的时间。不幸的是,选择装配站的可能方式有2n 中:可以把装配线1内使用的装配站集合看作{1, 2, …, n}的一个子集,并注意到有2n 个这样的子集。因此,要通过穷举所有可能的方式,然后计算每种方式花费的时间来确定最快通过工厂的路线,需要)2(n Ω时间,这在n 很大时是不可行的。

图15-2 a)一个装配问题的实例,代价标为i e 、j i ,a 、j i ,t 以及i x 。深阴影的路径表示通过工厂的最快方式 b) a)中的fi [j ],f *,li [j ]以及l *的实例的值

步骤1:通过工厂最快路线的结构

动态规划方法的第一个步骤是描述最优解的结构的特征。对于 装配线调度问题,可以如下执行。考虑底盘从起始点到装配站j ,1S 的最快可能路线。如果j =1,则底盘能走的只有一条路线,所以很容易就可以确定它的装配站j ,1S 花费了多少时间。对于j =2, 3, …, n ,则有两种选择:这个底盘可能是从装配站1-j ,1S 直接到装配站j ,1S ,在相同的装配线上,从装配站j -1到j 的时间是可以忽略的。或者,这个底盘可能来自装配站1-j ,2S ,然后再移动到装配站1-j ,1S ,移动的代价是1-j ,2t 。我们将分别考虑这两种可能性,后面可以看到,它们之间其实是有很多共性的。

首先,假设通过装配站j ,1S 的最快路线通过了装配站1-j ,1S 。关键的一点是这个底盘必定是利用了最快的路线从开始点到装配站1-j ,1S 的。这是为什呢?如果存在一条更快的路线通过1-j ,1S ,我们就可以采用这条更快的路线,从而得到通过装配站j ,1S 的更快的路线:这就形成了矛盾。

类似地,假设通过装配站j ,1S 的最快路线就是通过装配站1-j ,2S 。现在,我们注意到这个底盘必定是利用了最快的路线从开始点到装配站1-j ,2S 的。理由是相同的:如果有一条更快的通过装配站1-j ,2S 的路线,就可以采用这条更快的路线,从而得到通过装配站j ,1S 的更快的路线,这是一个矛盾。

更一般地,对于装配线调度问题,一个问题的(找出通过装配站j ,i S 的最快路线)最优解包含了子问题(找出通过1-j ,1S 和1-j ,2S 的最快路线)的一个最优解。我们称这个性质为最优子结构,这是是否可以应用动态规划方法标志之一,具体会在15.3节中看到。

下面利用最优子结构来说明,可以利用子问题的最优解来构造原问题的一个最优解。

对于装配线调度问题,推理如下。观察一条通过装配站j ,1S 的最快路线,会发现它必定是经过装配线1或2上的装配站j -1。因此,通过装配站j ,1S 的最快路线只能是以下二者之一:

通过装配站1-j ,1S 的最快路线,然后直接通过装配站j ,1S ;

通过装配站1-j ,2S 的最快路线,从装配线2移动到装配线1,然后通过装配站j ,1S 。 利用对称的推理是想,通过装配站j ,2S 的最快路线也只能是以下二者之一:

通过装配站1-j ,2S 的最快路线,然后直接通过装配站j ,2S ;

通过装配站1-j ,1S 的最快路线,从装配线1移动到装配线2,然后通过装配站j ,2S 。 为了解决这个问题,即寻找通过任一条装配线上的装配站j 的最快路线,我们解决它的子问题,即寻找通过两条装配线上的装配站j-1的最快路线。

所以,对于装配线调度问题,通过建立子问题的最优解,就可以建议原问题某个实例的一个最优解了。

步骤2:一个递归的解

在动态规划方法中,第二个步骤是利用子问题的最优解来递归定义一个最优解的值。对于装配线的调度问题,我们选择在两条装配线上通过装配站j 的最快路线的问题来作为子问题,j =1,2,…,n 。令fi[j]表示一个底盘从起点到装配站j ,i S 的最快可能时间。

我们的最终目标是确定底盘通过工厂的所有路线的最快时间,记为f *。底盘必须一路通过装配线1或2通过装配站n ,然后到达工厂的出口。由于这些路线的较快者就是通过整个工厂的最快路线,有:

)][,][m in(*2211x n f x n f f ++= (15-1)

要对f1[1]和f 2[1]进行推理也是很容易的。不管在哪一条装配线上通过装配站1,底盘都是直接到达该装配站的。于是,

l a e f ,111]1[+= (15-2) l a e f ,222]1[+= (15-3)

现在来考虑如何计算f i [j ],其中j =2,3,…,n (i =l, 2)。先来看一看f 1[j ].前面说过,

通过装配站j ,1S 的最快路线或者是通过装配站1-j ,1S ,然后直接通过装配站j ,1S 的最快路线,或者是通过装配站1-j ,2S ,从装配线2移动到装配线1.然后通过装配站j ,1S 的最快路线。在第一种情况中,有f 2[j ] = f 1[j -1]+ j ,1a ,而在后一种情况中,f1[j] = f 2[j -1]+ 1-j ,2t +j ,1a 。所以:

)]1[,]1[min(][,11,22,111j j j a t j f a j f j f ++-+-=- (15-4) 其中j =2, 3, …, n 。对称地,有:

)]1[,]1[min(][,21,11,222j j j a t j f a j f j f ++-+-=- (15-5)

其中j =2, 3, …, n 。合并公式(15.2)~公式(15.5),得到递归公式:

?

??++-+-+=-)]1[,]1[min(][,11,22,11,111j j j j a t j f a j f a e j f (15-6)

???++-+-+=-)]1[,]1[min(][,21,11,22,222j j j j a t j f a j f a e j f (15-7) 图15-2b 示出了图15 -2a 例子中的由等式(15.6)和等式(15.7)计算出的fi [j ]值,以及f *的值。

f i [j]的值就是子问题最优解的值。为了有助于跟踪最优解的构造过程,我们定义l i[j ]为装配线的编号(1或2),其中的装配站j -l 被通过装配站j ,i S 的最快路线所使用。这里,i =l,2且j =2,3,…,n。(我们避免定义li [1],因为在任一条装配线上都没有一个装配站在站l 前面)。此外,还定义l *为这样的装配线,其内的装配站n被通过整个工厂的最快路线所使用。l i [j ]的值可以帮助找到一个最快的路线。利用图15-2b 中所示的l *的值和l i [j ],可以如下找到如图15-2a 所示通过工厂的一条最快路线。从l*=l 开始,使用装配站1,6S 。现在看到l 1[6]值为2,所以使用装配站2,5S 。接着,可以看到l2[5]=2(使用装配站2,4S ),l 2[4] =1(装配站1,3S ).l 1[3]=2(装配站2,2S ),以及l2[2]=1(装配站1,1S )。

步骤3:计算最快时间

此时,写出一个递归算法来计算通过工厂的最快路线是一件简单的事情,它基于公式(15.1)以及递归式(15.6)和式(15.7)。这种递归算法有一个问题:它的执行时间是关于n 的指数形式。要知道为什么,令r i (j )为递归算法中引用f i[j ]的次数。由公式(15.1),有

1)()(21==n r n r (15.8)

由递归式(15.6)和式(15.7)得到

)1()1()()(2121+++==j r j r j r j r (15.9)

其中j =1, 2, …, n -l 。练习15. 1-2会要求读者证明r i[j ]=2n -j。这样,单是f 1[1]就被引用了2n -1次!如练习15.1-3要求读者证明的那样,引用所有f i[j]值的总次数为)2(n Θ。

如果在递归的方式中以不同的顺序来计算f i [j]的值,能做得更好。注意对于2≥j ,fi [j]的每一个值仅依赖于f 1[j -1]和f2[j -1]的值。通过以递增装配站编号j 的顺序来计算fi [j ]的值,即在图15-2b 中从左到右,可以在)(n Θ时间内计算出通过工厂的最快路线,以及其所花的时间。FAS TEST-WAY 程序以值j ,i a ,j ,i t ,i e 和i x ,以及在每条装配线中装配站的数目n作为输入。

FAST EST-WAY(a , t, e , x, n )

1 f 1[1] ← e 1 + a 1,1

2 f2[1] ←e2 + a2,1

3for j←2to n

4do iff1[j- 1]+ a1,j≤ f2[j - 1] + t2,j-1+a1,j

5 then f1[j]←f1[j- 1] + a1,j

6l1[j]← 1

7 elsef1[j]←f2[j -1] + t2,j-1+a1,j

8l1[j] ← 2

9 iff2[j - 1] +a2,j≤ f1[j - 1]+t1,j-1 + a2,j

10 then f2[j]← f2[j-1] + a2,j

11 l2[j] ← 2

12elsef2[j]∞f1[j- 1] +t1,j-1 + a2,j

13 l2[j]←1

14 if f1[n]+x1≤ f2[n] +x2

15thenf* = f1[n] +x1

16 l*= 1

17 elsef* = f2[n] + x2

18 l* =2

FASTEST-WAY的工作方式如下。第1~2行利用公式(15.2)和公式(15.3)来计算f1[1]和f2[1]。然后第3~13行的for循环计算fi[j]和l i[j],i=l, 2,且j=2, 3,…, n。第4~8行利用公式(15-4)来计算f1[j]和l1[j],而第9~13行利用公式(15.5)来计算f2[j]和l2[j]。最后,第14~18行利用公式(15.1)来计算f*和l*。因为第1~2行与第14~18行花费常数时间,而且第3~13行的for循环的n-l次迭代中的每一个也花费常数时间,所以整个过程花费)

时间。

(n

观察fi[j]和l i[j]值的计算过程的一种方式是在表格中填入记录。在图15. 2b中,我们在表格内从左到右填入f i[j]和l i[j]的数值(在每一列中从上到下)。要填入一个记录f i[j],需要f1[j-1]和f2[j-1]的值,由于已经计算并保存了它们,只需简单地查表来确定它们的值。

步骤4:构造通过工厂的最快路线

计算出f i[j],f*,li[j],l*的值之后,需要构造在通过工厂的最快路线中使用的装配站的序列。我们在上面已经讨论了如何在图15-2的例子中做到这一点。

下面的过程以站号的递减顺序,输出所使用的各个装配站。练习15. 1-1要求读者修改这个过程,使它按站号的递增顺序输出各个装配站。

PRINT-STATIONS(l,l*, n)

1 i←l*

2print"line "i", station " n

3 forj←ndownto2

4 doi← li[j]

5 pr in t "line " i ", st ati on " j - 1

在图15—2的例子中,PRI NT -STATIONS 将产生以下的输出:

line 1, stat ion 6

l in e 2, st at ion 5

li ne 2, s tat ion 4

li ne 1, station 3

line 2, s tat io n 2

l ine 1, statio n 1

练习

15. 1-1说明应如何修改程序PRIN T-STA TIONS,让它以站号的递增顺序输出各装配站。(提示:利用递归。)

15. 1-2利用公式(15. 8)、(15. 9)及替换法来证明:在递归算法中引用f i [j ]的次数r i (j )等于2n -j 。

15. 1-3利用练习15. 1-2的结果,证明所有引用f i[j ]的总次数(即∑∑==211)(i n

j i j r )

等于2n +1-2。 15. 1-4包含f i [j ]和l i[j ]值的表格共含有4n -2个表项。说明如何把空间需求缩减到共2n +2个表项,仍然能够计算出f *,并且仍然能够输出通过工厂的最快路线上的所有装配站。

15. 1-5 Can ty 教授猜测存在着某些i e ,j ,i a 以及j ,i t 的值,使得FA STE ST-W AY 程序在某个装配站j 上,产生出满足l 1[j]=2且l 2[j ]=l 的l i [j]值。假设所有的移动代价j ,i t 是非负值,说明Canty 教授的猜测是不正确的。

15.2 矩阵链乘法

我们用来说明动态规划的下一个例子是解决矩阵链相乘问题的一个算法。给定由n 个要相乘的矩阵构成的序列(链)。要计算乘积

A 1 A2…A n (15. 10)

为计算式(15. 10),可将两个矩阵相乘的标准算法作为一个子程序,根据括号给出的计算顺序做全部的矩阵乘法。一组矩阵的乘积是加全部括号的(fully parenthesize d),如果它是单个的矩阵,或是两个加全部括号的矩阵的乘积外加括号而成。矩阵的乘法满足结合率,故无论怎样加括号都会产生相同的结果。例如,如果矩阵链为<A 1,A2.A 3,A 4>,乘积A 1A 2A 3A 4可用五种不同方式加全部括号:

(A1 (A2 (A 3 A 4))) ,

(A 1 ((A 2 A 3) A 4)) ,

((A 1 A 2) (A 3 A4)) ,

((A 1 (A 2 A 3)) A 4) ,

(((A 1 A 2) A3) A 4).

矩阵链加括号的顺序对求积运算的代价有很大的影响。先来看看两个矩阵相乘的代价。标准的算法由下面的伪代码给出。属性rows和columns表示矩阵的行数和列数。

MATRIX-MULTIPLY(A, B)

1ifcolumns[A] ≠ rows[B]

2then error"incompatible dimensions"

3 elsefori← 1torows[A]

4doforj←1to columns[B]

5 doC[i,j] ← 0

6fork← 1 tocolumns[A]

7do C[i,j] ← C[i, j] + A[i, k] ·B [k,j]

8return C

仅当两个矩阵A和B相容(即A的列数等于B的行数)时,才可以进行相乘运算。如果A是个p×q矩阵,B是个q×r矩阵,则结果矩阵C是一个p×r矩阵。计算C的时间由第7行中标量乘法运算的次数决定,这个次数等于pqr。接下来对运行时间的分析都将以标量乘法次数来表示。

为说明由不同的加全部括号顺序所带来的矩阵乘积的代价不同,考虑三个矩阵的链<A1, A2, A3>的问题。假设三个矩阵的维数分别为10×100,100×5,5×50。如果按((A1A2)A3)规定的次序来做乘法,求10×5的矩阵乘积A1A2,要做10×100×5=5000次的标量乘法运算,再乘上A

还要做10×5×50=2500次标量乘法,总共7500次标量

乘法运算。如果按(A1(A2A3))的次序来计算,则为求100×50的矩阵乘积A2A3要做100×5×50=25 000次标量乘法运算,再乘上A1还要10×100×50=50000次标量乘法,总共75000次标量乘法运算。因此,按第一种运算次序进行计算就要快到10倍。

矩阵链乘法问题可表述如下:给定n个矩阵构成的一个链,其中i=1,2,…,n。矩阵Ai的维数为p i-1×pi,对乘积A1A2…An以一种最小化标量乘法次数的方式进行加全部括号。

注意在矩阵链乘法问题中,实际上并没有把矩阵相乘。目的仅是确定一个具有最小代价的矩阵相乘顺序。通常,与真正在执行矩阵乘法时所节省的时间相比,在确定最优顺序上花费的时间会得到更多的回报(例如只做7500次标量乘法而不是75000次)。

计算全部括号的重数

在利用动态规划来解矩阵链乘法问题之前,应认识到靠穷尽所有可能的加全部括号方案不会得到一个有效的算法。设P(n)表示一串n个矩阵可能的加全部括号方案数。当n=1时,只有一个矩阵,因此只有一种方式来加全部括号矩阵乘积。当2

n时,一个加全

部括号的矩阵乘积,就是两个加全部括号的矩阵子乘积的乘积,而且这两个子乘积之间

的分裂可能发生在第k个和第(k +1)个矩阵之间,其中k =1,2,…,n -l 。因此,可得递归式

?????-=∑-=11)()(1)(n k k n P k P n P 2n 1n ≥=如果如果 (15-11)

思考题12-4曾要求读者证明一个类似递归式的解是Cata lan 数序列,其增长的形式为)/4(2/3n n Ω。一个较简单的练习(参见练习15.2—3)将证明递归式(15. 11)的解为)2(n Ω。所以解的个数是行的指数形式,而且对确定矩阵链的最优加全部括号来说,穷尽搜索不是一个好的策略。

步骤1:最优加全部括号的结构

动态规划方法的第一步是寻找最优的子结构,然后,利用这一子结构,就可以根据子问题的最优解构造出原问题的一个最优解。对于矩阵链乘法问题,可以如下执行这个步骤。为方便起见,用记号A i..j ,表示对乘积A i Ai +1…Aj 求值的结果,其中j i ≤。注意如果这个问题是非平凡的,即j i <,则对乘积AiA i+1…A j 的任何加全部括号形式都将乘积在A k 与A k+l 之间分开,此处k 是范围1≤k <j之内的一个整数。这就是说,对某个k 值,首先计算矩阵A i ..k 和A k +1..j,然后把它们相乘就得到最终乘积A i..j 。这样,加全部括号的代价就是计算Ai..k和A k +1..j的代价之和,再加上两者相乘的代价。

这个问题的最优子结构如下。假设A i A i +1…A j 的一个最优加全部括号把乘积在A k 与A k +1之间分开,则对Ai A i+1…A j 最优加全部括号的“前缀”子链Ai A i +1…A k 的加全部括号必须是Ai Ai +1…A k的一个最优加全部括号。为什么呢?如果A i Ai +1…A k有一个代价更小的加全部括号.那么把它替换到A i Ai+1…A j的最优加全部括号中去就会产生A i Ai +1…A j 的另一种加全部括号,而它的代价小于最优代价,产生了矛盾。类似的观察也成立,即Ai A i+1…Aj 的最优加全部括号的子链A k +1A k+2…A j 的加全部括号:必须是Ak +1A k+2…A j的一个最优加全部括号。

现在,就可以利用所得到的最优子结构,来说明能够根据子问题的最优解来构造原问题的一个最优解。已经看到,一个矩阵链乘法问题的非平凡实例的任何解法都需要分割乘积,而且任何最优解都包含了子问题实例的最优解。所以,可以把问题分割为两个子问题(最优加全部括号A i Ai +1…A k 和Ak+1A k+2…A j ),寻找子问题实例的最优解,然后合并这些子问题的最优解,来构造一个矩阵链乘法问题实例的一个最优解。必须保证在寻找一个正确的位置来分割乘积时,我们已经考虑过所有可能的位置,从而确保已检查过了最优的一个。

步骤2:一个递归解

接下来,根据子问题的最优解来递归定义一个最优解的代价。对于矩阵链乘法问题,子问题即确定A i Ai+1…Aj 的加全部括号的最小代价问题,此处n j i ≤≤≤1。设m[i , j ]为计算矩阵A i..j 所需的标量乘法运算次数的最小值;对整个问题,计算A 1..n 的最小代价

就是m [1, n ]。

我们这样来递归定义m[i , j ]。如果i=j,则问题是平凡的;矩阵链只包含一个矩阵A i.. i =Ai ,故无需做任何标量乘法来计算乘积。因此m [i, i ]=0.对i =1,2,…,n 。当i<j时,为计算m [i , j ],可以利用步骤1中得出的最优解的结构。假设最优加全部括号将乘积A i Ai+1…A j 从A k和A k +1之间分开,其中j k i <≤。因此m[i , j]就等于计算子乘积A i..k 和A k +1..j 的代价,再加上这两个矩阵相乘的代价的最小值。回忆起每个矩阵A i 是p i -1×pi 的,可以看出,计算A i ..k A k +1..j要做p i-lpk p j 次标量乘法。所以得到:

m [i, j ] = m [i, k ] + m [k+1, j] + p i-l p k p j

这个递归公式假设我们已知k的值,而实际上我们并不知道。但是,k 只有j -i 个可能的值,即k =i , i +l, …, j -1。最优加全部括号必然要用到其中之一的k 值,故只需逐个检查这些值以找到最佳值。这样.关于对乘积A i A

i+1…A j 的加全部括号的最小代价的递归定义为

?????+++=-<≤}],1[],[{min 0],[m 1j k i j k i p p p j k m k i m j i j i j i <=如果如果 (15. 12)

各m [i , j]的值给出了子问题的最优解的代价。为了有助于跟踪如何构造一个最优解,定义s [i, j ]为这样的一个k 值:在该处分裂乘积A i A i +1…Aj后可得一个最优加全部括号。亦即s [i , j ]等于使m[i , j ]= m[i, k]+ m [k+1, j ]+ p i-l p k p j 的k 值。

步骤3:计算最优代价

现在,可以很容易地根据递归式(15. 12),来写一个计算乘积A 1A2…A n 的最小代价m [1, n ]的递归算法。然而,在15.3节中可以看到,这个算法具有指数时间,它与检查每一种加全部括号乘积的强力法差不多。

可以注意到原问题只有相当少的子问题:每一对满足n j i ≤≤≤1的i和j对应一个

问题,总共 )(22n n n Θ=+???

? ??。一个递归算法在其递归树的不同分支中可能会多次遇到同

一个子问题。子问题重叠这一性质是是否可以采用动态规划的第二个标志(第一个标志是最优子结构)。

我们不是递归地解递归式(15. 12).而是执行动态规划方法的第三个步骤,使用自底向上的表格法来计算最优代价。下面的伪代码假设矩阵A i 的维数是p i-1×p i ,i =l, 2, …, n 。输入是一个序列p=

。其中le ngth [p ]=n +1。此程序使用—个辅助

表m [l..n,1..n ]来保存m [i , j ]的代价。使用—个辅助表s [l..n ,1..n ]来记录计算m [i, j ]时取得最优代价处k 的值。我们将利用表格s 来构造一个最优解。

为了正确实现自底向上的方法,必须确定哪些表项要被用来计算m [i , j]。公式

(15.12)说明计算一个有j-i+l个矩阵的矩阵链乘积时,其代价m[i, j]仅依赖于计算一

个有少于j-i+l个矩阵的矩阵链乘积的代价。也就是说,对k=i, i+l,…, j-l,矩阵Ai..

是k-i+l

表m的方式对应于求解按长度递增的矩阵链上的加全部括号问题。

MATRIX-CHAIN-ORDER(p)

1 n← length[p] - 1

2 for i←1to n

3 dom[i, i]← 0

4 for l← 2 to n?l is the chain length.

5 do for i← 1 ton-l+1

6 doj← i + l-1

7m[i,j] ←∞

8fork←i toj- 1

9do q← m[i,k] + m[k+ 1,j] + p

p k p j

i-1

10ifq < m[i, j]

11thenm[i, j] ← q

12 s[i, j] ← k

13 returnmands

该算法首先在第2~3行中对i=l,2,…,n置m[i,i] ←0(长度为1的链的最小代

价)。在第4~12行循环的第一次执行中,利用递归式(15. 12)来计算m[i, i+1],i=

1,2,…,n-l(长度l等于2的链的最小代价)。在循环的第二次执行中,计算m[i,i

+2],i=1,2,…,n-2(长度l等于3的链的最小代价),这样一直继续下去。在每一步中,第9~12行中计算出的m[i,i]仅依赖于已经计算出的表项m[i,k]和m[k+1,i]。

图15-3演示了对包含n=6个矩阵的链该算法的执行过程。因为我们仅对i≤j定义了m[i, j]。故表m中仅主对角线以上的部分被用到。该图已将表进行了旋转,使主对角线水平放置。矩阵链沿表的底部排列。用这样一种安排,在经过Ai的东北方向的直线与经过A j的西北方向的直线的交点上,可以找到子矩阵链A i Ai+1…Aj相乘的最小代价m[i,j]。表中的每一水平行包含相同长度的矩阵链的表项。过程MATRIX-CHAIN-OR DER自底向上地计算每一行,在每一行中又从左到右进行计算。表项m[i, j]是根据乘积pi-l p k p i(k=i,i+l,…,j-l)与所有在m[i, j]西南向和东南向的表项计算出来的。

图15-3 对n =6及下面各矩阵维数由MA TRIX-C HAI N-OR DER 计算出的表m和s

矩阵 维数

A 1 30 × 35

A 2 35 × 15

A 3 15 × 5

A 4 5 × 10

A5 10 × 20 A 6

20 × 25 MATR IX-CHAIN--ORDER 具有嵌套循环结构,运行时间为)(3n Ω。循环的嵌套层数为三层,每一层循环的下标(l ,i 和k )可至多取n-1个值。练习15. 2-4要求读者证明这个算法的运行时间实际上是)(3n Ω。另外,该算法还需要)(2n Θ的空间来保存m 和s。这样,与穷尽各种可能的加全部括号形式的指数时间方法相比,M AT RIX-CHA IN-ORDER 就要有效得多了。

对图中的两张表进行旋转,使其主对角线处于水平方向。在表m中仅用到了主对角线与上三角,而表s 中仅用到了上三。六个矩阵相乘所需的标量乘法的最少次数为m [l, 6]=15 125。在加了阴影的表项中,在第9行中计算下式时,具有相同阴影程度的对被放在一起。

??

???=??++=++=??++=++=??++=++=1137520103504375]5,5[]4,2[71252053510002625]5,4[]3,2[1300020153525000]5,3[]2,2[min ]5,2[541531521p p p m m p p p m m p p p m m m

7125=

步骤4:构造一个最优解

虽然MATRIX-CHAIN-ORDER确定了计算矩阵链乘积所需的最优标量乘法次数,但它没有直接说明如何对这些矩阵进行相乘。利用保存在表格s[l..n, 1..n]内的、经过计算的信息来构造一个最优解并不难。在每一个表项s[i,j]中,记录了对乘积A iAi+1….A j在A k与Ak+l之间,进行分裂以取得最优加全部括号时的k值。由此可知,按最优方式计算A1

..n

时,最终矩阵相乘次序是A1..s[1,n]As[1,n]+1..n。之前的矩阵乘法可

以递归地进行,因为s[l,s[l,n]]决定计算A1

..s[1,n]

中最后的矩阵乘法,而s[s[l,n]+l,n]则决定计算As[1,n]+1..n中最后的矩阵乘法。下面的递归过程在给定由MATRIX-CHAIN-ORDER计算出的表s以及下标i和j后,输出

PRINT-OPTIMAL-PARENS(s,i,j)

1ifi= j

2 then print"A"i

3else print"("

4 PRINT-OPTIMAL-PARENS(s, i, s[i,j])

5PRINT-OPTIMAL-PARENS(s,s[i, j] + 1,j)

6 print ")"

在图15-3的例子中,调用PRINT-OPTINtAL-PARENS(s,1,6)输出加全部括号((A l(A2A3))((A4A5)A6))。

练习

15.2-1对维数为序列<5,10,3,12,5,50,6>的各矩阵,找出其矩阵链乘积的一个最优加全部括号。

15-2-2 请给出一个递归算法MATRIX-CHAIN-MULTIPLY(A,s,i,j),使之在给出矩阵序列,和由MATRIX-CHAIN-ORDER计算出的表s,以及下标i和j后,能得出一个最优的矩阵链乘法。(初始调用为MATRIX-CHAIN-MULTIPLY(A,s,1,n))。

15. 2-3使用替换法证明递归公式(15. 11)的解为C(2n)。

15.2-4设R(i,j)表示在调用MATRIX-CHAIN-()RDER中计算其他表项时,表项m[i,j]被引用的次数。证明:对整个表总的引用次数为

∑∑==

-=

n i

n

j

n

n

j

i

R

11

3

3 )

,(

(提示:可以利用等式(A.3)。)

15. 2-5 证明:一个含n个元素的表达式的加全部括号中恰有n-l对括号。

15.3 动态规划基础

虽然我们刚刚讨论过动态规划方法的两个例子,但读者对什么时候可以应用这种方法可能仍然不一定很清楚。从工程的角度来看,什么时候才需要寻找一个问题的动态规划解?在本节中,我们要介绍适合采用动态规划方法的最优化问题中的两个要素:最优子结构和重叠子问题。另外,还要分析一种不同的方法,称为做备忘录(memoizaiion)①.以充分利用重叠子问题性质。

最优子结构

用动态规划求解优化问题的第一步是描述最优解的结构。回顾一下,如果问题的一个最优解中包含了子问题的最优解,则该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划可能会适用。(注意,在这种情况下,贪心策略可能也能适用的,参见第16章)。在动态规划中,我们利用子问题的最优解来构造问题的一个最优解。因此,必须小心以确保在我们所考虑的子问题范围中,包含了用于一个最优解中的那些子问题。

到目前为止在本章讨论的两个子问题中,都发现了最优子结构。在15.1节中,可以看到在任何一条装配线上,通过装配站j的最快路线包含了在其中一条装配线上通过装配站j-l的最快路线。在15.2节,我们看到A i A i+1…Aj的一个最优加全部括号把乘积在A k和A k+1之间分裂,它包含了加全部括号A i A i+1…Ak和Ak+lA k+2…Aj问题的最优解。

在找寻最优子结构时,可以遵循一种共同的模式:

l)问题的一个解可以是做一个选择。例如,选择一个前一个装配线装配站;或者选择一个下标以在该位置分裂矩阵链。做这种选样会得到一个或多个有待解决的子问题。

2)假设对一个给定的问题,已知的是一个可以导致最优解的选择。不必关心如何确定这个选择,尽管假定它是已知的。

3)在已知这个选择后,要确定哪些子问题会随之发生,以及如何最好地描述所得到的子问题空间。

4)利用一种“剪贴”( cut-and-paste)技术,来证明在问题的一个最优解中,使用的子问题的解本身也必须是最优的,通过假设每一个子问题的解都不是最优解,然后导出矛盾,即可做到这一点。特别地,通过“剪除’’非最优的子问题解再“贴上”最优解,就证明了可以得到原问题的一个更好的解,因此,这与假设已经得到一个最优解相矛盾。如果有多于一个的子问题的话,由于它们通常非常类似,所以只要对其中一个子问题的“剪贴”处理略加修改,即可很容易地用于其他子问题。

①这并不是拼写错误.这个单词确实是memoization,而不是memorization。memoization来源于memo,因为这个方法主要是记录一个值,以便以后可以搜索它。

为了描述子问题空间,可以遵循这样一条有效的经验规则,就是尽量保持这个空间简单,然后在需要时再扩充它。例如,在装配线阔度问题中,我们所考虑的子问题空间就是从工厂入口通过装配站S 1, j和S2, j 的最快路线。这个子问题空间很合适,因而没有必要再去尝试一个更具一般性的子问题空间了。

相反地,在矩阵链乘积问题中,假设我们已经试图将子问题空间约束为形如A 1A2…Aj的矩阵乘积。如前所述,一个最优的加全部括号必定把乘积在A k 和Ak +l 之间分开,对某个l≤k ≤j 。除非我们能保证k 总是等于j-1.不然会发现有形如A 1A 2…A k 和A k +1 A k +2…Aj 的子问题,而且后者不是A l A2…A j 的形式。对这个问题.有必要允许子问题在“两端”变化,亦即允许i和j 在子问题A i A i +1…A j中可以变化。

最优子结构在问题域中以两种方式变化:

l )有多少个子问题被使用在原问题的一个最优解中.以及

2)在决定一个最优解中使用哪些子问题时有多少个选择。

在装配线调度问题中,一个最优解只使用了一子问题,但是,为确定一个最优解,我们必须考虑两种选择。为找出通过装配站Si , j 的最快路线,我们使用通过S1, j-1或S 2, j-1的最快路线;不管采用了哪一种,它都代表了必须最优解决的子问题。子链A iA i+1…A j 的矩阵链乘法可作为有两个子问题和j -i 个选择的一个例子。对一个在该处分离乘积的给定的矩阵A k ,可以分解出两个子问题,即加全部括号A i A i +1…A k 和加全部括号A k+1 Ak +2…A j ,我们必须最优求解这两个子问题。一旦确定了子问题的最优解后,就从j—i 个候选者中选出那个下标k。

非正式地,一个动态规划算法的运行时问依赖于两个因素的乘积:子问题的总个数和每一个子问题中有多少种选择。在装配线调度中,总共有)(n Θ个子问题,并且只有两个选择来检查每个子问题,所以执行时间为)(n Θ。对于矩阵链乘法,总共有)(2n Θ个子问题,在每个子问题中又至多有n-1个选择,饵此执行时间为)(3n Θ。

动态规划以自底向上的方式来利用最优子结构。也就是说,首先找到子问题的最优解,解决子问题.然后找到问题的一个最优解。寻找问题的一个最优解需要在子问题中做出选择,即选择将用哪一个来求解问题。问题解的代价通常是子问题的代价加上选择本身带来的开销。例如,在装配线调度问题中,首先要解决寻找通过装配站S 1, j-1或S 2, j-1的最快路线这一子问题,然后,选择其中一个装配站作为装配站Si , j的前一站。选择本身所带来的开销依赖于是否在装配站j -l 与j 之间转换装配线;如果停留在原装配线,则代价为ai, j ;如果转换了装配线,则为t i ’, j -1+a i, j ,其中i i ≠'。在矩阵链乘法问题中,首先要确定子链A i A i +1…A j 的最优加全部括号,然后选择矩阵A k 正在该位置分裂乘积。选择本身所带来的开销为p i -1 p kp j 项。

第16章中将研究“贪心算法”,它与动念规划有着很多相似之处。特别地,贪心算法适用的问题也具有最优子结构。贪心算法与动态规划有一个显著的区别,就是在贪心算法中,是以自顶向下的方式使用最优'结构的。贪心算法会先做选择,在当时看起来是最

优的选择,然后再求解一个结果子问题,而小是先寻找子问题的最优解,然后再做选择。

一些细微之处

要注意在不能应用最优子结构的时候,就一定不能假设它能够应用。考虑下面两个问题,已知一个有向图G=(V , E)和结点u , v ∈V 。

无权最短路径②:找出一条从u 到v 的包含最少边数的路径。这样的一条路径必须是简单路径,因为从路径中去掉一个回路后,会产生边数更少的路径。

无权量长简单路径:找出一条从u 到v 的包含最多边数的简单路径。我们需要加入简单性的要求,因为否则的话,就可以随意地遍历一个回路任意多次,来得到有任意多的边数的路径。

无权最短路径问题具有如下的最优子结构。假设u ≠v ,因此这个问题是非平凡的。这样任何从u 到v 的路径p 必定包含一个中间顶点,譬如w 。(注意w 可以是u 或是v )。

于是,可以将路径v u p ?→?

分解为子路径v u p p ?→??→?21ω。显然,p 上边的数目等于p1上边的数目加上p 2上边的数目。我们断言,如果p 是从u 到v 的最优(亦即最短)路径,那么p 1必定是从u 到w的一条最短路径。为什么呢?我们可以使用“剪贴”方法来进行论证,

如果有另一条路径,例如'1p 从u到w有比p l更少的边,那么就可以剪下p l 然后贴上'1p ,

以构造比p 有更少边的一条路径v u p p ?→??→?21

ω‘,而这与p 是最优的相矛盾。对称地,p2必定是从w 到v 的一条最短路径。所以,通过考虑所有的中间顶点w ,找出从u 到w的一条最短路径和从w 到v 的一条最短路径,然后选择一个会产生整体最短路径的中间顶点w ,来找出从u 到v的一条最短路径。在25. 2节中,我们将使用这个最优子结构的一个变形,来找出在带权有向图中每一对顶点之间的最短路径。

对无权最长简单路径的问题,假设它具有最优子结构。毕竟,如果将一条最长简单路径v u p ?→?,分解成子路径v u p p ?→??→?

21ω,则pl 一定不是从u 到w 的最长简单路径,p2一定不是从w 到v 的最长简单路径吗?答案是否定的!图15-4给出了一个例子。考虑路径q→r →t ,这是从q 到t 的一条最长简单路径。q →r 是从q 到r的一条最长简单路径吗?不是,因为q →s →t →r是一条更长的简单路径。r→t 是一条从r 到t 的最长简单路径吗?也不是,因为r →q →s→t是一条更长的简单路径。

这个例子说明对于最长简单路径,不仅缺乏最优子结构,而且无法根据子问题的解来构造问题的一个“合法”解。如果把最长简单路径q →s →t →r 和r →q →s →t 合并,得到路径q →s →t→r →q →s →t ,这不是简单路径。确实,在寻找一条无权最长简单路径的问题中,没有显示其具有任何类型的最优子结构。这个问题还没有找到高效率的动态规划算

②我们使用名词“无杈”( unweighted)与寻找带权边的最短路径问题相区别;第24、25章中将讨论这个问题,不带权值的问题可以利用第22章中的广度优先搜索技术求解。

法。事实上,这个问题是NP 完全的(这一点将在第34章中看到),即意味着它不可能在多项式时间内解决。

为什么最长简单路径的子结构与最短路径的子结构有如此不同呢?虽然在最长和最短路径问题的解中都使用两个子问题,但是在寻找最长简单路径中子问题不是独立的,而在最短路径问题中它们是独立的。子问题独立是什么意思?意思是一个子问题的解不会影响同一问题中另外一个子问题的解。对于图15-4中的例子,找出从q到r 的最长简单路径的问题有两个问题:找出从q 到r 以及从r 到t的最长简单路径。对第一个子问题,我们选择路径q →s →t →r ,因此使用了顶点s和t 。在第二个子问题中就不能再使用这些顶点了,因为合并两个子问题的解会得到一个非简单的路径。如果在第二个子问题中不能使用顶点t ,那我们就根本无法求解这个子问题,因为t必须在我们要寻找的路径上,而且它不是“接合”两个子问题的解的顶点(此顶点为r )。在一个子问题解中使用顶点s 和t ,会避免它们在另一个子问题中被使用。但是,我们必须使用这两个顶点中的至少一个,才能求解另外一个子问题,并且,只有同时使用它们,才能求得最优解。因此,我们说这些子问题不是相互独立的。用另外一种方式看,在求解一个子问题时,我们对资源的使用(资源即顶点)使得它们无法被另一个子问题所使用。

图15-4 一个有向图,它说明了在一个无权有向图中寻找一条最长简单路径的问题没有最优子结构。路径q →r →t 是从q 到t 的一条最长简单路径,但是子路径q →r 不是从q 到r的一条最长简单路径,子路径r →t 也不是从r 到t 的一条最长简单路径

那么为什么在寻找最短路径中子问题是独立的呢?回答是子问题本来就没有共享资

源。我们断言,如果顶点w 在从u 到v的一条最短路径p 上,那么我们可以接合ω?→?

1p u 的任意最短路径和v p ?→?

2ω的任意最短路径来产生一条从u到v的最短路径。我们确信,除了w 之外,没有顶点可以同时出现在路径p1和p 2上。为什么呢?假设有某个顶点x ≠

w同时出现在路径p 1和p 2上,则可以把p 1分解为ω?→??→?x u ux

p ,以及将p 2分解为v x xv

p ?→??→?ω。根据这个问题的最优子结构,路径p的边数和p 1与p 2合起来的边数相等,假设p 有e 条边。现在我们构造一条从u 到v 的路径v x u xv ux p p ?→??→?。这条路径

至多有e -2条边,这与p 是一条最短路径的假设相矛盾。所以,我们确信最短路径问题中的子问题是独立的,

在15.1节和15.2节中讨论的两个问题都有独立的子问题。在矩阵链乘法中,子问题是把子链Ai A i +l …A k 和A k +i A k +2 …A j 相乘。这些子链是不相交的,因此没有矩阵会同时被包含在它们两个之中。在装配线调度中,为确定通过装配站Si, j ,的最快路线,

我们分析了通过装配站S

与S2, j-l的最快路线。因为通过装配站S i,j的最快路线的

l, j-l

解只包含其中一个子问题的解,这个子问题自动与解中使用的所有其他的子问题相独立。

重叠子问题

适用于动态规划求解的最优化问题必须具有的第二个要素是子问题的空间要“很小”,也就是用来解原问题的递归算法可反复地解同样的子问题,而不是总在产生新的子问题。典型地,不同的子问题数是输入规模的一个多项式。当一个递归算法不断地调用同一问题时,我们说该最优问题包含重叠子问题③。相反地,适合用分治法解决的问题往往在递归的每一步都产生全新的问题。动态规划算法总是充分利用重叠子问题,即通过每个子问题只解一次,把解保存在一个在需要时就可以查看的表中,而每次查表的时间为常数。

在15.1节中,我们简要分析了装配线调度问题的一个递归解是如何引用2n-j次f i[j]的,j=1, 2, …,n。这种表格化的解法把一个指数时间的递归算法降为了线性时间的算法。

为了更详细地说明重叠子问题的性质,再来看一下矩阵链乘法问题。回顾一下图15-3,注意MATRIX-CHAIN-ORDER在解较高行中的子问题时,要反复查看较低行中的子问题的解。例如,表项m[3,4]被引用了4次:在计算m[2, 4],m[1,4],m[3,5]和m[3,6]中被引用。如果m[3, 4]每次都被重新计算,而不是被查看,则所增加的运行时间将相当可观。为了搞清楚这一点.考虑下面确定m[i, j]的(低效的)递归程序,=A i A i+1…Aj,所需的标量乘法的最小次数。该程序直接基于递归式

计算矩阵链乘积A i

..j

(15. 12)。

RECURSIVE-MATRIX-CHAIN(p,i,j)

1 if i = j

2 then return 0

3 m[i, j]← ∞

4 for k← ito j - 1

5 doq← RECURSIVE-MATRIX-CHAIN(p,i,k)

+ RECURSIVE-MATRIX-CHAIN(p,k +1,j)

+ p i-1p k p j

6 if q

③动态规划要求其子问题既要独立又要重叠,这看上去似乎有些奇怪.虽然这两点要求听起来可能是矛盾的,但它们描述了两种不同的概念,而不是同一个问题的两个方面,如果同一问题的两个子同题不共享资源,则它们就是独立的,对两个子问题来说,如果它们确实是相同的子问题,只是作为不同问题的子问题出现的话,是重叠的,则它们是重叠的。

城市规划的发展历程及现状

城市规划的发展历程及现状 城市规划的发展趋势 (2) 城市规划的发展历程 (2) 城市规划的方法 (4) 城市规划的主要内容 (5) 简介 (5) 问题 (5) 意识 (7) 研究成果 (7) 城市规划布置的基本要求 (7) 城市规划遵循原则的细化 (8) 城市规划的社会原则 (8) 城市规划的美学原则 (8) 城市规划的安全原则 (8) 城市规划的经济原则 (9) 城市规划的整合原则 (9) 城市规划的任务 (10) 城市规划的作用 (10) 城市规划工作基本属性 (10)

城市规划的发展趋势 在不同时代和不同地区,对城市的发展水平和建设要求不同,因此城市规划的研究重点不尽一致,并随时代的发展而转变。 多学科参与城市研究的历史自古就有,近来更趋活跃,从地理学、社会学、经济学、环境工程学、生态学、行为心理学、历史学、考古学等方面研究城市问题所取得的成果,极大地丰富了城市规划理论。这个趋势将继续下去,今后还会有更多的学科渗入并开拓城市问题的研究领域。 系统工程学、工程控制论等数理方法及电子计算机遥感等新技术手段在墟市规划领域中的应用在逐步推广它们在资料的收集处理,预测评价方面所提供的方法和手段,有助于提高城市规划工作的质量。 对城市与城市规划工作的认识不断深化。基于城市是综合的动态的体系,城市规划研究不仅着眼于平面上土地的利用划分,也不仅局限于三维空间的布局,而是引入了时间、经济、社会多种要求的“融贯的综合研究”。在城市规划工作中,将考虑最大范围内可以预见和难以预见的情况,提供尽可能多的选择自由,并给未来的发展留有充分的余地和多种可能性。 由于城市问题包罗万象,有人提出在有关学科群的基础上建立以研究城市性质、城市模型、城市系统和发展战略为目的的城市学;也有人提出建立以系统地研究乡村、集镇、城市的各种人类聚居地为目的的人类聚居学等。这类新学科的建树,或有助于加深对城市的宏观认识,但它的进展需要建立在完成大量城市问题研究工作的基础上。 城市研究任务艰巨而纷繁,这也说明它丰富的活力。城市永远在发展,城市问题也总是相伴而生,但人类必将更为自觉地运用广泛的知识与丰富的想象力和创造力,发展城市环境的规划、建设和管理的科学。城市规划工作从最初社会经济发展的战略研究起,最终要落实到物质建设上,形成供人们生活和工作的体形环境。 城市规划是建筑和园林建设的前提,并为所需的空间准备条件,城市规划研究的进展也为建筑学和园林学的开拓提供了前所未有的广阔天地。规划师与建筑师、园林设计师的工作目标是一致的。随着人类社会的发展,这三学科的有机结合和协同创造,势必将体形环境的建设推向更高的境界。 城市规划的发展历程 随着社会经济的发展、城市的出现、人类居住环境的复杂化,产生了城市规划思想并得到不断发展。特别是在社会变革时期,旧的城市结构不能适应新的社会生活要求的情况下,城市规划理论和实践往往出现飞跃。 中国古代的城市规划学说散见于《考工记》、《商君书》、《管子》、《墨子》等典辅之中。《考工记》确定了“都”、“王城”和“诸侯城”的三级城邑制度,用地的功能分区和道路系统等;《商君书》论述了某一地域内山陵丘谷、都邑道路和农田土地分配的适当比例,以及建城、备战、人口、粮食,土地等相应条件。 中国古代城市规划强调战略思想和整体观念,强调城市与自然结合,强调严格的等级观念。这些城市规划思想和中国古代各个历史时期城市规划的成就,集中体现在作为“四方之极”、“首善之区”的都城建设上。 战国时期,列国都城采用了大小城制度,反映了“筑城以卫君,造郭以守民”的要求。西汉长安城将宫室与里坊结为一体;三国时曹魏邺城采用城市功能分区的规划方式;南北朝时期的洛阳城加强了全面规划,都为中国古代前期城市建设的高峰——隋唐长安城的建设起了先导作用。

时间规划局观后感_心得体会

时间规划局观后感 本文是关于心得体会的时间规划局观后感,感谢您的阅读! 篇一:时间规划局观后感 《时间规划局》讲述的是未来的世界,每个人手臂上有一行能够显示自己生命还剩多少时间的数字,当手臂上的时间消耗成为零的时候,生命就结束。每个人早上醒来第一件事就是看自己生命还剩余多少时间,接着一天都要为延续生命而努力。当着廉价的工厂劳工,每天赚取一点微薄的时间延续家人和自己的生命。在那个时代,没有货币,时间真的就是金钱,买什么都是用时间支付,换句话说,是用生命支付,一杯咖啡价值4分钟,乘坐公交车要消费1小时,还贷款和水电气费都是要刷自己的时间,时间就是唯一流通货币,人们做什么事情都是快节奏的,去哪里都是一路小跑,没时间聊天,没时间喝酒,没时间交女朋友。 这部电影给我印象最深的不是枪战场景,而是影片中有许多描写奔跑的镜头。每一次的一路狂奔都给人一种紧张的气氛,镜头不断地切换到他们手上的时间表,他们是在与时间赛跑,与生命赛跑,一秒钟的时间都显得无比珍贵。影片中有一个情节让我震撼:威尔的妈妈消费了2天时间还完贷款回家上公交车的时候,司机说涨价了,要2小时,妈妈的生命只剩下1个半小时,面对无情的司机和漠然的乘客,她只能跑着回家,她飞奔起来,路上空空荡荡,和生命赛跑。威尔意识到妈妈时间不够,飞奔去接,然而母亲只差两秒钟,时间变成了零,死在了威尔的怀里。看着时间一分一秒的流逝,能体会到那种生命一点一点走向尽头的窒息的感觉。 当很多人在感叹时间去哪儿了的时候,一些年轻人却不懂得青春易逝,不懂得时间宝贵。他们每天浑浑噩噩,或沉迷游戏,或沉迷于QQ,或终日无所事事,虚度青春,没意识到生命本身就是由一分钟一分钟的时间组成。 青年朋友们,珍惜时间,珍惜青春,将每一分每一秒的生命过精彩、充实,不要空留遗憾。 篇二:时间规划局观后感 被《时间规划局》深深地吸引。电影开头就令人紧张不安,我一直在问我自己,如果一觉醒来我只剩一天的寿命,我这一天要干些什么,随着时间的流逝,我不断问自己,还剩18小时的时间,我要做些什么,还剩半小时我能怎么办,

动态规划讲解大全(含例题及答案)

动态规划讲解大全 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。1957年出版了他的名著Dynamic Programming,这是该领域的第一本著作。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。 动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。 基本模型 多阶段决策过程的最优化问题。 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线,如图所示:(看词条图) 这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题就称为多阶段决策问题。 记忆化搜索 给你一个数字三角形, 形式如下: 1 2 3 4 5 6 7 8 9 10 找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大. 无论对与新手还是老手,这都是再熟悉不过的题了,很容易地,我们写出状态转移方程:f(i, j)=a[i, j] + min{f(i+1, j),f(i+1, j + 1)} 对于动态规划算法解决这个问题,我们根据状态转移方程和状态转移方向,比较容易地写出动态规划的循环表示方法。但是,当状态和转移非常复杂的时候,也许写出循环式的动态规划就不是那么

浅析我国城市规划的现状及发展趋势

商情教育经济研究工程建设 浅析我国城市规划的现状及发展趋势 ◆周茂琅 随着经济的高速发展,信息化时代的到来,我国的城市规划也进入了一个新的发展阶段。本文就目前城市规划的现状作了系统 梳理,针对目前城市建设中存在的一些普遍问题进行深入研究分析,找到问题的症结所在。同时对现代化城市规划的发展趋势作了粗浅探讨,以期能够提供一些新的启发和思路。城市规划应该以保护环境作为前提条件,以追求和谐作为基本的准则,以人性化作为核心的价值取向。 城市规划核心价值基本准则发展趋势 一、概述 改革开放带来了中国经济的腾飞,社会财富的积累,综合国力的提升, 使中国的城市化进程加快。不论从速度还是规模上,都是人类历史上前所未有的。从1978年到2000年这短短的20几年间,小城镇由2176个增加到了20312个,城市的数量由190个增加到了663个,其中大城市、特大城市及超大城市有93个,城市化水平显著提高。进入二十一世纪以来,中国的社会经济保持了持续快速发展的势头,同时响应世界范围内信息化、市 场化、法制化、生态化的趋势,新时期的城市规划必将进入一个新的台阶, 呈现出一些新的特点。自然环境的保护力度将进一步加大,人性化的设计理念将在规划中凸显,追求和谐的基本准则将成为亮点。因此,为适应新时期城市发展建设的需要,一定要根据时代的要求,客观的形式以及自身的特点,通过深入系统的研究和探索,认清我国在大规模城市建设中出现的问题,汲取其中成功的经验和失败的教训,并通过借鉴其他发达国家在城市规划中的成功做法,努力开创我国城市规划建设的新局面。 二、我国城市规划建设的现状 中国的城市建设已经取得了让世人瞩目的巨大成就,同时正面临着更快更大规模的发展。但是纵观中国城市建设过程,在肯定建设取得的巨大成就的同时也不能忽视其中存在的一系列问题,这些问题如果不在今后的大规模城市规划建设中加以妥善合理的解决,必将严重影响到我国城市建设质量,以致患上难以解决的“城市病”,造成建设资源的极大浪费。我国现阶段的城市规划建设主要存在以下问题。 1. 城市规划随意性 城市建设,规划先行。规划在建设中的地位极其重要,规划是城市建 设的蓝天,是城市建设的法律。所有的城市建设包括市政基础设施,城市 广场,社区街道,景观绿化等建设都应该纳入到城市规划的行列中。然而, 在城市建设中,城市规划经常被改变,表现出了很强的随意性。究其原因有以下三个方面:第一,任何事物都是发展变化的,一成不变的事物是不存 在的。第二,地方领导的更替。第三,利益驱使。首先来自地方的利益,地 方政府为了寻求财力大多热衷于土地出让,这些都牵涉到城市的规划。其次是个人利益,有些个人为了自身的经济利益操纵或诱导规划的调整,从 中牟利。这一切都使现阶段部分城市的规划出现了随意性大特征。 2. 缺乏对文化遗产的保护意识 任何一个城市,从形成到发展,都有一个长期的历史过程,伴随这一过程的必定会有大量的文化遗迹。但是在现阶段的旧城改造过程中,蕴涵了深厚文化底蕴的大量的文物古迹、风景名胜历史文化街等遭到了严重破坏。 3. 生态环境破坏严重 良好的生态环境是实现城市可持续发展的基础和条件,城市居民生活质量的高低不仅仅要看城市经济的发展水平,城市设施的完善程度,还要看是否具有良好的生态环境。同时评价一个城市是否适宜于居住,并不在于城市规模的大小,建筑的高低,而是要看城市的布局是否合理,是否具有 健康的生态环境,城市的规划建设是否具有人性化,是否具备可持续发展的潜力。然而目前我国的城市规划建设一方面带来了社会经济的发展和焕然一新的城市面貌,另一方面却对城市的生态环境产生强烈的冲击。虽然国家也制定了响应的法律法规,如环境保护法,水土保持法等,并要求对大型和重要的建设项目进行环境影响评估,编制水土保持方案。但在实际 的操作过程中,不论是领导还是具体的建设部门往往对此重视不够,致使

动态规划教案

吉林师范大学计算机学院 教案 课程名称C程序设计(算法部分) 院系级计算机学院计算机科学与技术09级教研室(系、实验室)计算机基础教研室5101 授课班级09计算机科学与技术3班 实习生郑言 系指导教师滕国文 吉林师范大学计算机学院二○一二年四月二十五日(星期三5,6节)

课型章节: 动态规划基本思想 基要本参教考材资和料主: 算法设计与分析》 教学目的: 本课程以C语言为教授程序设计的描述语言,结合语言介绍程序设计的基本原理、技巧和方法。主要讲授内容包括程序设计动态规划基本概念,动态规划的基本步骤,动态规划问题的特征。通过本课程的学习,为算法更好的学习,以及能用计算机解决一些实际问题打下坚实的基础。 教学基本要求: 掌握C语言中动态规划的基本概念,动态规划的基本步骤,动态规划问题的特征。并能熟练使用C语言动态规划思想解决一些简单程序问题;掌握一些基本算法结构及相关方法;熟悉程序设计的思想和编程技巧。 重点: 动态规划基本概念,动态规划的基本步骤,动态规划问题的特征。 难点: 动态规划的基本步骤 课型: 理论课 教法: 1.多媒体讲解 2.举例讲解 教学内容及过程: 1.课前回顾: 枚举法:在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法. 2.数塔问题 有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。

简单的进行选举方法的引导,让同学们主动思考到动态规划的思想上了。 考虑一下: 从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。 同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。 如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。 结论:自顶向下的分析,自底向上的计算。 #include #include int max(int x,int y) { if(x>y) return x; else return y; } main() { int a[100][100]; int i,j,n; scanf("%d",&n); for(i=0;i=0;i--) for(j=0;j<=i;j++) { a[i][j]+=max(a[i+1][j],a[i+1][j+1]); } printf("%d\n",a[0][0]); } 3.总结“动态规划的基本思想” 如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。由此而来的基本思路是,用一个表记录所有已解决的子问题的答案,不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。 4.总结“动态规划的基本步骤” 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值(最大值或最小值)的那个解。设计一

动态规划之状态压缩

状态压缩 Abstract 信息学发展势头迅猛,信息学奥赛的题目来源遍及各行各业,经常有一些在实际应用中很有价值的问题被引入信息学并得到有效解决。然而有一些问题却被认为很可能不存在有效的(多项式级的)算法,本文以对几个例题的剖析,简述状态压缩思想及其应用。 Keywords 状态压缩、Hash、动态规划、递推 Content Introducti o n 作为OIers,我们不同程度地知道各式各样的算法。这些算法有的以O(logn)的复杂度运行,如二分查找、欧几里德GCD算法(连续两次迭代后的余数至多为 原数的一半)、平衡树,有的以)运行,例如二级索引、块状链表,再往上有O(n)、O(n p log q n)……大部分问题的算法都有一个多项式级别的时间复杂度上界1,我们一般称这类问题2为P (deterministic Polynomial-time)类问题,例如在有向图中求最短路径。然而存在几类问题,至今仍未被很好地解决,人们怀疑他们根本没有多项式时间复杂度的算法,NPC(NP-Complete)和NPH(NP-Hard)就是其中的两类,例如问一个图是否存在哈密顿圈(NPC)、问一个图是否不存在哈密顿圈(NPH)、求一个完全图中最短的哈密顿圈(即经典的Traveling Salesman Problem货郎担问题,NPH)、在有向图中求最长(简单)路径(NPH),对这些问题尚不知有多项式时间的算法存在。P和NPC都是NP(Non-deterministic Polynomial-time)的子集,NPC则代表了NP类中最难的一类问题,所有的NP类问题都可以在多项式时间内归约到NPC问题中去。NPH包含了NPC和其他一些不属于NP(也更难)的问题,NPC问题的函数版本(相对于判定性版本)一般是NPH的,例如问一个图是否存在哈密顿圈是NPC的,但求最短的哈密顿圈则是NPH的,原因在于我们可以在多项式时间内验证一个回路是否真的是哈密顿回路,却无法在多项式时间内验证其是否是最短的,NP类要求能在多项式时间内验证问题的一个解是否真的是一个解,所以最优化TSP问题不是NP的,而是NPH的。存在判定性TSP问题,它要求判定给定的完全图是否存在权和小于某常数v的哈密顿圈,这个问题的解显然可以在多项式时间内验证,因此它是NP 1请注意,大O符号表示上界,即O(n)的算法可以被认为是O(n2)的,O(n p log q n)可以被认为是O(n p+1)的。2在更正式的定义中,下面提到的概念都只对判定性问题或问题的判定版本才存在(NPH除外)。Levin给出了一个适用于非判定问题的更一般的概念,但他的论文比Cook的晚发表2年。

中国城市规划管理现状

中国城市规划管理现状之我见 指导老师:牟凤云 专业:资环 姓名:蓝忠志

摘要 随着中国改革开放,中国的城市化进程也到了一个关键时期,众多城市的大力发展使得城市规划管理也显得越发重要,但是在这其中传统的城市规划原理逐渐暴露出一些问题。本文主要粗浅地探讨了中国城市规划管理现状所出现的体制和管理方面的问题,然后就所提出的问题,提出了一些对策建议。 关键词:城市,规划管理,对策建议

目录 前言 (4) 2.城市规划管理概述 (4) 3.城市规划管理对城市发展的作用 (5) 4我国的城市规划建设现状 (6) 4.1我国城市规模规划的现状 (6) 4.1我国的城市规划方法现状 (6) 5.城市规划管理中存在的问题 (7) 5.1管理体制的不顺、部门职能交叉、多头管理 (7) 5.2缺乏有效监督检查 (7) 5.3公众参与度及法律保障不足 (7) 5.4从业人员的问题 (8) 5.5运行机制为单一的单向模式 (8) 6.对城市管理的对策的一些建议 (9) 6.1 健全规划的管理体制 (9) 6.2加强监督机制 (9) 6.3设立公民参与制度以及完善法律制度 (9) 6.4提高从业人员的职业道德和素质 (10) 6.5完善机制,推动审批改革 (10) 7.结语 (11) 8.参考文献 (11)

前言 我国进入二十一世纪以来,城市化进程到了一个高速发展的时期不论从速度还是规模上,都是人类历史上前所未有的,在实行社会主义市场经济体制的过程中,城市规划管理越来越显示出它的重要性,同时也面临许多新的问题。城市规划工作的改革以及城市规划制度创新的问题渐已成为了一个焦点和热点的问题,需要研究者对全国城市规划工作的整体发展状况和态势、当下的问题和成因、政策的走向和趋势等有一个总体的认识。做好新形势下的城市规划管理工作,很显然已经成为当前的一项紧迫任务。所以要改变城市规划管理的被动状况,科学有效地编制城市规划、实施规划管理、真正确立城乡空间规划在国民经济和社会发展的应有地位,我们就需要不断对目前城市规划管理工作进行总结,发现其中存在的问题,以此推动城市规划工作的改革。 2.城市规划管理概述 城市规划管理包括城市规划编制管理、城市规划审批管理和城市规划实施管理。城市规划编制管理主要是组织城市规划的编制,征求并综合协调各方面的意见,规划成果的质量把关、申报和管理。城市规划审批管理主要是对城市规划文件实行分级审批制度。城市规划管理就是根据《城乡规划法》和已批准的城市规划,对城市各项建设用地和建设工程实施行政审查,批准、核发“一书两证”即《建设项目选址意见书》、《建设用地规划许可证》、《建设工程规划许可证》,对城市规划行政许可的内容是否符合已批准的规划,以及城市内的建设项目是否符合规划许可的内容进行监督检查和行政处罚的行政管理活动,是一项综合性、复杂性、系统性、实践性、科学性很强的技术行政管理工作,直接关系着城市规划能否顺利实施。规划部门通过规划行政权履行规划管理职能,以保障城市规划的实施。城市规划拥有依法干预城市开发的权力。城市建设规划管理是对城市建设活动施

时间规划可以计算的人生

可以计算的人生 整日忙于工作应酬,却仍找不到方向,或者因为压力太大而总是感到焦虑,有时会因欠缺自信,不擅沟通。我们的人生确实有太多需要整理或计算,那不妨用一下黑幼龙的"加减乘除"法,或许会使人生多些智慧。 学习力 达·芬奇曾说过:“如果,今天我很努力地学习、过得很充实,那么我晚上将睡得很安稳;如果,我一生都很努力、充实地过活,那么我将能安稳地长眠。” 不论你过去状况如何,有了学习的能力,你就能为自己创造更多的机会。成长期是每个人一生中非常重要的阶段,在这期间,身高会一直增加,知识也会一直增加,就像植物的幼苗会不断地生长,但是到了一定年纪就突然停下来。身高也许受限于先天的条件无法再长,但是知识的增长却是我们可以掌握的,但是你一定会发现,周遭有好多人一离开学校后,就再也不学习了。 大多数人都非常重视钱财的增加,坦白说,如果你的人生中,只有银行存款数字在增加,其他却什么也没有变,你不妨静下心来好好想一想,除了钱财外,

是否还应该追求点别的?像沃伦·巴菲特,他对演讲很感兴趣,但是上台会发抖、怯场,于是他就花了一个月的薪水,参加卡内基训练,让自己变得更有自信再上台。据《时代》杂志报道,巴菲特虽然家财万贯,赚到的钱几辈子都用不完,但是他觉得最快乐的事,并不是自己赚了多少钱,而是有机会给大学生演讲,把毕生的经验和他们分享。 有句话说得好,“做什么,就要像什么。”每个人在一生中都有机会扮演各种角色,过去你是子女,现在你可能要扮演父母;过去你是员工,现在你可能成了主管,甚至还是个老板。另外,还有人会跨越不同的专业领域,扮演全新的角色,如果你想要从容地演好每一种角色,就一定要为自己“加”学习力。 增进个人的学习力,还有一个技巧,就是让自己多应用、多表达。据说我们阅读过的东西,事后可以记得3% ;如果是阅读过、听过(譬如听演讲),就可以记得40% ;如果是阅读过、听过、看过(譬如看过电影或者舞台表演),所记得的内容就提升为50% ;如果阅读过、听过、看过,而且自己再说出来,则记得的内容可以达到60% 。 学习就是发掘自己更多的可能性,并且是扭转命运的最佳武器。学习氛围也会相互感染,如果在一个家庭中,父母都热爱学习,他们的孩子也一定会变得喜欢学习。 解除忧虑

动态规划状态转移方程

1.资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.资源问题2 ------01背包问题 F[I,j]:=max(f[i-1,j-v[i]]+w[i],f[i-1,j]); 3.线性动态规划1 -----朴素最长非降子序列 F[i]:=max{f[j]+1} 4.剖分问题1 -----石子合并 F[i,j]:=min(f[i,k]+f[k+1,j]+sum[i,j]); 5.剖分问题2 -----多边形剖分 F[I,j]:=min(f[i,k]+f[k,j]+a[k]*a[j]*a[i]); 6.剖分问题3 ------乘积最大 f[i,j]:=max(f[k,j-1]*mult[k,i]); 7.资源问题3 -----系统可靠性(完全背包) F[i,j]:=max{f[i-1,j-c[i]*k]*P[I,x]} 8.贪心的动态规划1 -----快餐问题 F[i,j,k]:=max{f[i-1,j',k']+(T[i]-(j-j')*p1-(k-k')*p2) div p3} 9.贪心的动态规划2 -----过河 f[i]=min{{f(i-k)} (not stone[i]) {f(i-k)}+1} (stone[i]); +贪心压缩状态 10.剖分问题4 -----多边形-讨论的动态规划 F[i,j]:=max{正正 f[I,k]*f[k+1,j]; 负负 g[I,k]*f[k+1,j]; 正负 g[I,k]*f[k+1,j]; 负正 f[I,k]*g[k+1,j];} g为min 11.树型动态规划1 -----加分二叉树 (从两侧到根结点模型)

动态规划的原理及应用

动态规划的原理及应用 班级:计科1302班 小组成员:王海涛蔡佳韦舒 蒋宪豪尹卓 完成时间:2015年5月26日

动态规划的原理及应用 学生:算法设计第5组,计算机系 指导教师:甘靖,计算机系 摘要:动态规划是解决多阶段决策过程最优化问题的一种方法。特点是把多阶段决策问题变换为一系列相互联系的单阶段问题,然后逐个加以解决。其基本思想就是把全局的问题化为局部的问题,为了全局最优必须局部最优,适用于在解决问题过程中需要多次重复解决子问题的问题。其应用领域广泛,涉及到管理学、经济学、交通、军事和计算机等多个领域,将动态规划思想正确地应用于实践,将对我们的生活带来便利,甚至带给我们的社会和国家以保障。 关键词:动态规划;最优决策;应用;领域 The Principle and Application of Dynamic Programing The dynamic programing is a way to solve optimization problem in the process of multi-stage decision,whose feature is alter the multi-stage decision problems to single phase problems which are connected with each other,and then solve them one by one.The basic idea is to change the overall problem into partcial problem.And the partcial one must keep the best in order to promise the quality of overall one,which splies to repeatedly solving subproblem throughout the whole process.It is spreading to many fields,like management,economics,traffic,military and computer. Put the idea of dynamic programing correctly into practice will bring a lot of convenience to our daily life,our society as well as our country.

3 (修改)大规模状态空间中的动态规划和强化学习问题

3 大规模状态空间中的动态规划和强化学习问题 本章我们将讨论大规模状态空间中的动态规划和强化学习问题。对于这类问题,我们一般很难求得问题的精确解,只能得到问题的近似解。前面章节所介绍的一些算法,如值迭代、策略迭代和策略搜索,无法直接用于这类问题。因此,本章将函数近似引入这些算法,提出三类基于函数近似的算法版本,分别是近似值迭代、近似策略迭代和近似策略搜索。本章将从理论和实例两个角度分析算法的收敛性,讨论如何获取值函数逼近器的方法,最后比较分析三类算法的性能。 3.1 介绍 第二章详细介绍了DP/RL中三类经典算法,这三类算法都需要有精确的值函数及策略表示。一般来说,只有存储每一个状态动作对回报值的估计值才能得到精确地Q值函数,同样V值函数只有存储每一个状态的回报值的估计值才能得到;精确的策略描述也需要存储每一个状态对应的动作。如果值函数中某些变量,比如某些状态动作对、状态等,存在很多个或者无穷多个潜在值(又或者这些值是连续的),那么我们就无法精确描述对应的Q值函数或者V值函数,因此,考虑将值函数和策略通过函数近似的方式来表示。由于实际应用中大部分问题都存在大规模或者连续状态空间,因此,函数近似方法是求解动态规划和强化学习问题的基础。 逼近器主要可以分为两大类:带参的和非参的。带参的逼近器主要是从参数空间到目标函数空间的映射。映射函数及参数的个数由先验知识给定,参数的值由样本数据进行调整。典型的例子是对一组给定的基函数进行加权线性组合,其中权重就是参数。相比之下,非参的逼近器通过样本数据直接得到。本质上,非参的函数逼近器也是含带参数的,只是不像带参的函数逼近器,参数的个数及参数的值直接有样本数据决定。例如,本书中所讨论的基于核函数的逼近器就是带参数的函数逼近器,它为每一个数据点定义一个核函数,并对这些核函数做加权线性组合,其中权重就是参数。 本章主要对大规模状态空间中动态规划和强化学习问题进行广泛而深入的讨论。第二章中所介绍的三类主要算法,值迭代、策略迭代和策略搜索,将与函数近似方法相结合,获得三类新的算法,分别是近似值迭代、近似策略迭代以及近似策略搜索。本章将从理论和实例两个角度讨论算法的收敛性,并对比分析三类算法的性能。关于值函数近似与策略逼近的一些其他重要问题,本章也将给予讨论。为了帮助读者更好的阅读本章的内容,图3.1给出一个本章的内容脉络图。

基于城市路网规划现状问题的分析

基于城市路网规划现状问题的分析 城市路网是城市交通的主要组成部分,作为整个城市系统的基础,在城市的发展和建设中扮演着极其重要的角色。城市路网规划的合理与否直接影响城市的长久发展。本文重点分析了目前城市路网设计中存在的普遍问题,然后提出了改善的措施,为今后的城市路网规划提供了借鉴。 标签:城市路网;规划;设计 1引言 目前我國的城市道路交通运行的状况而言,车辆拥堵状况的加重、碰撞事件的增多、重大交通事故的呈现等皆直接指向道路交通的不良运营,揭示出城市道路规划的不合理性。因此一定要根据城市特色合理地设计。 2目前城市路网规划设计中存在的普遍问题 2.1路网级配结构设计不合理、支路网密度低: 路网结构是由城市中的每一条道路所形成的网络组织,城市的路网结构与交通的通行效率有着密切的关系。路网的合理结构应该是“金字塔”型,而我们国家目前很多大城市路网的结构设计不合理,多为“倒三角”或“纺锤”型,中间大,两头小,普遍缺少次干路和支路。 在我国城市交通道路网络结构,如果走错了路,那会绕很多路,花很多时间。究其原因,主要是我国许多城市的道路网都是在原有路网的基础上发展起来的,由于原有路网在建设之初本身缺乏科学的预见性,再加上长期以来在道路网规划建设中,许多城市过多考虑当地交通需求过分追求形象、景观,乱建宽马路,而忽视道路网的功能结构改善。在大力推进快速路和主干路建设的同时,却忽略了城市次干道和支路网的建设,主、次干路无非机动车道、盲道,支路无人行道或人行标志,人行道被商摊和其他设施侵占,导致我国城市道路网等级级配不尽合理,引起目前许多城市交通日趋紧张。我们经常会看到这样一个现象:一条路拓宽了,修了立交桥,堵车却更严重了。 2.2交叉路路口、交通节点缺乏过渡性结构: 目前我国大多数城市没有充分重视交叉口渠化设计,尤其是一些中小城市,普遍只在交叉口进行简单的标线设置,存在大量问题。主要是设计人员的设计方案和实际情况脱节,缺乏相关的理论做指导,再加之在长期的道路建设中往往忽视机动车与非机动车的分流设计,造成交叉路口机动车、非机动车与行人相互干扰的被动局面,导致交叉口的服务水平严重下降,成为路网系统中最为脆弱的瓶颈。

小组计划书(关于时间管理)

小组计划书 小组名称:时间大师 理念: 进入大学之后,再也没有繁重的学习任务,没有了全天候的严格时间限制,总的说来, “大学,我自由了”。我渴望自由,但是自己拥有了自由之后又不知道该怎么办才好了。大 学生所拥有的休闲和自由支配时间很多,但事实上,大量的自由时间让大学生的闲暇生活 变 得非常的凌乱,而且大学生在闲暇时间利用方面存在着诸多问 题,比如:闲暇生活内容单调。在闲暇时间里,许多大学生以看电影、玩游戏、看课外书度过,很少一部分大学生能劳 逸结 合,会花时间去复习和预习以及从事文体活动及营造自己的生 活,还有一部分的学生在闲暇时间里无所事事,甚至参与赌博、常常流连于网吧。大多数大学生完成老师的任务是为了应 付,没有多少能力的提升。这些都是不能合理安排自己时间的表现,所以针并改善对此种 情 况对提升大学生素质来说意义重大。 时间管理的有效应用,是达到目标的有效保证。而时间管理能力则是为了实现目标而 对 时间进行计划、安排、控制、分配、使用、反馈等活动中表现出来的能力。管理大师彼 特杜 拉克曾说:“时间是世界上最短缺的资源,除非善加管理,否则一事无 成。”时间管理的重要性,显而易见。且时间管理的重点不在于如何管理自己的时 间,而是在于如何善用时间的角度来管理自己。大学生是有能力做好时间管理,科学分配自己的生活板块,让他们拥有明确 的学习或生活目标。对于正处于人生学习的黄金阶段的大学生来说,时间管理能力是大学 生 初入社会后能力的一种体现,也是迈出成才的重要一步。学会管理和利用自己的时间显得尤 为重要,而且也有利于让他们在学习善用时间过程 中,有效的提高自己的自制能力,学会如何管理和经营自己的人生。但是当前大学生时间自我管理的现状是低效 的、无计划的和缺乏策略的。 这个小组会先让组员认识自 己,探索自己,留意自己的时间运用,然后会让组员意识到时间管理的重要性,明白自己应该做什么,什么事情不应该做,降低他们的“变动性”,最后会完成一个时间规划表格,做出时间规划后按照规划行事,合理的管理时间。另外使用小组方法介入可帮助面对类似问题或有共同需要的组 员,得以建立支援网络,并从组员间的互相支持中,得到更大的信心去改 善,而且在组员的互动过程中,大家可以互相监督,更能利 用其他组员的回馈做改善的参与。此外,组员间亦可产生模仿的作用,从别人身上学 习。 理论构建: 社会认知理论是从个体、行为和环境相互影响三方交互作用的视角来解释人类行为和 机 能的,人在不同的情境中会有不同的心理和行为表 现。皮亚杰为儿童认知发展研究提供了一 个极具影响力的理论框架。皮亚杰认为,社会相互作用在认知发展中起着重要作用,社会认 知对个体行为具有调节作用。此外,社会认知会受到认知者本人特 点、认知对象、社会情境 等因素影响。社会工作者通过帮助服务对象分析自己和环境之间的关 系,能让服务对象学习形成正确的自我认识,在此基础上形成正确的行为。在该小组活动中,社会工作者制定小组 奖惩制度(即社会认知理论的环境),有效的让服务对象调整自己的行为,遵守小组的活 动 规范。班杜拉的社会学习理论认为,人们通过观察、模仿他人的行为可以获得改变,形

算法合集之《动态规划算法的优化技巧》

动态规划算法的优化技巧 福州第三中学毛子青 [关键词] 动态规划、时间复杂度、优化、状态 [摘要] 动态规划是信息学竞赛中一种常用的程序设计方法,本文着重讨论了运用动态规划思想解题时时间效率的优化。全文分为四个部分,首先讨论了动态规划时间效率优化的可行性和必要性,接着给出了动态规划时间复杂度的决定因素,然后分别阐述了对各个决定因素的优化方法,最后总结全文 [正文] 一、引言 动态规划是一种重要的程序设计方法,在信息学竞赛中具有广泛的应用。 使用动态规划方法解题,对于不少问题具有空间耗费大、时间效率高的特点,因此人们在研究动态规划解题时更多的注意空间复杂度的优化,运用各种技巧将空间需求控制在软硬件可以承受的范围之内。但是,也有一部分问题在使用动态规划思想解题时,时间效率并不能满足要求,而且算法仍然存在优化的余地,这时,就需要考虑时间效率的优化。 本文讨论的是在确定使用动态规划思想解题的情况下,对原有的动态规划解法的优化,以求降低算法的时间复杂度,使其能够适用于更大的规模。 二、动态规划时间复杂度的分析 使用动态规划方法解题,对于不少问题之所以具有较高的时间效率,关键在于它减少了“冗余”。所谓“冗余”,就是指不必要的计算或重复计算部分,算法的冗余程度是决定算法效率的关键。动态规划在将问题规模不断缩小的同时,记录已经求解过的子问题的解,充分利用求解结果,避免了反复求解同一子问题的现象,从而减少了冗余。 但是,动态规划求解问题时,仍然存在冗余。它主要包括:求解无用的子问题,对结果无意义的引用等等。 下面给出动态规划时间复杂度的决定因素: 时间复杂度=状态总数*每个状态转移的状态数*每次状态转移的时间[1] 下文就将分别讨论对这三个因素的优化。这里需要指出的是:这三者之间不是相互独立的,而是相互联系,矛盾而统一的。有时,实现了某个因素的优化,另外两个因素也随之得到了优化;有时,实现某个因素的优化却要以增大另一因素为代价。因此,这就要求我们在优化时,坚持“全局观”,实现三者的平衡。 三、动态规划时间效率的优化 3.1 减少状态总数 我们知道,动态规划的求解过程实际上就是计算所有状态值的过程,因此状态的规模直接影响到算法的时间效率。所以,减少状态总数是动态规划优化的重要部分,本节将讨论减少状态总数的一些方法。

动态规划经典教程

动态规划经典教程 引言:本人在做过一些题目后对DP有些感想,就写了这个总结: 第一节动态规划基本概念 一,动态规划三要素:阶段,状态,决策。 他们的概念到处都是,我就不多说了,我只说说我对他们的理解: 如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。 下面举个例子: 要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……,这样没个环节就可以看做是一个阶段;产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态变成固态=_=||)。每个形态就是一个状态,那从液态变成固态经过了冰冻这一操作,这个操作就是一个决策。 一个状态经过一个决策变成了另外一个状态,这个过程就是状态转移,用来描述状态转移的方程就是状态转移方程。 经过这个例子相信大家对动态规划有所了解了吧。 下面在说说我对动态规划的另外一个理解: 用图论知识理解动态规划:把动态规划中的状态抽象成一个点,在有直接关联的状态间连一条有向边,状态转移的代价就是边上的权。这样就形成了一个有向无环图AOE网(为什么无环呢?往下看)。对这个图进行拓扑排序,删除一个边后同时出现入度为0的状态在同一阶段。这样对图求最优路径就是动态规划问题的求解。 二,动态规划的适用范围 动态规划用于解决多阶段决策最优化问题,但是不是所有的最优化问题都可以用动态规划解答呢? 一般在题目中出现求最优解的问题就要考虑动态规划了,但是否可以用还要满足两个条件: 最优子结构(最优化原理) 无后效性 最优化原理在下面的最短路径问题中有详细的解答; 什么是无后效性呢? 就是说在状态i求解时用到状态j而状态j就解有用到状态k…..状态N。 而求状态N时有用到了状态i这样求解状态的过程形成了环就没法用动态规划解答了,这也是上面用图论理解动态规划中形成的图无环的原因。 也就是说当前状态是前面状态的完美总结,现在与过去无关。。。 当然,有是换一个划分状态或阶段的方法就满足无后效性了,这样的问题仍然可以用动态规划解。 三,动态规划解决问题的一般思路。 拿到多阶段决策最优化问题后,第一步要判断这个问题是否可以用动态规划解决,如果不能就要考虑搜索或贪心了。当却定问题可以用动态规划后,就要用下面介绍的方法解决问题了:(1)模型匹配法: 最先考虑的就是这个方法了。挖掘问题的本质,如果发现问题是自己熟悉的某个基本的模型,就直接套用,但要小心其中的一些小的变动,现在考题办都是基本模型的变形套用时要小心条件,三思而后行。这些基本模型在先面的分类中将一一介绍。 (2)三要素法 仔细分析问题尝试着确定动态规划的三要素,不同问题的却定方向不同: 先确定阶段的问题:数塔问题,和走路问题(详见解题报告) 先确定状态的问题:大多数都是先确定状态的。 先确定决策的问题:背包问题。(详见解题报告) 一般都是先从比较明显的地方入手,至于怎么知道哪个明显就是经验问题了,多做题就会发现。 (3)寻找规律法: 这个方法很简单,耐心推几组数据后,看他们的规律,总结规律间的共性,有点贪心的意思。 (4)边界条件法 找到问题的边界条件,然后考虑边界条件与它的领接状态之间的关系。这个方法也很起效。 (5)放宽约束和增加约束 这个思想是在陈启锋的论文里看到的,具体内容就是给问题增加一些条件或删除一些条件使问题变的清晰。 第二节动态规划分类讨论

城乡规划目前存在的现状及解决措施

城乡规划目前存在的现状及解决措施 摘要:为加快两化互动,顺应城乡一体化的时代潮流发展,城乡规划工作应建立起科学严谨的规划体系和实施制度,不断的创新新的途径,正确处理好城乡建设与局部利益、与经济发展、环境和历史文化保护,真正有机融为一体,实现后期地方城乡管理更能体现出适应社会经济快速增长与发展的优越性。因此,笔者凭借多年城乡规划工作经验,在此对目前规划工作存在现状及原因进行了概要性指出,并提出了肤浅实践对策意见,供同行参考交流。 关键词:城乡规划存在现状原因分析对策措施 一、城乡规划目前存在的现状 尽管《城乡规划法》颁布出台[1],近年也促使规划工作取得实质性进步,但工作中还是存在着不少问题,目前现状与产生原因如下: (一)城乡规划统筹理念深入不够 目前,地方在城乡规划工作中,存在郊区和农村地区规划远不及城市规划到位,编制指导思想和实施过程都需有待进一步提升。尤其表现在对乡镇规划管理上,规划人员常用城市规划思维习惯性去解决农村规划发生错位,也尚没形成对农村地区规划建设有效管理方法,还由于人手单薄,对规划农村地区的生活形态与经济发展方式等调研不够深入充分,导致规划定位不能准确反映当地现状与发展规律等; (二)规划面对资源与环境的考验 构建生态环境已在党的十八大报告中明确提出[2],一个地区的城乡生态环境是否优美与健康直接关系到人们享有高质量的良好生活环境,也对社会和谐稳定、城乡可持续发展有着重要意义。然而在城乡规划管理中,大多地方都是原有遗留问题还没得到基本解决,规划产生新的问题又接踵而来,致使自然资源破坏严重,生态环境失衡恶化。 (三)城乡交通规划缺少通盘考虑 在城乡道路规划上,综合协调性差,实施建设重复性多,常有实施的规划道路被移位或取消,从而无相应规划执行技术要求与规范,也与周边生态环境关系不协调、不配套,为后期城乡建设留下隐患。 (四)公众参与规划广度拓展不够 虽然近年一些地方对城乡规划通过积极探索,让公众参与的范围越来越大,参与的形式也是多样,但是,一方面公众对规划了解不深,参与渠道还不够畅通,

相关文档