当前位置:文档之家› 数学建模算法合集之《动态规划的特点及其应用》

数学建模算法合集之《动态规划的特点及其应用》

数学建模算法合集之《动态规划的特点及其应用》
数学建模算法合集之《动态规划的特点及其应用》

动态规划的特点及其应用

目录

(点击进入)

§1动态规划的本质

§1.1多阶段决策问题

§1.2阶段与状态

§1.3决策和策略

§1.4最优化原理与无后效性

§1.5最优指标函数和规划方程

§2动态规划的设计与实现

§2.1动态规划的多样性

§2.2动态规划的模式性

§2.3动态规划的技巧性

§3动态规划与一些算法的比较

§3.1动态规划与递推

§3.2动态规划与搜索

§3.3动态规划与网络流

§4结语

【附录:部分试题与源程序】

1.“花店橱窗布置问题”试题

2.“钉子与小球”试题

3.例2“花店橱窗布置问题”方法1的源程序

4.例2“花店橱窗布置问题”方法2的源程序

5.例3“街道问题”的扩展

6.例4“mod 4最优路径问题”的源程序

7.例5“钉子与小球”的源程序

8.例6的源程序,“N个人的街道问题”

【参考文献】

【摘要】

动态规划是信息学竞赛中的常见算法,本文的主要内容就是分析它的特点。

文章的第一部分首先探究了动态规划的本质,因为动态规划的特点是由它的本质所决定的。第二部分从动态规划的设计和实现这两个角度分析了动态规划的多样性、模式性、技巧性这三个特点。第三部分将动态规划和递推、搜索、网络流这三个相关算法作了比较,从中探寻动态规划的一些更深层次的特点。

文章在分析动态规划的特点的同时,还根据这些特点分析了我们在解题中应该怎样利用这些特点,怎样运用动态规划。这对我们的解题实践有一定的指导意义 【正文】

动态规划是编程解题的一种重要的手段,在如今的信息学竞赛中被应用得越来越普遍。最近几年的信息学竞赛,不分大小,几乎每次都要考察到这方面的内容。因此,如何更深入地了解动态规划,从而更为有效地运用这个解题的有力武器,是一个值得深入研究的问题。

要掌握动态规划的应用技巧,就要了解它的各方面的特点。首要的,是要深入洞悉动态规划的本质。

§1动态规划的本质

动态规划是在本世纪50年代初,为了解决一类多阶段决策问题而诞生的。那么,什么样的问题被称作多阶段决策问题呢?

§1.1多阶段决策问题

说到多阶段决策问题,人们很容易举出下面这个例子。

[例1] 多段图中的最短路径问题:在下图中找出从A 1到D 1的最短路径。

7

4 3 8 6 7 5

4 6 5

A

1 B 1B 2

C 1

C 2 C 3

D 1

仔细观察这个图不难发现,它有一个特点。我们将图中的点分为四类(图中的A、B、C、D),那么图中所有的边都处于相邻的两类点之间,并且都从前一类点指向后一类点。这样,图中的边就被分成了三类(A→B、B→C、C→D)。我们需要从每一类中选出一条边来,组成从A1到D1的一条路径,并且这条路径是所有这样的路径中的最短者。

从上面的这个例子中,我们可以大概地了解到什么是多阶段决策问题。更精确的定义如下:

多阶段决策过程,是指这样的一类特殊的活动过程,问题可以按时间顺序分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列[1]。要使整个活动的总体效果达到最优的问题,称为多阶段决策问题。

从上述的定义中,我们可以明显地看出,这类问题有两个要素。一个是阶段,一个是决策。

§1.2阶段与状态

阶段:将所给问题的过程,按时间或空间特征分解成若干相互联系的阶段,以便按次序去求每阶段的解。常用字母k表示阶段变量。[1]

阶段是问题的属性。多阶段决策问题中通常存在着若干个阶段,如上面的例子,就有A、B、C、D这四个阶段。在一般情况下,阶段是和时间有关的;但是在很多问题(我的感觉,特别是信息学问题)中,阶段和时间是无关的。从阶段的定义中,可以看出阶段的两个特点,一是“相互联系”,二是“次序”。

阶段之间是怎样相互联系的?就是通过状态和状态转移。

状态:各阶段开始时的客观条件叫做状态。描述各阶段状态的变量称为状态变量,常用s k表示第k阶段的状态变量,状态变量s k的取值集合称为状态集合,用S k表示。

[1]

状态是阶段的属性。每个阶段通常包含若干个状态,用以描述问题发展到这个阶段时所处在的一种客观情况。在上面的例子中,行人从出发点A1走过两个阶段之后,可能出现的情况有三种,即处于C1、C2或C3点。那么第三个阶段就有三个状态S3={C1,C2,C3}。

每个阶段的状态都是由以前阶段的状态以某种方式“变化”而来,这种“变化”称为状态转移(暂不定义)。上例中C3点可以从B1点过来,也可以从B2点过来,从阶段2的B1或B2状态走到阶段3的C3状态就是状态转移。状态转移是导出状态的途径,也是联系各阶段的途径。

说到这里,可以提出应用动态规划的一个重要条件。那就是将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的发展,而只能通过当前的这个状态。换句话说,每个状态都是“过去历史的一个完整总结[1]”。这就是无后效性。对这个性质,下文还将会有解释。

§1.3决策和策略

上面的阶段与状态只是多阶段决策问题的一个方面的要素,下面是另一个方面的

要素——决策。

决策:当各段的状态取定以后,就可以做出不同的决定,从而确定下一阶段的状态,这种决定称为决策。表示决策的变量,称为决策变量,常用u k(s k)表示第k阶段当状态为s k时的决策变量。在实际问题中,决策变量的取值往往限制在一定范围内,我们称此范围为允许决策集合。常用D k(s k)表示第k阶段从状态s k出发的允许决策集合。显然有u k(s k) D k(s k)。[1]

决策是问题的解的属性。决策的目的就是“确定下一阶段的状态”,还是回到上例,从阶段2的B1状态出发有三条路,也就是三个决策,分别导向阶段3的C1、C2、C3三个状态,即D2(B1)={C1,C2,C3}。

有了决策,我们可以定义状态转移:动态规划中本阶段的状态往往是上一阶段和上一阶段的决策结果,由第k段的状态s k和本阶段的决策u k确定第k+1段的状态s k+1的过程叫状态转移。状态转移规律的形式化表示s k+1=T k(s k,u k)称为状态转移方程。

这样看来,似乎决策和状态转移有着某种联系。我的理解,状态转移是决策的目的,决策是状态转移的途径。

各段决策确定后,整个问题的决策序列就构成一个策略,用p1,n={u1(s1),u2(s2),…, u n(s n)}表示。对每个实际问题,可供选择的策略有一定范围,称为允许策略集合,记作P1,n,使整个问题达到最有效果的策略就是最优策略。[1]

说到这里,又可以提出运用动态规划的一个前提。即这个过程的最优策略应具有这样的性质:无论初始状态及初始决策如何,对于先前决策所形成的状态而言,其以后的所有决策应构成最优策略[1]。这就是最优化原理。简言之,就是“最优策略的子策略也是最优策略”。

§1.4最优化原理与无后效性

这里,我把最优化原理定位在“运用动态规划的前提”。这是因为,是否符合最优化原理是一个问题的本质特征。对于不满足最优化原理的一个多阶段决策问题,整体上的最优策略p1,n同任何一个阶段k上的决策u k或任何一组阶段k1…k2上的子策略p k1,k2都不存在任何关系。如果要对这样的问题动态规划的话,我们从一开始所作的划分阶段等努力都将是徒劳的。

而我把无后效性定位在“应用动态规划的条件”,是因为动态规划是按次序去求每阶段的解,如果一个问题有后效性,那么这样的次序便是不合理的。但是,我们可以通过重新划分阶段,重新选定状态,或者增加状态变量的个数等手段,来是问题满足无后效性这个条件。说到底,还是要确定一个“序”。

在信息学的多阶段决策问题中,绝大部分都是能够满足最优化原理的,但它们往往会在后效性这一点上来设置障碍。所以在解题过程中,我们会特别关心“序”。对于有序的问题,就会考虑到动态规划;对于无序的问题,也会想方设法来使其有序。

§1.5最优指标函数和规划方程

最优指标函数:用于衡量所选定策略优劣的数量指标称为指标函数,最优指标函数记为f k(s k),它表示从第k段状态s k采用最优策略p*k,n到过程终止时的最佳效益值[1]。

最优指标函数其实就是我们真正关心的问题的解。在上面的例子中,f 2(B 1)就表示从B 1点到终点D 1点的最短路径长度。我们求解的最终目标就是f 1(A 1)。

最优指标函数的求法一般是一个从目标状态出发的递推公式,称为规划方程:

()()k

k k k k s D u k k u u s T f g s f k k k ,),(opt

)(1)

(+∈=

其中s k 是第k 段的某个状态,u k 是从s k 出发的允许决策集合D k (s k )中的一个决策,T k (s k ,u k )是由s k 和u k 所导出的第k+1段的某个状态s k+1,g(x,u k )是定义在数值x 和决策u k 上的一个函数,而函数opt 表示最优化,根据具体问题分别表为max 或min 。

某个初始值

=)(n n s f ,称为边界条件。

上例中的规划方程就是:

()的长度

边指向的点

出发的某条边从k k k k u s k k u s u f s f k

k +=

++)(min

)(11

边界条件为0)(14=D f

这里是一种从目标状态往回推的逆序求法,适用于目标状态确定的问题。在我们的信息学问题中,也有很多有着确定的初始状态。当然,对于初始状态确定的问题,我们也可以采用从初始状态出发往前推的顺序求法。事实上,这种方法对我们来说要更为直观、更易设计一些,从而更多地出现在我们的解题过程中。

我们本节所讨论的这些理论虽然不是本文的主旨,但是却对下面要说的动态规划的特点起着基础性的作用。

§2动态规划的设计与实现

上面我们讨论了动态规划的一些理论,本节我们将通过几个例子中,动态规划的设计与实现,来了解动态规划的一些特点。

§2.1动态规划的多样性

[例2] 花店橱窗布置问题(IOI99)试题见附录

本题虽然是本届IOI 中较为简单的一题,但其中大有文章可作。说它简单,是因为它有序,因此我们一眼便可看出这题应该用动态规划来解决。但是,如何动态规划呢?如何划分阶段,又如何选择状态呢?

<方法1>以花束的数目来划分阶段。在这里,阶段变量k 表示的就是要布置的花束数目(前k 束花),状态变量s k 表示第k 束花所在的花瓶。而对于每一个状态s k ,决策就是第k-1束花应该放在哪个花瓶,用u k 表示。最优指标函数f k (s k )表示前k 束花,其中第k 束插在第s k 个花瓶中,所能取得的最大美学值。

状态转移方程为 k k u s =-1

规划方程为 ()),()(max )(1k k k s u k k k s k A u f s f k

k +=-<≤

(其中A(i,j)是花束i 插在花瓶j 中的美学值)

边界条件)0(0)(000V s s f ≤≤= (V 是花瓶总数,事实上这是一个虚拟的边界) <方法2>以花瓶的数目来划分阶段。在这里阶段变量k 表示的是要占用的花瓶数目(前k 个花瓶),状态变量s k 表示前k 个花瓶中放了多少花。而对于任意一个状态s k ,决策就是第s k 束花是否放在第k 个花瓶中,用变量u k =1或0来表示。最优指标函数f k (s k )表示前k 个花瓶中插了s k 束花,所能取得的最大美学值。

状态转移方程为k k k u s s -=-1

规划方程为()),()(max )(11

,0k s A u u s f s f k k k k k u k k ?+-=-=

边界条件为)0(0)0(V k f k ≤≤=

两种划分阶段的方法,引出了两种状态表示法,两种规划方式,但是却都成功地解决了问题。只不过因为决策的选择有多有少,所以算法的时间复杂度也就不同。[2] 这个例子具有很大的普遍性。有很多的多阶段决策问题都有着不止一种的阶段划分方法,因而往往就有不止一种的规划方法。有时各种方法所产生的效果是差不多的,但更多的时候,就像我们的例子一样,两种方法会在某个方面有些区别。

所以,在用动态规划解题的时候,可以多想一想是否有其它的解法。对于不同的解法,要注意比较,好的算法好在哪里,差一点的算法差在哪里。从各种不同算法的比较中,我们可以更深刻地领会动态规划的构思技巧。

§2.2动态规划的模式性

这个可能做过动态规划的人都有体会,从我们上面对动态规划的分析也可以看出来。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。

划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。注意这若干个阶段一定要是有序的或者是可排序的,否则问题就无法求解。

选择状态:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。

确定决策并写出状态转移方程:之所以把这两步放在一起,是因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以,如果我们确定了决策,状态转移方程也就写出来了。但事实上,我们常常是反过来做,根据相邻两段的各状态之间的关系来确定决策。

写出规划方程(包括边界条件):在第一部分中,我们已经给出了规划方程的通用形式化表达式。一般说来,只要阶段、状态、决策和状态转移确定了,这一步还是比较简单的。

动态规划的主要难点在于理论上的设计,一旦设计完成,实现部分就会非常简单。大体上的框架如下:

对f1(s1)初始化(边界条件)

for k←2 to n(这里以顺序求解为例)

对每一个s k∈S k

f k(s k)←一个极值(∞或-∞)

对每一个u k(s k)∈D k(s k)

s k-1←T k(s k,u k)

t←g(f k-1(s k-1),u k)

y t比f k(s k)更优n

f k(s k)←t

输出f n(s n)

这个N-S图虽然不能代表全部,但足可以概括大多数。少数的一些特殊的动态规划,其实现的原理也是类似,可以类比出来。我们到现在对动态规划的分析,主要是在理论上、设计上,原因也就在此。

掌握了动态规划的模式性,我们在用动态规划解题时就可以把主要的精力放在理论上的设计。一旦设计成熟,问题也就基本上解决了。而且在设计算法时也可以按部就班地来。

但是“物极必反”,太过拘泥于模式就会限制我们的思维,扼杀优良算法思想的产生。我们在解题时,不妨发挥一下创造性,去突破动态规划的实现模式,这样往往会收到意想不到的效果。[3]

§2.3动态规划的技巧性

上面我们所说的动态规划的模式性,主要指的是实现方面。而在设计方面,虽然它较为严格的步骤性,但是它的设计思想却是没有一定的规律可循的。这就需要我们不断地在实践当中去掌握动态规划的技巧,下面仅就一个例子谈一点我自己的体会。

[例3]街道问题:在下图中找出从左下角到右上角的最短路径,每步只能向右方或上方走。

3 7

4 8

7 6 3 5 3

4 6 3 5

2 8 5 9 4

3 6 3 5

8 7 4 3 7

5 4

6 2

这是一道简单而又典型的动态规划题,许多介绍动态规划的书与文章中都拿它来做例子。通常,书上的解答是这样的:

按照图中的虚线来划分阶段,即阶段变量k 表示走过的步数,而状态变量s k 表示当前处于这一阶段上的哪一点(各点所对应的阶段和状态已经用k s 在地图上标明)。这时的模型实际上已经转化成了一个特殊的多段图。用决策变量u k =0表示向右走,u k =1表示向上走,则状态转移方程如下:

??

?>+≤+-=-)

()(11row k u s row k u s s k

k k

k k

(这里的row 是地图竖直方向的行数)

我们看到,这个状态转移方程需要根据k 的取值分两种情况讨论,显得非常麻烦。相应的,把它代入规划方程而付诸实现时,算法也很繁。因而我们在实现时,一般是不会这么做的,而代之以下面方法:

将地图中的点规则地编号如上,得到的规划方程如下:

????

?++=----)

,(),1,(1

,),(),,1(,1,min j i j i j i j i j i j i j

i Distance f Distance f f

(这里Distance 表示相邻两点间的边长)

这样做确实要比上面的方法简单多了,但是它已经破坏了动态规划的本来面目,

而不存在明确的阶段特征了。如果说这种方法是以地图中的行(A 、B 、C 、D )来划分阶段的话,那么它的“状态转移”就不全是在两个阶段之间进行的了。

也许这没什么大不了的,因为实践比理论更有说服力。但是,如果我们把题目扩展一下:在地图中找出从左下角到右上角的两条路径,两条路径中的任何一条边都不能重叠,并且要求两条路径的总长度最短。这时,再用这种“简单”的方法就不太好办了。

如果非得套用这种方法的话,则最优指标函数就需要有四维的下标,并且难以处理两条路径“不能重叠”的问题。

D 1

E 1

F 1

G 1

H 1

C 1

D 2

E 2

F 2

G 2

B 1

C 2

D 3

E 3

F 3

D 1 D 2 D 3 D 4 D 5

C 1 C 2 C 3 C 4 C 5

B 1 B 2 B 3 B 4 B 5

A 1 A 2 A 3 A 4 A 5

而我们回到原先“标准”的动态规划法,就会发现这个问题很好解决,只需要加一维状态变量就成了。即用s k =(a k ,b k )分别表示两条路径走到阶段k 时所处的位置,相应的,决策变量也增加一维,用u k =(x k ,y k )分别表示两条路径的行走方向。状态转移时将两条路径分别考虑:

?

?

?

???

????+=+=>???+-=+-=≤----k

k k k k k k k k k k k y b b x a a row k y b b x a a row k 1111)(11)(

在写规划方程时,只要对两条路径走到同一个点的情况稍微处理一下,减少可选

的决策个数:

()()()()

?

???

?

≠+=+=-=-=k

k k k k k u k k k k k k u k k b a u s T f b a u s T f s f k k

两条边长两条边长),(min ),(min )(1)

1,1(),0,1(),1,0(),0,0(1)0,1(),1,0(

从这个例子中可以总结出设计动态规划算法的一个技巧:状态转移一般是在相邻的两个阶段之间(有时也可以在不相邻的两个阶段间),但是尽量不要在同一个阶段内进行。

动态规划是一种很灵活的解题方法,在动态规划算法的设计中,类似的技巧还有很多。要掌握动态规划的技巧,有两条途径:一是要深刻理解动态规划的本质,这也是我们为什么一开始就探讨它的本质的原因;二是要多实践,不但要多解题,还要学会从解题中探寻规律,总结技巧。

§3动态规划与一些算法的比较

动态规划作为诸多解题方法中的一种,必然和其他一些算法有着诸多联系。从这些联系中,我们也可以看出动态规划的一些特点。

§3.1动态规划与递推

——动态规划是最优化算法

由于动态规划的“名气”如此之大,以至于很多人甚至一些资料书上都往往把一种与动态规划十分相似的算法,当作是动态规划。这种算法就是递推。实际上,这两种算法还是很容易区分的。

按解题的目标来分,信息学试题主要分四类:判定性问题、构造性问题、计数问题和最优化问题。我们在竞赛中碰到的大多是最优化问题,而动态规划正是解决最优化问题的有力武器,因此动态规划在竞赛中的地位日益提高。而递推法在处理判定性问题和计数问题方面也是一把利器。下面分别就两个例子,谈一下递推法和动态规划在这两个方面的联系。

[例4] mod 4 最优路径问题:在下图中找出从第1点到第4点的一条路径,要求

路径长度mod 4的余数最小。

这个图是一个多段图,而且是一个特殊的多段图。虽然这个图的形式比一般的多段图要简单,但是这个最优路径问题却不能用动态规划来做。因为一条从第1点到第4点的最优路径,在它走到第2点、第3点时,路径长度mod 4的余数不一定是最小,也就是说最优策略的子策略不一定最优——这个问题不满足最优化原理。

但是我们可以把它转换成判定性问题,用递推法来解决。判断从第1点到第k 点的长度mod 4为s k 的路径是否存在,用f k (s k )来表示,则递推公式如下:

??

?===)

3,2,1()0()(1111s false

s true

s f (边界条件)

()()()

?

??

??---=---4mod )(4mod )(4mod )()(3,12,11,1k k k k k k k k k k k len s f len s f len s f s f

(这里len k,i 表示从第k-1点到第k 点之间的第i 条边的长度,方括号表示“或(or)”运算)

最后的结果就是可以使f 4(s 4)值为真的最小的s 4值。

这个递推法的递推公式和动态规划的规划方程非常相似,我们在这里借用了动态规划的符号也就是为了更清楚地显示这一点。其实它们的思想也是非常相像的,可以说是递推法借用了动态规划的思想解决了动态规划不能解决的问题。

有的多阶段决策问题(像这一题的阶段特征就很明显),由于不能满足最优化原理等使用动态规划的先决条件,而无法应用动态规划。在这时可以将最优指标函数的值当作“状态”放到下标中去,从而变最优化问题为判定性问题,再借用动态规划的思想,用递推法来解决问题。

[例5] 钉子与小球(NOI99)试题见附录

这个题目一看就不觉让人想起一道经典的动态规划题。下面先让我们回顾一下这个问题。

数字三角形(IOI94)在下图中求从顶至低某处的一条路径,使该路径所经过的数字的总和最大,每一步只能向左下或右下走。

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在这个问题中,我们按走过的行数来划分阶段,以走到每一行时所在的位置来作为状态,决策就是向左下走(用0表示)或向右下走(用1表示)。

状态转移方程:k k k u s s -=-1

3 1 0 1 2 2 0 2 3

1 2 3 4

规划方程:)()(max )(11

,0k k k k k u k k s Data u s f s f k +-=-=

边界条件:)

0(0

)1(0

)0(总行数≤≤=+=k k f f k k

这是一个比较简单的最优化问题,我们还可以把这个问题改成一个更加简单的整数统计问题:求顶点到每一点的路径总数。把这个总数用f k (s k )表示,那么递推公式就是:

=--=

1

1)()(k u k k k k k u s f s f

在这里,虽然求和公式只有两项,但我们仍然用∑的形式表示,就是为了突出这个递推公式和上面的规划方程的相似之处。这两个公式的边界条件都是一模一样的。 再回到我们上面的“钉子与小球”问题,这是一个概率统计问题。我们继续沿用上面的思想,用f k (s k )表示小球落到第k 行第s k 个钉子上的概率,则递推公式如下:

))

(1()1(2

)

()()(12

21

11---=---?-+-?-=

k k k k u k k k k k k k k s Exist

s f u s Exist

u s f s f k

(这里函数Exist k (s k )表示第k 行第s k 个钉子是否存在,存在则取1,不存在则取0)

边界条件

)

1(0

)1(0

)0(1)1(1总行数≤≤=+==k k f f f k k

可以看出这个公式较之上面的两个式子虽然略有变化,但是其基本思想还是类似的。在解这个问题的过程中,我们再次运用了动态规划的思想。

一般说来,很多最优化问题都有着对应的计数问题;反过来,很多计数问题也有着对应的最优化问题。因此,我们在遇到这两类问题时,不妨多联系、多发展,举一反三,从比较中更深入地理解动态规划的思想。

其实递推和动态规划这两种方法的思想本来就很相似,也不必说是谁借用了谁的思想。关键在于我们要掌握这种思想,这样我们无论在用动态规划法解最优化问题,或是在用递推法解判定型、计数问题时,都能得心应手、游刃有余了。

§3.2动态规划与搜索

——动态规划是高效率、高消费算法

同样是解决最优化问题,有的题目我们采用动态规划,而有的题目我们则需要用搜索。这其中有没有什么规则呢?

我们知道,撇开时空效率的因素不谈,在解决最优化问题的算法中,搜索可以说是“万能”的。所以动态规划可以解决的问题,搜索也一定可以解决。

把一个动态规划算法改写成搜索是非常方便的,状态转移方程、规划方程以及边界条件都可以直接“移植”,所不同的只是求解顺序。动态规划是自底向上的递推求

解,而搜索则是自顶向下的递归求解(这里指深度搜索,宽度搜索类似)。

反过来,我们也可以把搜索算法改写成动态规划。状态空间搜索实际上是对隐式图中的点进行枚举,这种枚举是自顶向下的。如果把枚举的顺序反过来,变成自底向上,那么就成了动态规划。(当然这里有个条件,即隐式图中的点是可排序的,详见下一节。) 正因为动态规划和搜索有着求解顺序上的不同,这也造成了它们时间效率上的差别。在搜索中,往往会出现下面的情况:

对于上图(a)这样几个状态构成的一个隐式图,用搜索算法就会出现重复,如上图(b)所示,状态C 2被搜索了两次。在深度搜索中,这样的重复会引起以C 2为根整个的整个子搜索树的重复搜索;在宽度搜索中,虽然这样的重复可以立即被排除,但是其时间代价也是不小的。而动态规划就没有这个问题,如上图(c)所示。

一般说来,动态规划算法在时间效率上的优势是搜索无法比拟的。(当然对于某些题目,根本不会出现状态的重复,这样搜索和动态规划的速度就没有差别了。)而从理论上讲,任何拓扑有序(现实中这个条件常常可以满足)的隐式图中的搜索算法都可以改写成动态规划。但事实上,在很多情况下我们仍然不得不采用搜索算法。那么,动态规划算法在实现上还有什么障碍吗?

考虑上图(a)所示的隐式图,其中存在两个从初始状态无法达到的状态。在搜索算法中,这样的两个状态就不被考虑了,如上图(b)所示。但是动态规划由于是自底向上求解,所以就无法估计到这一点,因而遍历了全部的状态,如上图(c)所示。 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的事搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。

如何协调好动态规划的高效率与高消费之间的矛盾呢?有一种折衷的办法就是记忆化算法。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。这种方法综合了搜索和动态规划两方面的优点,因而还是很有实用价值的。

A 1

B 1

B 2

C 1

C 2

C 3

A 1

B 1

B 2

C 1

C 2 C 3

C 2 A 1

B 1

B 2

C 1

C 2 C 3

(a) (b) (c)

A 1

B 1 B 2

C 1

C 2

C 3

A 1

B 1

B 2

C 2 C 2 A 1

B 1

B 2

C 1

C 2 C 3

(a) (b) (c)

§3.3动态规划与网络流

——动态规划是易设计易实现算法

由于图的关系复杂而无序,一般难以呈现阶段特征(除了特殊的图如多段图,或特殊的分段方法如Floyd ),因此动态规划在图论中的应用不多。但有一类图,它的点却是有序的,这就是有向无环图。

在有向无环图中,我们可以对点进行拓扑排序,使其体现出有序的特征,从而据此划分阶段。在有向无还图中求最短路径的算法[4],已经体现出了简单的动态规划思想。但动态规划在图论中还有更有价值的应用。下面先看一个例子。

[例6] N 个人的街道问题:在街道问题(参见例3)中,若有N 个人要从左下角走

向右上角,要求他们走过的边的总长度最大。当然,这里每个人也只能向右或向上走。下面是一个样例,左图是从出发地到目的地的三条路径,右图是他们所走过的边,这些边的总长度为5 + 4 + 3 + 6 + 3 + 3 + 5 + 8 + 8 + 7 + 4 + 5 + 9 + 5 + 3 = 78(不一定是最大)。

这个题目是对街道问题的又一次扩展。仿照街道问题的解题方法,我们仍然可以用动态规划来解决本题。不过这一次是N 个人同时走,状态变量也就需要用N 维来表示,。相应的,决策变量也要变成N 维,u k =(u k,1,u k,2,…,u k,N )。状态转移方程不需要做什么改动:

)1()

()(1,,,1,,,1N i row k u s s row k u s s i

k i k i k i k i k i k ≤≤?????>+=≤+-=--

在写规划方程时,需要注意在第k 阶段,N 条路径所走过的边的总长度的计算,

在这里我就用g k (s k ,u k )来表示了:

()()),(),(max

)(1)

1(1,0,k k k k k k k N i u k k u s g u s T f s f i k +=

-≤≤=

边界条件为()0)1,,1,1(1= f

可见将原来的动态规划算法移植到这个问题上来,在理论上还是完全可行的。但是,现在的这个动态规划算法的时空复杂度已经是关于N 的指数函数,只要N 稍微大一点,这个算法就不可能实现了。

下面我们换一个思路,将N 条路径看成是网络中一个流量为N 的流,这样求解的目标就是使这个流的费用最大。但是本题又不同于一般的费用流问题,在每一条边e

3 7

4 8 7 6 3

5 3 4

6 3 5 2 8 5 9 4 3 6 3 5 8

7 4 3 7 5 4 6 2

3 7

4 8 7 6 3

5 3 4

6 3 5 2 8 5 9 4 3 6 3 5 8

7 4 3 7 5 4 6 2

上的流费用并不是流量和边权的乘积)()(e w e f ?,而是用下式计算:

???=>0

)(0

0)()(e f e f e w

为了使经典的费用流算法适用于本题,我们需要将模型稍微转化一下:

如图,将每条边拆成两条。拆开后一条边上有权,但是容量限制为1;另一条边没有容量限制,但是流过这条边就不能计算费用了。这样我们就把问题转化成了一个标准的最大费用固定流问题。

这个算法可以套用经典的最小费用最大流算法,在此就不细说了。(参见附录中的源程序)

这个例题是我仿照IOI97的“障碍物探测器”一题[6]编出来的。“障碍物探测器”比这一题要复杂一些,但是基本思想是相似的。类似的题目还有99年冬令营的“迷宫改造”[7]。从这些题目中都可以看到动态规划和网络流的联系。

推广到一般情况,任何有向无环图中的费用流问题在理论上说,都可以用动态规划来解决。对于流量为N (如果流量不固定,这个N 需要事先求出来)的费用流问题,用N 维的变量s k =(s k,1,s k,2,…,s k,N )来描述状态,其中s k,i ∈V(1≤i ≤N)。相应的,决策也用N 维的变量u k =(u k,1,u k,2,…,u k,N )来表示,其中u k,i ∈E(s k,i )(1≤i ≤N),E(v)表示指向v 的弧集。则状态转移方程可以这样表示:

s k-1,i = u k,i 的弧尾结点

规划方程为()???

?

?

?

+=∑=∈N

i k k k k k s E u k

k u w u s T f s f i k i k 1)()(),(opt )(,, 边界条件为()0)1,1,1(1= f

但是,由于动态规划算法是指数级算法,因而在实现中的局限性很大,仅可用于

一些N 非常小的题目。然而在竞赛解题中,比如上面说到的IOI97以及99冬令营测试时,我们使用动态规划的倾向性很明显(“障碍物探测器”中,我们用的是贪心策

略,求N=1或N=2时的局部最优解[8]

)。这主要有两个原因:

一.虽然网络流有着经典的算法,但是在竞赛中不可能出现经典的问题。如果要

运用网络流算法,则需要经过一番模型转化,有时这个转化还是相当困难的。因此在算法的设计上,灵活巧妙的动态规划算法反而要更为简单一些。 二.网络流算法实现起来很繁,这是被人们公认的。因而在竞赛的紧张环境中,

实现起来有一定模式的动态规划算法又多了一层优势。 正由于动态规划算法在设计和实现上的简便性,所以在N 不太大时,也就是在动

c 1=1 w 1=w 0

c 2=∞ w 2=0

w 0

态规划可行的情况下,我们还是应该尽量运用动态规划。

§4结语

本文的内容比较杂,是我几年来对动态规划的参悟理解、心得体会。虽然主要的篇幅讲的都是理论,但是根本的目的还是指导实践。

动态规划,据我认为,是当今信息学竞赛中最灵活、也最能体现解题者水平的一类解题方法。本文内容虽多,不能涵盖动态规划之万一。“纸上得来终觉浅,绝知此事要躬行。”要想真正领悟、理解动态规划的思想,掌握动态规划的解题技巧,还需要在实践中不断地挖掘、探索。实践得多了,也就能体会到渐入佳境之妙了。

动态规划,

算法之常,

运用之妙,

存乎一心。

【附录:部分试题与源程序】

1.“花店橱窗布置问题”试题

LITTLE SHOP OF FLOWERS

PROBLEM

You want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flowers, each being of a different kind, and at least as many vases ordered in a row. The vases are glued onto the shelf and are numbered consecutively 1 through V, where V is the number of vases, from left to right so that the vase 1 is the leftmost, and the vase V is the rightmost vase. The bunches are moveable and are uniquely identified by integers between 1 and F. These id-numbers have a significance: They determine the required order of appearance of the flower bunches in the row of vases so that the bunch i must be in a vase to the left of the vase containing bunch j whenever i < j. Suppose, for example, you have bunch of azaleas (id-number=1), a bunch of begonias (id-number=2) and a bunch of carnations (id-number=3). Now, all the bunches must be put into the vases keeping their id-numbers in order. The bunch of azaleas must be in a vase to the left of begonias, and the bunch of begonias must be in a vase to the left of carnations. If there are more vases than bunches of flowers then the excess will be left empty. A vase can hold only one bunch of flowers.

Each vase has a distinct characteristic (just like flowers do). Hence, putting a bunch of flowers in a vase results in a certain aesthetic value, expressed by an integer. The aesthetic values are presented in a table as shown below. Leaving a vase empty has an aesthetic value of 0.

VASES

1 2 3 4 5

Bunches 1 (azaleas) 7 23 -5 -24 16

2 (begonias) 5 21 -4 10 23

3 (carnations) -21 5 -

4 -20 20

According to the table, azaleas, for example, would look great in vase 2, but they would look awful in vase 4.

To achieve the most pleasant effect you have to maximize the sum of aesthetic values for the arrangement while keeping the required ordering of the flowers. If more than one arrangement has the maximal sum value, any one of them will be acceptable. You have to produce exactly one arrangement.

ASSUMPTIONS

1 <= F <= 100 where F is the number of the bunches of flowers. The bunches are numbered 1 through F.

F <= V <= 100 where V is the number of vases.

-50 <= A ij<= 50 where A ij is the aesthetic value obtained by putting the flower bunch i into the vase j.

INPUT

The input is a text file named flower.inp.

The first line contains two numbers: F, V.

The following F lines: Each of these lines contains V integers, so that A ij

is given as the jth number on the (i+1)st line of the input file.

OUTPUT

The output must be a text file named flower.out consisting of two lines: The first line will contain the sum of aesthetic values for your arrangement. The second line must present the arrangement as a list of F numbers, so that the k’th number on this line identifies the vase in which the bunch k is put.

EXAMPLE

flower.inp:

3 5

7 23 -5 -24 16

5 21 -4 10 23

-21 5 -4 -20 20

flower.out:

53

2 4 5

EVALUATION

Your program will be allowed to run 2 seconds.

No partial credit can be obtained for a test case.

2. “钉子与小球”试题

有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1)。每颗钉子和周围的钉子的距离都等于d ,每个格子的宽度也都等于d ,且除了最左端和最右端的格子外每个格子都正对着最下面一排钉子的间隙。

让一个直径略小于d 的小球中心正对着最上面的钉子在板上自由滚落,小球每碰到一个钉子都可能落向左边或右边(概率各1/2),且球的中心还会正对着下一颗将要碰上的钉子。例如图2就是小球一条可能的路径。

我们知道小球落在第i 个格子中的概率n

n

i n i i n i n C p 2)!

(!!2-=

=,

其中i 为格子的编号,从左至右依次为0,1,...,n 。

现在的问题是计算拔掉某些钉子后,小球落在编号为m 的格子中的概率p m 。假定最下面一排钉子不会被拔掉。例如图3是某些钉子被拔掉后小球一条可能的路径。

图1 图2 图3

输入

第1行为整数n (2<=n<=50)和m (0<=m<=n )。

以下n 行依次为木板上从上至下n 行钉子的信息,每行中‘*’表示钉子还在,‘.’ 表示钉子被拔去,注意在这n 行中空格符可能出现在任何位置。

输出

仅一行,是一个既约分数(0写成0/1),为小球落在编号为m 的格子中的概率p m 。 既约分数的定义:A/B 是既约分数,当且仅当A 、B 为正整数且A 和B 没有大于1的公因子。

样例输入 5 2 * * . * * * * . * * * * * * *

样例输出 7/16

3. 例2“花店橱窗布置问题”方法1的源程序

program IOI99_LittleShopOfFlowers;

var

F,V :byte; {花束和花瓶的数目}

A :array [1..100,1..100] of shortint; {A[i,j]花束i放在花瓶j中的美学值}

Best :array [0..100,0..100] of integer;

{Best[i,j]前i束花放在前j个花瓶中的最优解}

Previous :array [1..100,1..100] of byte;

{Previous[i,j]在Best[i,j]的最优解中,花束i-1的位置}

procedure ReadIn; {读入}

var

i,j :byte;

begin

reset(input);

readln(F,V);

for i:=1 to F do

begin

for j:=1 to V do

read(A[i,j]);

readln;

end;

close(input);

end;

procedure Work; {规划主过程}

var

i,j,t :byte;

begin

fillchar(Best[0],sizeof(Best[0]),0); {边界条件}

for i:=1 to F do

for j:=i to V+i-F do

begin

Best[i,j]:=low(Best[i,j]);

for t:=i-1 to j-1 do {枚举花束i-1的位置}

if Best[i-1,t]>Best[i,j] then

begin {更新当前最优解}

Best[i,j]:=Best[i-1,t];

Previous[i,j]:=t;

end;

inc(Best[i,j],A[i,j]);

end;

end;

procedure Print; {打印最优解}

var

i,j :byte;

Put :array [1..100] of byte;

begin

i:=F;

for j:=F+1 to V do {选择全局最优解}

if Best[F,j]>Best[F,i] then

i:=j; {i最后一束花的位置}

rewrite(output);

writeln(Best[F,i]);

for j:=F downto 1 do

begin

Put[j]:=i;

i:=Previous[j,i];

end;

for i:=1 to F do

write(Put[i],' ');

writeln;

close(output);

end;

begin

assign(input,'flower.inp');

assign(output,'flower.out');

ReadIn;

Work;

Print;

end.

4.例2“花店橱窗布置问题”方法2的源程序

program IOI99_LittleShopOfFlowers;

var

F,V :byte; {花束和花瓶的数目}

A :array [1..100,1..100] of shortint; {A[i,j]花束i放在花瓶j中的美学值}

Best :array [0..100,0..100] of integer;

{Best[i,j]前i束花放在前j个花瓶中的最优解}

Choice :array [0..100,0..100] of boolean;

{Choice[i,j] 花束i是否放在花瓶j中}

procedure ReadIn; {读入}

var

i,j :byte;

begin

reset(input);

readln(F,V);

for i:=1 to F do

begin

for j:=1 to V do

read(A[i,j]);

readln;

end;

close(input);

end;

procedure Work; {规划主过程}

var

i,j :byte;

begin

fillchar(Best[0],sizeof(Best[0]),0); {边界条件}

for i:=1 to F do

begin

Best[i,i]:=Best[i-1,i-1]+A[i,i]; {唯一的选择}

Choice[i,i]:=true;

for j:=i+1 to V+i-F do

begin

Choice[i,j]:=Best[i-1,j-1]+A[i,j]>Best[i,j-1];

if Choice[i,j]

then Best[i,j]:=Best[i-1,j-1]+A[i,j] {i放在j中}

else Best[i,j]:=Best[i,j-1]; {i不放在j中} end;

end;

end;

procedure Print; {打印最优解}

var

i,j :byte;

Put :array [1..100] of byte; {Put[i]花束i所在的花瓶} begin

rewrite(output);

writeln(Best[F,V]);

i:=F;

for j:=V downto 1 do {倒推求Put}

if Choice[i,j] then

begin

Put[i]:=j;

dec(i);

end;

for i:=1 to F do

begin

从几个生活实例看数学建模及其应用

从几个生活实例看数学建模及其应用 [内容摘要] 本文通过几个生活中的事例,并运用数学建模,来分析问题,以便更方便的得出解决问题的方案。从中通过将数学建模的抽象理论实例化,生动化,我们能够更清楚看出数学在生活中无处不在,无处不用。 [关键词] 数学建模生活数学 数学,作为一门研究现实世界数量关系和空间形式的科学,与生活是息息相关的。作为用数学方法解决实际问题的第一步,数学建模自然有着与数学相当的意义。在各种不同的领域中,人们一直在运用数学建模来描绘,刻画某种生活规律或者生活现象,以便找到其中解决问题的最佳方案或得到最佳结论。例如,运用模拟近似法建模的方法,在社会科学,生物学,医学,经济些学等学科的实践中,来建立微分方程模型。在这些领域中的一些现象的规律性仍是未知的,或者问题太过复杂,所以在实际应用中总要通过一些简化,近似的模型来与实际情况比对,从而更加容易的得出规律性。 本文通过数学模型在生活中运用的几个例子,来了解,探讨数学模型的相关知识。 一、数学模型的简介 早在学习初等代数的时候,就已经碰到过数学模型了,例如在三个村庄之间建立一个粮仓,使其到三个村子的距离只和最短。我们可以通过建立方程组以及线性规划来解决该问题。

当然,真实实际问题的数学建模通常要复杂得多,但是建立数学建模的基本内容已经包含在解决这类代数应用题的过程中了。那就是:根据建立模型的目的和问题的背景作出必要的简化假设;用字母表示待求的未知量;利用相应的物理或其他规律,列出数学式子;求出数学上的解答;用这个答案解释问题;最后用实际现象来验证结果。 一般来说,数学模型可以描述为,对于现实世界的一个特定对象,为了一个特定目的,根据特有的内在规律,作出一些必要的简化假设,运用适当的数学工具,得到的一个数学结构。 二、数学模型的意义 1)在一般工程技术领域,数学建模仍然大有用武之地。 2)在高新技术领域,数学建模几乎是必不可少的工具。 3)数学迅速进入一些新领域,为数学建模开拓了许多新的处女地。 三、数学建模实例 例1、某饲养场每天投入6元资金用于饲养、设备、人力,估计可使一头60kg重的生猪每天增重。目前生猪出售的市场价格为12元/kg,但是预测每天会降低元,问该场应该什么时候出售这样的生猪问题分析投入资金可使生猪体重随时间增长,但售价随时间减少,应该存在一个最佳的出售时机,使获得利润最大。根据给出的条件,可作出如下的简化假设。 模型假设每天投入6元资金使生猪的体重每天增加的常数为r(=);生猪出售的市场价格每天降低常数g(=元)。

什么是数学模型与数学建模

1. 什么是数学模型与数学建模 简单地说:数学模型就是对实际问题的一种数学表述。 具体一点说:数学模型是关于部分现实世界为某种目的的一个抽象的简化的数学结构。 更确切地说:数学模型就是对于一个特定的对象为了一个特定目标,根据特有的内在规律,做出一些必要的简化假设,运用适当的数学工具,得到的一个数学结构。数学结构可以是数学公式,算法、表格、图示等。 数学建模就是建立数学模型,建立数学模型的过程就是数学建模的过程(见数学建模过程流程图)。数学建模是一种数学的思考方法,是运用数学的语言和方法,通过抽象、简化建立能近似刻划并"解决"实际问题的一种强有力的数学手段。 2.美国大学生数学建模竞赛的由来: 1985年在美国出现了一种叫做MCM的一年一度大大学生数学模型(1987年全称为Mathematical Competition in Modeling,1988年改全称为Mathematical Contest in Modeling,其所写均为MCM)。这并不是偶然的。在1985年以前美国只有一种大学生数学竞赛(The william Lowell Putnam mathematial Competition,简称Putman(普特南)数学竞赛),这是由美国数学协会(MAA--即Mathematical Association of America的缩写)主持,于每年12月的第一个星期六分两试进行,每年一次。在国际上产生很大影响,现已成为国际性的大学生的一项著名赛事。该竞赛每年2月或3月进行。 我国自1989年首次参加这一竞赛,历届均取得优异成绩。经过数年参加美国赛表明,中国大学生在数学建模方面是有竞争力和创新联想能力的。为使这一赛事更广泛地展开,1990年先由中国工业与应用数学学会后与国家教委联合主办全国大学生数学建模竞赛(简称CMCM),该项赛事每年9月进行。

数学建模方法及其应用

一、层次分析法 层次分析法[1] (analytic hierarchy process,AHP)是美国著名的运筹学家T.L.Saaty教授于20世纪70年代初首先提出的一种定性与定量分析相结合的多准则决策方法[2,3,4].该方法是社会、经济系统决策的有效工具,目前在工程计划、资源分配、方案排序、政策制定、冲突问题、性能评价等方面都有广泛的应用. (一) 层次分析法的基本原理 层次分析法的核心问题是排序,包括递阶层次结构原理、测度原理和排序原理[5].下面分别予以介绍.1.递阶层次结构原理 一个复杂的结构问题可以分解为它的组成部分或因素,即目标、准则、方案等.每一个因素称为元素.按照属性的不同把这些元素分组形成互不相交的层次,上一层的元素对相邻的下一层的全部或部分元素起支配作用,形成按层次自上而下的逐层支配关系.具有这种性质的层次称为递阶层次. 2.测度原理 决策就是要从一组已知的方案中选择理想方案,而理想方案一般是在一定的准则下通过使效用函数极大化而产生的.然而对于社会、经济系统的决策模型来说,常常难以定量测度.因此,层次分析法的核心是决策模型中各因素的测度化.

3. 排序原理 层次分析法的排序问题,实质上是一组元素两两比较其重要性,计算元素相对重要性的测度问题. (二) 层次分析法的基本步骤 层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一致的[1]. 1. 成对比较矩阵和权向量 为了能够尽可能地减少性质不同的诸因素相互比较的困难,提高结果的准确度.T .L .Saaty 等人的作法,一是不把所有因素放在一起比较,而是两两相互对比,二是对比时采用相对尺度. 假设要比较某一层n 个因素n C C ,,1 对上层一个因素O 的影响,每次取两个因素i C 和j C ,用ij a 表示i C 和j C 对 O 的影响之比,全部比较结果可用成对比较阵 ()1 ,0,ij ij ji n n ij A a a a a ?=>= 表示,A 称为正互反矩阵. 一般地,如果一个正互反阵A 满足: ,ij jk ik a a a ?=,,1,2, ,i j k n = (1) 则A 称为一致性矩阵,简称一致阵.容易证明n 阶一致阵A 有下列性质:

数学建模算法动态规划

第四章动态规划 §1 引言 1.1 动态规划的发展及研究内容 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初R. E. Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法—动态规划。1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。 应指出,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种特殊算法(如线性规划是一种算法)。因而,它不象线性规划那样有一个标准的数学表达式和明确定义的一组规则,而必须对具体问题进行具体分析处理。因此,在学习时,除了要对基本概念和方法正确理解外,应以丰富的想象力去建立模型,用创造性的技巧去求解。 例1 最短路线问题 下面是一个线路网,连线上的数字表示两点之间的距离(或费用)。试寻求一条由A 到G距离最短(或费用最省)的路线。 例2 生产计划问题 工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件)。经调查,市场对该产品的需求量第一、二、三、四季度分别为2,3,2,4(千件)。如果工厂在第一、二季度将全年的需求都生产出来,自然可以降低成本(少付固定成本费),但是对于第三、四季度才能上市的产品需付存储费,每季每千件的存储费为0.5(千元)。还规定年初和年末这种产品均无库存。试制定一个生产计划,即安排每个季度的产量,使一年的总费用(生产成本和存储费)最少。 1.2 决策过程的分类 根据过程的时间变量是离散的还是连续的,分为离散时间决策过程(discrete-time decision process)和连续时间决策过程(continuous-time decision process);根据过程的演变是确定的还是随机的,分为确定性决策过程(deterministic decision process)和随

数学建模算法分类

数学模型按照不同的分类标准有许多种类: 1.按照模型的数学方法分,有几何模型,图论模型,微分方程模型。概率模型,最优控制模型,规划论模型,马氏链模型。 2.按模型的特征分,有静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型。 3.按模型的应用领域分,有人口模型,交通模型,经济模型,生态模型,资源模型。环境模型。 4.按建模的目的分,有预测模型,优化模型,决策模型,控制模型等。 5.按对模型结构的了解程度分,有白箱模型,灰箱模型,黑箱模型。 数学建模的十大算法: 蒙特卡洛算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法。) 数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用matlab作为工具。) 线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用lingo、lingdo软件实现)图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。) 动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题时用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需谨慎使用) 网格算法和穷举法(当重点讨论模型本身而情史算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 一些连续离散化方法(很多问题都是从实际来的,数据可以是连续的,而计算机只认得是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。) 图像处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用matlab来处理问题。) 数学建模方法 统计:1.预测与预报2.评价与决策3.分类与判别4.关联与因果 优化:5.优化与控制 预测与预报 ①灰色预测模型(必须掌握) 满足两个条件可用: a数据样本点个数少,6-15个 b数据呈现指数或曲线的形式 ②微分方程预测(备用) 无法直接找到原始数据之间的关系,但可以找到原始数据变化速度之间的关系,通过公式

数学建模常用的十种解题方法

数学建模常用的十种解题方法 摘要 当需要从定量的角度分析和研究一个实际问题时,人们就要在深入调查研究、了解对象信息、作出简化假设、分析内在规律等工作的基础上,用数学的符号和语言,把它表述为数学式子,也就是数学模型,然后用通过计算得到的模型结果来解释实际问题,并接受实际的检验。这个建立数学模型的全过程就称为数学建模。数学建模的十种常用方法有蒙特卡罗算法;数据拟合、参数估计、插值等数据处理算法;解决线性规划、整数规划、多元规划、二次规划等规划类问题的数学规划算法;图论算法;动态规划、回溯搜索、分治算法、分支定界等计算机算法;最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法;网格算法和穷举法;一些连续离散化方法;数值分析算法;图象处理算法。 关键词:数学建模;蒙特卡罗算法;数据处理算法;数学规划算法;图论算法 一、蒙特卡罗算法 蒙特卡罗算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法。在工程、通讯、金融等技术问题中, 实验数据很难获取, 或实验数据的获取需耗费很多的人力、物力, 对此, 用计算机随机模拟就是最简单、经济、实用的方法; 此外, 对一些复杂的计算问题, 如非线性议程组求解、最优化、积分微分方程及一些偏微分方程的解⑿, 蒙特卡罗方法也是非常有效的。 一般情况下, 蒙特卜罗算法在二重积分中用均匀随机数计算积分比较简单, 但精度不太理想。通过方差分析, 论证了利用有利随机数, 可以使积分计算的精度达到最优。本文给出算例, 并用MA TA LA B 实现。 1蒙特卡罗计算重积分的最简算法-------均匀随机数法 二重积分的蒙特卡罗方法(均匀随机数) 实际计算中常常要遇到如()dxdy y x f D ??,的二重积分, 也常常发现许多时候被积函数的原函数很难求出, 或者原函数根本就不是初等函数, 对于这样的重积分, 可以设计一种蒙特卡罗的方法计算。 定理 1 )1( 设式()y x f ,区域 D 上的有界函数, 用均匀随机数计算()??D dxdy y x f ,的方法: (l) 取一个包含D 的矩形区域Ω,a ≦x ≦b, c ≦y ≦d , 其面积A =(b 一a) (d 一c) ; ()j i y x ,,i=1,…,n 在Ω上的均匀分布随机数列,不妨设()j i y x ,, j=1,…k 为落在D 中的k 个随机数, 则n 充分大时, 有

数学建模中常见的十大模型

数学建模常用的十大算法==转 (2011-07-24 16:13:14) 转载▼ 1. 蒙特卡罗算法。该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法。 2. 数据拟合、参数估计、插值等数据处理算法。比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MA TLAB 作为工具。 3. 线性规划、整数规划、多元规划、二次规划等规划类算法。建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo 软件求解。 4. 图论算法。这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。 5. 动态规划、回溯搜索、分治算法、分支定界等计算机算法。这些算法是算法设计中比较常用的方法,竞赛中很多场合会用到。 6. 最优化理论的三大非经典算法:模拟退火算法、神经网络算法、遗传算法。这些问题是用来解决一些较困难的最优化问题的,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。 7. 网格算法和穷举法。两者都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。 8. 一些连续数据离散化方法。很多问题都是实际来的,数据可以是连续的,而计算机只能处理离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 9. 数值分析算法。如果在比赛中采用高级语言进行编程的话,那些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。 10. 图象处理算法。赛题中有一类问题与图形有关,即使问题与图形无关,论文中也会需要图片来说明问题,这些图形如何展示以及如何处理就是需要解决的问题,通常使用MA TLAB 进行处理。 以下将结合历年的竞赛题,对这十类算法进行详细地说明。 以下将结合历年的竞赛题,对这十类算法进行详细地说明。 2 十类算法的详细说明 2.1 蒙特卡罗算法 大多数建模赛题中都离不开计算机仿真,随机性模拟是非常常见的算法之一。 举个例子就是97 年的A 题,每个零件都有自己的标定值,也都有自己的容差等级,而求解最优的组合方案将要面对着的是一个极其复杂的公式和108 种容差选取方案,根本不可能去求解析解,那如何去找到最优的方案呢?随机性模拟搜索最优方案就是其中的一种方法,在每个零件可行的区间中按照正态分布随机的选取一个标定值和选取一个容差值作为一种方案,然后通过蒙特卡罗算法仿真出大量的方案,从中选取一个最佳的。另一个例子就是去年的彩票第二问,要求设计一种更好的方案,首先方案的优劣取决于很多复杂的因素,同样不可能刻画出一个模型进行求解,只能靠随机仿真模拟。 2.2 数据拟合、参数估计、插值等算法 数据拟合在很多赛题中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98 年美国赛A 题,生物组织切片的三维插值处理,94 年A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的

初中数学建模方法及应用

龙源期刊网 https://www.doczj.com/doc/9c15004023.html, 初中数学建模方法及应用 作者:肖永刚 来源:《新课程·中学》2017年第03期 摘要:在新课标中要求培养学生的创新能力,在初中数学教学中培养学生的建模能力, 是培养数学创新能力的重要方法,也能增强学生利用数学知识解决问题的能力。对培养初中生数学建模方法及应用进行了论述。 关键词:初中数学;建模思想;数学应用 利用数学建模的方法是学习初中数学的新方法,是素质教育和新课标的要求,能为学生的数学能力发展提供全新途径,提高学生运用数学工具解决问题的能力,让学生在用数学工具解决问题中体会到数学学习的意义,从而提高数学学习兴趣。 一、数学建模的概念 数学建模就是对具体问题分析并简化后,运用数学知识,找出解决方法并利用数学式子来求解,从而使问题得以解决。数学建模方法有以下几个步骤:一是对具体问题分析并简化,然后用数学知识建立关系式(模型),二是求解数学式子,三是根据实际情况检验并选出正确答案。初中阶段数学建模常用方法有:函数模型、不等式模型、方程模型、几何模型等。 二、数学建模的方法步骤 要培养学生的数学建模方法,可按以下方法步骤进行: 1.分析问题题意为建模做准备。对具体问题包含的已知条件和数量关系进行分析,根据问题的特点,选择使用数学知识建立模型。 2.简化实际问题假设数学模型。对实际问题进行一定的简化,再根据问题的特征和要求以及解题的目的,对模型进行假设,要找出起关键作用的因素和主要变量。 3.利用恰当工具建立数学模型。通过建立恰当的数学式子,来建立模型中各变量之间的关系式,以此来完成数学模型的 建立。 4.解答数学问题找出问题答案。通过对模型中的数学问题进行解答,找出实际问题的答案。

数学建模算法大全排队论

第六章排队论模型 排队论起源于1909年丹麦电话工程师A. K.爱尔朗的工作,他对电话通话拥挤问题进行了研究。1917年,爱尔朗发表了他的著名的文章—“自动电话交换中的概率理论的几个问题的解决”。排队论已广泛应用于解决军事、运输、维修、生产、服务、库存、医疗卫生、教育、水利灌溉之类的排队系统的问题,显示了强大的生命力。 排队是在日常生活中经常遇到的现象,如顾客到商店购买物品、病人到医院看病常常要排队。此时要求服务的数量超过服务机构(服务台、服务员等)的容量。也就是说,到达的顾客不能立即得到服务,因而出现了排队现象。这种现象不仅在个人日常生活中出现,电话局的占线问题,车站、码头等交通枢纽的车船堵塞和疏导,故障机器的停机待修,水库的存贮调节等都是有形或无形的排队现象。由于顾客到达和服务时间的随机性。可以说排队现象几乎是不可避免的。 排队论(Queuing Theory)也称随机服务系统理论,就是为解决上述问题而发展的一门学科。它研究的内容有下列三部分: (i)性态问题,即研究各种排队系统的概率规律性,主要是研究队长分布、等待时间分布和忙期分布等,包括了瞬态和稳态两种情形。 (ii)最优化问题,又分静态最优和动态最优,前者指最优设计。后者指现有排队系统的最优运营。 (iii)排队系统的统计推断,即判断一个给定的排队系统符合于那种模型,以便根据排队理论进行分析研究。 这里将介绍排队论的一些基本知识,分析几个常见的排队模型。 §1 基本概念 1.1 排队过程的一般表示 下图是排队论的一般模型。 凡要求服务的对象统称为顾客,为顾客服务的人或物称为服务员,由顾客和服务员组成服务系统。对于一个服务系统来说,如果服务机构过小,以致不能满足要求服务的众多顾客的需要,那么就会产生拥挤现象而使服务质量降低。因此,顾客总希望服务机构越大越好,但是,如果服务机构过大,人力和物力方面的开支也就相应增加,从而会造成浪费,因此研究排队模型的目的就是要在顾客需要和服务机构的规模之间进行权衡决策,使其达到合理的平衡。 1.2 排队系统的组成和特征 一般的排队过程都由输入过程、排队规则、服务过程三部分组成,现分述如下: 1.2.1 输入过程 输入过程是指顾客到来时间的规律性,可能有下列不同情况: (i)顾客的组成可能是有限的,也可能是无限的。 (ii)顾客到达的方式可能是一个—个的,也可能是成批的。 (iii)顾客到达可以是相互独立的,即以前的到达情况对以后的到达没有影响;否则是相关的。 (iv)输入过程可以是平稳的,即相继到达的间隔时间分布及其数学期望、方差等数字特征都与时间无关,否则是非平稳的。

数学建模十种常用算法

数学建模有下面十种常用算法, 可供参考: 1.蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问 题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法) 2.数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数 据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3.线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多 数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4.图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算 法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5.动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算 法设计中比较常用的方法,很多场合可以用到竞赛中) 6.最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些 问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7.网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很 多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8.一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计 算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9.数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分 析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10.图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中 也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab 进行处理)

数学建模案例分析插值与拟合方法建模1数据插值方法及应用

第十章 插值与拟合方法建模 在生产实际中,常常要处理由实验或测量所得到的一批离散数据,插值与拟合方法就是要通过这些数据去确定某一类已经函数的参数,或寻求某个近似函数使之与已知数据有较高的拟合精度。插值与拟合的方法很多,这里主要介绍线性插值方法、多项式插值方法和样条插值方法,以及最小二乘拟合方法在实际问题中的应用。相应的理论和算法是数值分析的内容,这里不作详细介绍,请参阅有关的书籍。 §1 数据插值方法及应用 在生产实践和科学研究中,常常有这样的问题:由实验或测量得到变量间的一批离散样点,要求由此建立变量之间的函数关系或得到样点之外的数据。与此有关的一类问题是当原始数据 ),(,),,(),,(1100n n y x y x y x 精度较高,要求确定一个初等函数)(x P y =(一般用多项式或分段 多项式函数)通过已知各数据点(节点),即n i x P y i i ,,1,0,)( ==,或要求得函数在另外一些点(插值点)处的数值,这便是插值问题。 1、分段线性插值 这是最通俗的一种方法,直观上就是将各数据点用折线连接起来。如果 b x x x a n =<<<= 10 那么分段线性插值公式为 n i x x x y x x x x y x x x x x P i i i i i i i i i i ,,2,1,,)(11 1 11 =≤<--+--= ----- 可以证明,当分点足够细时,分段线性插值是收敛的。其缺点是不能形成一条光滑曲线。 例1、已知欧洲一个国家的地图,为了算出它的国土面积,对地图作了如下测量:以由西向东方向为x 轴,由南向北方向为y 轴,选择方便的原点,并将从最西边界点到最东边界点在x 轴上的区间适当的分为若干段,在每个分点的y 方向测出南边界点和北边界点的y 坐标y1和y2,这样就得到下表的数据(单位:mm )。

数学建模模型与应用

Mathematica软件常用功能 【实验目的】 1. 用Mathematica软件进行各种数学处理; 2. 用Mathematica软件进行作图; 3. 用Mathematica软件编写程序. 【注意事项】 Mathematica中大写小写是有区别的,如Name、name、NAME等是不同的变量名或函数名。 系统所提供的功能大部分以系统函数的形式给出,内部函数一般写全称,而且一定是以大写英文字母开头,如Sin[x],Conjugate[z]等。 乘法即可以用*,又可以用空格表示,如2 3=2*3=6 ,x y,2 Sin[x]等;乘幂可以用“^”表示,如x^0.5,Tan[x]^y。 自定义的变量可以取几乎任意的名称,长度不限,但不可以数字开头。当你赋予变量任何一个值,除非你明显地改变该值或使用Clear[变量名]或“变量名=.”取消该值为止,它将始终保持原值不变。 一定要注意四种括号的用法:()圆括号表示项的结合顺序,如 (x+(y^x+1/(2x)));[]方括号表示函数,如Log[x],BesselJ[x,1];{}大括号表示一个“表”(一组数字、任意表达式、函数等的集合),如 {2x,Sin[12 Pi],{1+A,y*x}};[[]]双方括号表示“表”或“表达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。 Mathematica的语句书写十分方便,一个语句可以分为多行写,同一行可以写多个语句(但要以分号间隔)。当语句以分号结束时,语句计算后不做输出(输出语句除外),否则将输出计算的结果。 命令行“Shift+Enter”才是执行这个命令。

数学建模中常见的十大模型讲课稿

数学建模中常见的十 大模型

精品文档 数学建模常用的十大算法==转 (2011-07-24 16:13:14) 转载▼ 1. 蒙特卡罗算法。该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法。 2. 数据拟合、参数估计、插值等数据处理算法。比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MA TLAB 作为工具。 3. 线性规划、整数规划、多元规划、二次规划等规划类算法。建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo 软件求解。 4. 图论算法。这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。 5. 动态规划、回溯搜索、分治算法、分支定界等计算机算法。这些算法是算法设计中比较常用的方法,竞赛中很多场合会用到。 6. 最优化理论的三大非经典算法:模拟退火算法、神经网络算法、遗传算法。这些问题是用来解决一些较困难的最优化问题的,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。 7. 网格算法和穷举法。两者都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。 8. 一些连续数据离散化方法。很多问题都是实际来的,数据可以是连续的,而计算机只能处理离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 9. 数值分析算法。如果在比赛中采用高级语言进行编程的话,那些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。 10. 图象处理算法。赛题中有一类问题与图形有关,即使问题与图形无关,论文中也会需要图片来说明问题,这些图形如何展示以及如何处理就是需要解决的问题,通常使用MATLAB 进行处理。 以下将结合历年的竞赛题,对这十类算法进行详细地说明。 以下将结合历年的竞赛题,对这十类算法进行详细地说明。 2 十类算法的详细说明 2.1 蒙特卡罗算法 大多数建模赛题中都离不开计算机仿真,随机性模拟是非常常见的算法之一。 举个例子就是97 年的A 题,每个零件都有自己的标定值,也都有自己的容差等级,而求解最优的组合方案将要面对着的是一个极其复杂的公式和108 种容差选取方案,根本不可能去求解析解,那如何去找到最优的方案呢?随机性模拟搜索最优方案就是其中的一种方法,在每个零件可行的区间中按照正态分布随机的选取一个标定值和选取一个容差值作为一种方案,然后通过蒙特卡罗算法仿真出大量的方案,从中选取一个最佳的。另一个例子就是去年的彩票第二问,要求设计一种更好的方案,首先方案的优劣取决于很多复杂的因素,同样不可能刻画出一个模型进行求解,只能靠随机仿真模拟。 2.2 数据拟合、参数估计、插值等算法 数据拟合在很多赛题中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98 年美国赛A 题,生物组织切片的三维插值处理,94 年A 题逢山开路,山体海拔高度的 收集于网络,如有侵权请联系管理员删除

数学建模方法详解--三十四种常用算法

数学建模方法详解--三十四种常用算法 目录 一、主成分分析法 (2) 二、因子分析法 (5) 三、聚类分析 (9) 四、最小二乘法与多项式拟合 (16) 五、回归分析(略) (22) 六、概率分布方法(略) (22) 七、插值与拟合(略) (22) 八、方差分析法 (23) 九、逼近理想点排序法 (28) 十、动态加权法 (29) 十一、灰色关联分析法 (31) 十二、灰色预测法 (33) 十三、模糊综合评价 (35) 十四、隶属函数的刻画(略) (37) 十五、时间序列分析法 (38) 十六、蒙特卡罗(MC)仿真模型 (42) 十七、BP神经网络方法 (44) 十八、数据包络分析法(DEA) (51) 十九、多因素方差分析法()基于SPSS) (54) 二十、拉格朗日插值 (70) 二十一、回归分析(略) (75) 二十二、概率分布方法(略) (75) 二十三、插值与拟合(略) (75) 二十四、隶属函数的刻画(参考《数学建模及其方法应用》) (75) 二十五、0-1整数规划模型(参看书籍) (75) 二十六、Board评价法(略) (75) 二十七、纳什均衡(参看书籍) (75) 二十八、微分方程方法与差分方程方法(参看书籍) (75) 二十九、莱斯利离散人口模型(参看数据) (75) 三十、一次指数平滑预测法(主要是软件的使用) (75) 三十一、二次曲线回归方程(主要是软件的使用) (75) 三十二、成本-效用分析(略) (75) 三十三、逐步回归法(主要是软件的使用) (75) 三十四、双因子方差分析(略) (75)

一、主成分分析法 一)、主成分分析法介绍: 主成分分析(principal components analysis,PCA)又称:主分量分析,主成分回归分析法。旨在利用降维的思想,把多指标转化为少数几个综合指标。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。 二)、主成分分析法的基本思想: 在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多影响因素。这些涉及的因素一般称为指标,在多元统计分析中也称为变量。因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。在用统计方法研究多变量问题时,变量太多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。主成分分析正是适应这一要求产生的,是解决这类题的理想工具。 同样,在科普效果评估的过程中也存在着这样的问题。科普效果是很难具体量化的。在实际评估工作中,我们常常会选用几个有代表性的综合指标,采用打分的方法来进行评估,故综合指标的选取是个重点和难点。如上所述,主成分分析法正是解决这一问题的理想工具。因为评估所涉及的众多变量之间既然有一定的相关性,就必然存在着起支配作用的因素。根据这一点,通过对原始变量相关矩阵内部结构的关系研究,找出影响科普效果某一要素的几个综合指标,使综合指标为原来变量的线性拟合。这样,综合指标不仅保留了原始变量的主要信息,且彼此间不相关,又比原始变量具有某些更优越的性质,就使我们在研究复杂的科普效果评估问题时,容易抓住主要矛盾。上述想法可进一步概述为:设某科普效果评估要素涉及个指标,这指标构成的维随机向量为。对作正交变换,令,其中为正交阵,的各分量是不相关的,使得的各分量在某个评估要素中的作用容易解释,这就使得我们有可能从主分量中选择主要成分,削除对这一要素影响微弱的部分,通过对主分量的重点分析,达到对原始变量进行分析的目的。的各分量是原始变量线性组合,不同的分量表示原始变量之间不同的影响关系。由于这些基本关系很可能与特定的作用过程相联系,主成分分析使我们能从错综复杂的科普评估要素的众多指标中,找出一些主要成分,以便有效地利用大量统计数据,进行科普效果评估分析,使我们在研究科普效果评估问题中,可能得到深层次的一些启发,把科普效果评估研究引向深入。 例如,在对科普产品开发和利用这一要素的评估中,涉及科普创作人数百万人、科普作品发行量百万人、科普产业化(科普示范基地数百万人)等多项指标。经过主成分分析计算,最后确定个或个主成分作为综合评价科普产品利用和开发的综合指标,变量数减少,并达到一定的可信度,就容易进行科普效果的评估。 三)、主成分分析法的数学模型: 其中:

数学建模——excel

§10.4 EXCEL在数学建模中的应用 10.4.1 简介 Microsoft Excel是目前应用最为广泛的办公室表格处理软件之一。它在数学统计中也有广泛应用。Excel具有强有力的数据库管理功能、丰富的宏命令和函数、强有力的决策支持工具,具有分析能力强、操作简便、图表能力强等特点。 10.4.2 Excel 中的统计工具简介 1.统计函数 Excel提供78个统计函数。在主菜单中的“插入”中选择“函数”,单击后就可以得到一组常用的统计函数,如均值AVERAGE、方差VAR、中位数 MEDIAN、秩RANK、最大值MAX、最小值MIN、计数COUNT,离散和连续分布的分布函数、概率函数、分位点等,如图10.所示。在选定函数的同时,在命令的下方会出现一条说明,表明命令的意义及每个参数的含义。 图10. 例如正态分布分布函数 NORMDIST,返回给定均值和标准差的正态分布分布函数或正态分布概率密度函数。 语法:NORMDIST(x, mean, standard_dev , cumulative) 说明: x 为需要计算其分布的数值,Mean 为分布的均值,Standard_dev 为分布的标准差,Cumulative 为一逻辑值,指明函数的形式。如果 cumulative 为 TRUE,函数 NORMDIST 返回分布函数;如果为 FALSE,返回概率密度函数。 (1)如果 mean 或 stand_dev 为非数值型,函数 NORMDIST 返回错误值 #VALUE!。(2)如果 standard_dev < 0,函数 NORMDIST 返回错误值 #NUM!。 (3)如果 mean= 0 且 standard_dev = 1,函数 NORMDIST 返回标准正态分布,即函数NORMSDIST。

参加2019数学建模算法良心总结

第一讲国赛历年赛题总览 一、历年国赛赛题(时间) 1992年,国赛第一年,30+高校 (A)作物生长的施肥效果问题(北理工:叶其孝) 统计、非线性回归的方法 (B)化学试验室的实验数据分解问题(复旦:谭永基) 无明确方法,解应用题 1993年,国赛第二年 (A)通讯中非线性交互的频率设计问题(北大:谢衷洁)非线性回归 (B)足球甲级联赛排名问题(清华:蔡大用) 评价与决策。如:评价老师,评价学校,评价食堂,评价篮球教练 1994年,国赛第三年 (A)山区修建公路的设计造价问题(西电大:何大可) 价格问题,优化问题 (B)锁具的制造、销售和装箱问题(复旦:谭永基等) 优化问题,同时带一部分统计问题

1995年,国赛第四年 (A)飞机的安全飞行调度问题(复旦:谭永基等) 优化问题 (B)天车与冶炼炉的作业调度问题(浙大:刘祥官等)优化问题 1996年,国赛第五年 (A)最优捕鱼策略问题(北师大:刘来福) 微分方程的问题 (B)节水洗衣机的程序设计问题(重大:付鹂) 偏微分方程,也可以用优化 1997年,国赛第六年 (A)零件参数优化设计问题(清华:姜启源) 优化问题 (B)金刚石截断切割问题(复旦:谭永基等) 优化问题 1998年,国赛第七年 (A)投资的收益和风险问题(浙大:陈述平) 多目标优化问题 (B)灾情的巡视路线问题(上海海运学院:丁松康)

网络优化问题、图论 1999年,国赛第八年(开始出现专科组) (A)自动化车床控制管理问题(北大:孙山泽) 优化问题 (B)地质勘探钻井布局问题(郑州大学:林诒勋)优化问题 (C)煤矸石堆积问题(太原理工大学:贾晓峰) 排列的问题 2000年,国赛第九年 (A)DNA序列的分类问题(北京工业大学:孟大志)分类问题 (B)钢管的订购和运输问题(武汉大学:费甫生)优化问题 (C)飞越北极问题(复旦大学:谭永基) 椭球面计算问题,几何问题 (D)空洞探测问题(东北电力学院:关信) 偏统计问题 2001年,国赛第十年 (A)三维血管重建问题(浙江大学:汪国昭)

数学建模算法

数学建模的十大算法 1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法) 2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的)9、数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10、图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处理)

国内中学数学建模及其教学的研究现状

国内中学数学建模及其教学的研究现状 一、国内中学数学建模的研究现状 随着时代的进步和科技的发展,人们越来越觉得数学素质是一个人的基本素质的重要方面之一,而掌握和运用数学模型方法是衡量一个人数学素质高低的一个重要标志。受西方国家的影响,20世纪80年代初,数学建模课程引入到我国的一些高校,短短几十年来发展非常迅速,影响很大。1989年,我国高校有4个队首次参加美国大学生数学建模竞赛。现在这项竞赛已经成为一个世界性的竞赛。在美国大学生数学建模竞赛的影响下,1992年11月底,中国工业与应用数学学会举行了我国首届大学生数学建模联赛。从那以后,数学应用、数学建模方法、数学建模教学的热潮也迅速波及到中学,使得我国有关中学数学杂志中,讨论数学应用数学建模方法、数学建模教学的文章明显多了起来。1996年9月北京市数学会组织了一部分中学生参加了“全国大学生数学建模大赛”,取得了意想不到的好成绩,赢得了评审人员、教师等有关人士的一致好评。这些竞赛与常规的数学竞赛很不一样,题目内容与生产和生活实际紧密相连,可以使用参考书和计算工具,都是要通过建立数学模型来解决实际应用问题。这也说明中学生能否进行数学建模并不在于是否具备高等数学知识,运用初等数学知识仍然可以进行数学建模,甚至有时能把问题解决得更好。 在我国,中学真正开展数学建模的时间并不长。最早进行中学数学建模的城市是上海市。1991年10月,由上海市科技局、上海工业与应用数学学会、上海金桥出口加工联合有限公司联合举办了“上海市首届…金桥杯?中学生数学知识应用竞赛”的初赛,并于1992年3月举行了决赛。以后每年进行一次,主要对象是高中学生。这项竞赛参加者最多时达到了四千多人,在培养中学生数学应用意识和数学建模能力方面起到了重要作用,也为我国其他地区举办中学生数学应用与建模竞赛起了一个带头作用。 北京市于1993年到1994年也成功举办了“北京市首届…方正杯?中学生数学知识应用竞赛”,有两千多人参加了竞赛。与此同时,举办者开始尝试让中学生写数学建模的小论文,学生所写的小论文让举办者和教师大为吃惊。到1997年北京市教委从中学数学教育改革,特别是从应试教育向素质教育转变的角度出发,批准恢复了一年一度面向高中学生的竞赛。北京市成立了由北京市数学会、北京市教委科教院、人民教育出版社、北京师范大学、首都师范大学联合组织的“高中数学应用知识竞赛”咨询委员会和组织委员会,由北京数学会作为具体承办单位,并于1997年12月举办了“第一届北京市高中数学知识应用竞赛”初赛,并于1998年3月进行了决赛,至今成为惯例,已成功举办了十一届。 2000年8月,第七届全国数学建模教学与应用会议在郑州召开。会议安排了有关中学数学应用和建模的报告。比如,北京理工大学的叶其孝教授和北京师范大学的刘来福教授分别作了题为“深入开展中学生数学知识应用活动”和“北京中学生数学知识应用竞赛”的报告。特别值得提出的是,在这次会议上,第一次有中学教师参加。 2001年7月29日至8月2日,第十届国际数学建模教学与应用会议在北京举行。会议的研讨包括“中学数学知识应用竞赛和中学数学教育改革”的报告和研讨会。部分中国与会者还就“大、中学数学建模教学活动和教育改革”,“美、中大学生数学建模竞赛赛题解析”进行了交流。我国的一些中学教师在会上作了有关中学数学建模的报告,引起了与会者的强烈反响。所有这些都为进一步推动我国的数学建模教学活动创造了良好的条件。 教育部2003年颁布的《普通高中数学课程标准(实验稿)》把数学建模纳入了内容标准中,明确指出“高中阶段至少应为学生安排一次数学建模活动”,这标志着数学建模正式进入我国高中数学,也是我国中学数学应用与建模发展的一个里程碑。 二、国内中学数学建模教学的特点

相关主题
文本预览
相关文档 最新文档