文档视界 最新最全的文档下载
当前位置:文档视界 › 数学建模图论模型图论

数学建模图论模型图论

数学建模图论模型图论
数学建模图论模型图论

§1 最小生成树

1.1 生成树的概念

设图G=(V,E)是一个连通图,当从图中任一顶点出发遍历图G时,将边集E(G)分成两个集合A(G)和B(G)。其中A(G)是遍历图时所经过的边的集合,B(G)是遍历图时未经过的边的集合。显然,G1=(V,A)是图G的子图,则称子图G1是连通图G的生成树。图的生成树不是惟一的。如对图1(a),当按深度和广度优先搜索法进行遍历就可以得到图1中(b)和(c)的两棵不同的生成树,并分别称之为深度优先生成树和广度优先生成树。

对于有n个顶点的连通图,至少有n-1条边,而生成树中恰好有n-1条边,所以连通图的生成树是该图的极小连通子图。若图G的生成树中任意加一条边属于边集B(G)中的边,则必然形成回路。

求解生成树在许多领域有实际意义。例如,对于供电线路或煤气管道的铺设问题,即假设要把n个城市联成一个供电或煤气管道网络,则需要铺设n-1条线路。任意两城市间可铺设一条线路,n个城市间最多可能铺设n(n-1)/2条线路,各条线路的造价一般是不同的。一个很实际的问题就是如何在这些可能的线路中选择n-1条使该网络的建造费用最少,这就是下面要讨论的最小生成树问题。

1.2 网的最小生成树

在前面我们已经给出图的生成树的概念。这里来讨论生成树的应用。

假设,要在n个居民点之间敷设煤气管道。由于,在每一个居民点与其余n-1个居民点之间都可能敷设煤气管道。因此,在n个居民点之间,最多可能敷设n(n-1)/2条煤气管道。然而,连通n个居民点之间的管道网络,最少需要n-1条管道。也就是说,只需要n-1条管道线路就可以把n个居民点间的煤气管道连通。另外,还需进一步考虑敷设每一条管道要付出的经济代价。这就提出了一个优选问题。即如何在n(n-1)/2条可能的线路中优选n-1条线路,构成一个煤气管道网络,从而既能连通n个居民点,又能使总的花费代价最小。

解决上述问题的数学模型就是求图中网的最小生成树问题。把居民点看作图的顶点,把居民点之间的煤气管道看作边,而把敷设各条线路的代价当作权赋给相应的边。这样,便构成一个带权的图,即网。对于一个有n个顶点的网可以生成许多互不相同的生成树,每一棵生成树都是一个可行的敷设方案。现在的问题是应寻求一棵所有边的权总和为最小的生成树。

如何构造这种网的最小生成树呢?下面给出这样一种解法:

(1)已知一个网,将网中的边按其权值由小到大的次序顺序选取。

(2)若选某边后不形成回路,则将其保留作为树的一条边;若选某边后形成回路,则将其舍弃,以后也不再考虑。

(3)如此依次进行,直到选够(n-1)条边即得到最小生成树。

现以图2为例说明此算法。设此图是用边集数组EV表示的,且数组中各边是按权值由小到大的次序排

(2,4)时均无问题,保留作为树的边;到第3条边(4,3)时将与已保留的边形成回路,将其舍去;同样继续做:保留(2,6);舍去(6,4);保留(5,7),(1,5),(1,6),此时,保留的边数已够(n-1)=6条边,此时必定将7个顶点全部互相连通了,后面剩下的边(1,2),(5,6)就不必再考虑了。最后得到的最小生成树如图2a中深色边所示,其各边权值总和等于80。由离散数学中的图论可以证明,这就是最小生成树了,其权值最小。当图中有权值相等的边时,其最小生成树可能有不同的选取方案。

实现此算法的关键是,在选取某条边时应判断是否与已保留的边形成回路。

这可用将各顶点划分为集合的办法解决:假设数组tag(1..en)作为顶点集合划分的标志初值为0。在算法的执行过程中,当所选顶点u,v是连通的,则将相应位置的tag[u],tag[v]置以相同的数字,而不连通的点在初期分属不同的集合,置不同的数字;一旦两个不同的连通分支连通了,则修改tag的值,将新的连通分支改为相同的数字。我们以图2为例。首先选(2,3)(2,4)边,由于是连通的,并且不出现回路。tag[2]:=1,tag[3]:=tag[4]:=1是同一个集合A;选(6,2)边与A集合连通;tag[6]:=1;再选(5,7)与集合A 不连通,tag[5]:=tag[7]:=2构成另一集合B;选(1,5)边与集合B连通,tag [1]:=2;此时,集合A={2,3,4,6};集合B={5,7,1};当选(1,6)边时,(1,6)与集合A、集合B都连通,并且两个顶点分别属于两个不同的集合A、B,这使得集合A与集合B通过边(1,6)连通。修改集合B中tag的值,置为1,即将集合B并入集合A。边为n-1条,这就是一棵最小生成树。

根据集合标志数组tag的变化过程,很容易判断,选择一条新的边是否构成回路。当新选边的两个顶点u、v,若tag[u]和tag[v]相同并且均不等于0时,即u,v已在生成树集合中被保留过,加入u,v后即形成回路,不能选。而当tag [u]<>tag[v]或者tag[u]=tag[v]=0时,可以选并且不形成回路,说明u,v 中至少有一个顶点未被选过或者被选过的u、v分别属于两个不同的集合,此时选择u,v可以将含u的集合与含v的集合连通,修改tag数组。如此下去,到所有顶点均已属于一个集合时,此最小生成树就完全构成了。

网的最小生成树算法描述如下:

假设算法中用到的数据结构是经过处理的。

COST(1..n,1..n)是带权数组存放网中顶点之间的权。EV(1..n*(n-1/2))按权从小到大存放排序后的顶点对,即EV[K].P1存放一个顶点,边的另一顶点存放在EV[K].P2之中。

tag(1..n):顶点集合划分标志的数组。

Enumb:当前生成树的边数。

SM:当前权累计和。

PROC minspanningtree(VAR cost;VAR ev);

Var tag;

BEGIN

CALL INITIAL(tag);

Enumb:=0;SM:=0; {诸参量初始化}

k:=1; {边数累计}

WHILE (Enumb<=n-1) AND (k<=n) DO

Begin U:=EV[k].P1;V:=EV[k].P2;{选一对顶点(U,V)}

CALL FIND(U,T);{找到含顶点U的集合T}

CALL FIND(V,W);{找到含顶点V的集合W}

IF (T<>W) THEN

Begin

write(u,v);Enumb:=Enumb+1;{最小生成树增加一条边}

SM:=SM+COST[u,v];

MERGE(T,W);{选u,v不会形成环,合并T,W集合,并修改tag}

end

K:=K+1; {找下一条边}

end

IF Enumb

ELSE write(SM)

END;

由算法可知图2的最小生成树的结果是(2,3),(2,4),(2,6),(5,7),(1,5),(1,6)。

§2 最短路径

在一个赋权有向图上寻找最短路径问题也是图应用的一个重要课题。

假定图3中的有向图G=(V,E)是一个航空图,V的每一顶点表示—个城市,正中的每条弧v—>w表示从城市v到城市W的航线,弧V—>w上的标号代表从V城飞到w城所需要的时间。要寻找由该航空图上一给定城市到另一城市所需要的最短飞行时间。可以用求解这个有向图的单源最短路径算法来完成。

下面,我们讨论求解单源最短路径问题的贪心算法,也称Dijkstra算法。

设有向图G=(V,E),其中,V={1,2,…,n).cost是表示G的邻接矩阵,cost[i,j]表示有向边(i,j)的权。若不存在有向边(i,j),则cost[i,j]的权为无限大(oo)。令S是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已经求出。

(1)令顶点V0为源点,集合S的初态只包含顶点V0,即S={V0}。数组dist记录从源点到其他各顶点当前的最短距离,其初值为dist[i]:=cost[v0,i],(i=2,…,n)。

(2)从S之外的顶点集合V-S中选出一个顶点W,使dist[W]的值最小。于是,从源点到达W只通过S 中的顶点,我们把W加入集合S。

(3)调整dist中记录的从源点到V-S中每个顶点V的距离:从原来的dist[v]和dist[w]+cost[w,v]中选择较小的值作为新的dist[v]。

(4)重复上述过程(2)和(3),直到S中包含V的全部顶点。

最终数组dist记录了从源点到V中其余各顶点的最短路径。

对图3所示的加权有向图应用Dijkstra算法,从源点V2出发到达各顶点的最短路径如下表所示。

最短路径

---------------------------------------

源点中间顶点终止顶点长度

2 5 10

3 15

3 4 30

3 1 35

6 oo

--------------------------------------

对图3的执行过程:初始时,S={2},dist[1]=oo,dist[3]=15,dist[4]=oo,dist[5]=10,dist[6]=oo,第一遍处理时,W=2使dist[5]最小、于是把5加入S。然后,调整dist中从源点到其余各顶点的距离:dist[3]=15,为次小,将3加入S。dist[4]=cost[2,3]+cost[3,4]=15+15=30,经中间点3。S={2,5,3,4},同理,dist[1]=cost[2,3]+cost[3,1]=35,S={2,5,3,4,1},由于2没有一条到6的路径,所以dist[6]=oo。

由此我们给出最短路径算法如下

PROC shortpath(VAR cost;VAR dist;VAR path;VAR S,V0);

BEGIN

FOR W:=1 TO n DO

Begin dist[W]:=cost[V0,W];{最短路径初始化值}

IF cost[V0,W]

THEN path[W]:=V0;{path记载当前最短路径}

End;

S:=[V0];Vnum:=1;{到达点集合S和到达点S个数初值}

WHILE (Vnum

Begin Wm:=max;u:=V0;

FOR W:=1 TO n DO

IF(NOT W IN S) AND (dist[W]

THEN Begin U:=W;Wm:=dist[w] End;

{找最小dist[w]}

S:=S+[U];Vnum:=Vnum+1; {U为找到最短路径的终点}

FOR W:=1 TO n DO

IF (NOT W IN S) AND (dist[U]+cost[U,W]

THEN Begin dist[W]:=dist[U]+cost[U,W]; {调整非S集各点最短路径值}

path[W]:=U;{调整非S集各点最短路径}

End;

Vnum:=Vnum+1

End;

END;

PROC PRINTPATH(VAR dist VAR path;VAR S;V0)

BEGIN

FOR i:=1 TO n DO

IF(i IN S)

THEN Begin k:=i;

WHILE (k<>V0) DO

Begin write(k);k:=path[k] End; {通过找前趋点,反向输出最短路径}

write(k);writeln(dist[i])

End;

ELSE Begin write(i,V0);writeln('max') End;

END;

容易看出,算法short path的时间复杂度为O(n2),空间复杂度为O(n)。

§3 拓扑排序

本节说明了如何用深度优先搜索,对一个有向无回路图进行拓扑排序。有向无回路图又称为dag。对这种有向无回路图的拓扑排序的结果为该图所有顶点的一个线性序列,满足如果G包含(u,v),则在序列中u出现在v之前(如果图是有回路的就不可能存在这样的线性序列)。一个图的拓扑排序可以看成是图的所有顶点沿水平线排成的一个序列,使得所有的有向边均从左指向右。因此,拓扑排序不同于通常意义上对于线性表的排序。

有向无回路图经常用于说明事件发生的先后次序,图1给出一个实例说明早晨穿衣的过程。必须先穿某一衣物才能再穿其他衣物(如先穿袜子后穿鞋),也有一些衣物可以按任意次序穿戴(如袜子和短裤)。图1(a)所示的图中的有向边(u,v)表明衣服u必须先于衣服v穿戴。因此该图的拓扑排序给出了一个穿衣的顺序。每个顶点旁标的是发现时刻与完成时刻。图1(b)说明对该图进行拓扑排序后将沿水平线方向形成一个顶点序列,使得图中所有有向边均从左指向右。

下列简单算法可以对一个有向无回路图进行拓扑排序。

procedure Topological_Sort(G);

begin

1.调用DFS(G)计算每个顶点的完成时间f[v];

2.当每个顶点完成后,把它插入链表前端;

3.返回由顶点组成的链表;

end;

图1(b)说明经拓扑排序的结点以与其完成时刻相反的顺序出现。因为深度优先搜索的运行时间为θ(V+E),每一个v中结点插入链表需占用的时间为θ(1),因此进行拓扑排序的运行时间θ(V+E)。

图1 早晨穿衣的过程

为了证明算法的正确性,我们运用了下面有关有向无回路图的重要引理。

引理1

有向图G无回路当且仅当对G进行深度优先搜索没有得到反向边。

证明:

→:假设有一条反向边(u,v),那么在深度优先森林中结点v必为结点u的祖先,因此G中从v到u必存在一通路,这一通路和边(u,v)构成一个回路。

←:假设G中包含一回路C,我们证明对G的深度优先搜索将产生一条反向边。设v是回路C中第一个被发现的结点且边(u,v)是C中的优先边,在时刻d[v]从v到u存在一条由白色结点组成的通路,根据白色路径定理可知在深度优先森林中结点u必是结点v的后裔,因而(u,v)是一条反向边。(证毕)

定理1

Topological_Sort(G)算法可产生有向无回路图G的拓扑排序。

证明:

假设对一已知有问无回路图G=(V,E)运行过程DFS以确定其结点的完成时刻。那么只要证明对任一对不同结点u,v∈V,若G中存在一条从u到v的有向边,则f[v]

另一种拓扑排序的算法基于以下思想:首先选择一个无前驱的顶点(即入度为0的顶点,图中至少应有一个这样的顶点,否则肯定存在回路),然后从图中移去该顶点以及由他发出的所有有向边,如果图中还存在无前驱的顶点,则重复上述操作,直到操作无法进行。如果图不为空,说明图中存在回路,无法进行拓扑排序;否则移出的顶点的顺序就是对该图的一个拓扑排序。

下面是该算法的具体实现:

procedure Topological_Sort_II(G);

begin

1 for 每个顶点u∈V[G] do d[u]←0; //初始化d[u],d[u]用来记录顶点u的入度

2 for 每个顶点u∈V[G] do

3 for 每个顶点v∈Adj[u] do d[v]←d[v]+1; //统计每个顶点的入度

4 CreateStack(s); //建立一个堆栈s

5 for 每个顶点u∈V[G] do

6 if d[u]=0 then push(u,s); //将度为0的顶点压入堆栈

7 count←0;

8 while (not Empty(s)) do

begin

9 u←top(s); //取出栈顶元素

10 pop(s); //弹出一个栈顶元素

11 count←count+1;

12 R[count]←u; //线性表R用来记录拓扑排序的结果

13 for 每个顶点v∈Adj[u] do //对于每个和u相邻的节点v

begin

14 d[v]←d[v]-1;

15 if d[v]=0 then push(v,s); //如果出现入度为0的顶点将其压入栈

end;

end;

16 if count<>G.size then writeln('Error! The graph has cycle.')

17 else 按次序输出R;

end;

上面的算法中利用d[u]来记录顶点u的入度,第2-3行用来统计所有顶点的入度,第5-6行将入度为0的顶点压入堆栈,第8-15行不断地从栈顶取出顶点,将该顶点输出到拓扑序列中,并将所有与该顶点相邻的顶点的入度减1,如果某个顶点的入度减至0,则压入堆栈,重复该过程直到堆栈空了为止。显而易见该算法的复杂度为O(VE),因为第2-3行的复杂性就是O(VE),后面8-15行的复杂性也是O(VE)。这个算法虽然简单,但是没有前面一个算法的效率高。

§4 网络流算法:概念

在实际生活中有许多流量问题,例如在交通运输网络中的人流、车流、货物流,供水网络中的水流,金融系统中的现金流,通讯系统中的信息流,等等。50年代以福特(Ford)、富克逊(Fulkerson)为代表建立的“网络流理论”,是网络应用的重要组成部分。在最近的奥林匹克信息学竞赛中,利用网络流算法高效地解决

问题已不是什么稀罕的事了。本节着重介绍最大流(包括最小费用)算法,并通过实际例子,讨论如何在问题的原型上建立—个网络流模型,然后用最大流算法高效地解决问题。

[问题描述]如图4-1所示是联结某产品地v1和销售地v4的交通网,每一弧(vi,vj)代表从vi到vj的运输线,产品经这条弧由vi输送到vj,弧旁的数表示这条运输线的最大通过能力。产品经过交通网从v1到v4。现在要求制定一个运输方案使从v1到v4的产品数量最多。

图4 - 1 图4 - 2

一、基本概念及相关定理

1)网络与网络流

定义1给一个有向图N=(V,E),在V中指定一点,称为源点(记为vs,和另一点,称为汇点(记为vt),其余的点叫中间点,

对于E中每条弧(vi,vj)都对应一个正整数c(vi,vj)≥O(或简写成cij),称为f的容量,则赋权有向图N=(V,E,c,vs,vt)称为一个网络。如图4-1所给出的一个赋权有向图N就是一个网络,指定v1是源点,v4为汇点,弧旁的数字为cij。

所谓网络上的流,是指定义在弧集合E上一个函数f={f(vi,vj)},并称f(vi,vj)为弧(vi,vj)上的流量(下面简记为fij)。如图4-2所示的网络N,弧上两个数,第一个数表示容量cij,第二个数表示流量fij。

2)可行流与最大流

在运输网络的实际问题中,我们可以看出,对于流有两个显然的要求:一是每个弧上的流量不能超过该弧的最大通过能力(即弧的容量);二是中间点的流量为0,源点的净流出量和汇点的净流入量必相等且为这个方案的总输送量。因此有:

定义2满足下列条件

(1)容量约束:0≤f ij≤c ij,(v i,v j)∈E,

(2)守恒条件

对于中间点:流入量=流出量;对于源点与汇点:源点的净流出量v s(f)=汇点的净流入量(-v t(f))

的流f,称为网络N上的可行流,并将源点s的净流量称为流f的流值v(f)。

网络N中流值最大的流f*称为N的最大流。

3)可增广路径

所谓可增广路径,是指这条路径上的流可以修改,通过修改,使得整个网络的流值增大。

定义3设f是一个可行流,P是从源点s到汇点t的一条路,若p满足下列条件:

(1)在p上的所有前向弧(vi→vj)都是非饱和弧,即0≤f ij

(2)在p上的所有后向弧(vi←vj)都是非零弧,即0

则称p为(关于可行流f的)一条可增广路径。

(4)割及其容量

定义4如果A是V的一个子集,A-=V-A,s∈A,t∈A-,则称边集(A,A-)为网络N的一个割,显然,若把某一割的弧从网络中丢去,则从vs到vt就不存在路。所以直观上讲,割是从vi到vj的必经之道。

定义5给一割(A,A-),把其中所有弧的容量之和称为这个割的容量,记为c(A,A-),即c(A,A-)=∑c(e)

网络N中容量最小的割(A*,A*-)称为N的最小割。

不难证明,任何一个可行流的流量v(f)都不会超过任一割的容量,即

v(f)≤c(A,A-)

例如,图4-2中,若A={s},(A,A-)={(s,v3),(s,v2)},c(A,A-)=4+3=7。

(5)有关定理

定理1当且仅当不存在关于f*的增广路径,可行流f*为最大流。

证明必要性:若f*是最大流,设N中存在关于f*的增广路径p,令:

Q=min{min(c ij-f ij),minf*ij}

由增广路径定义可知,Q>0,再令:

f**ij = f*ij+Q (vi,vj)∈P的前向弧的集合

f**ij = f*ij-Q (vi,vj)∈P的后向弧的集合

f**ij = f*ij(vi,vj)不属于P的集合

不难证明{f**ij}是—可行流,且v(f**)=v(f*)+Q>v(f*)。这与f*是最大流假设矛盾,必要性证毕。

证明充分性:设N中不存在关于f*的增广路径,证明f*是最大流。我们利用下面的方法来定义A*。

令v s∈A*

若v i∈A*,且f ij

若v i∈A*,且f ji>0,则令v j∈A*。

因为不存在关于f*的增广路径,故v t不属于A*。

记A*-=V-A*,于是得到一个割(A*,A*-),显然有

f*ij=c ij,(vi,vj)∈(A*,A*-)

f*ij=0,(vi,vj)∈(A*-,A*)

所以v(f*)=c(A*,A*-)。于是f*必是最大流,定理得证。

由上述证明中可得,若f*是最大流,则网络中必存在一个割集c(A*,A*-),使得v(f*)=c(A*,A*-)。

于是有以下重要定理。

定理2最大流最小割定理:在一个网络N中,从vs到vt最大流的容量等于分离vs,vt的最小割的容量。

二.最大网络流

最大流问题实际上是求一可行流{fij},使得v(f达到最大。定理1中证明实际上已为我们提供了寻求网络中最大流的一个方法。若给了一个可行流f,只要判断N中有无关于f的增广路径,如果有增广路径,则按定理1的必要性证明中的办法,改进f,得到一个沈量增大的新的可行流;如果没有增广路径,则得

到最大流。而利用定理1充分性证明中定义A*的办法,可以根据vt是否属于A*来判断N中有无关于f 的增广路径。

下面我们用顶点标号法来定义A*,在标号过程中,有标号的顶点表示是A*中的点,没有标号的点表示不是A*中的点。如果vt有标号,则说明找到了一条增广路径;如果标号过程进行不下去,而vt又还没有标号,则说明不存在增广路径,于是得到了最大流,同时也得到了一个最小割集。

1)寻求最大流的标号法(Ford,Fulkerson)

从一个可行流(一般取零流)开始,不断进行以下的标号过程与调整过程,直到找不到关于f的可增广路径为止。

(1)标号过程

在这个过程中,网络中的点分为已标号点和未标号点,已标号点又分为已检查和未检查两种。每个标号点的标号信息表示两个部分:第一标号表明它的标号从哪一点得到的,以便从vt开始反向追踪找出也增广路径;第二标号是为了表示该顶点是否已检查过。

标号开始时,给vs标上(s,0),这时vs是标号但末检查的点,其余都是未标号的点,记为(0,0)。

取一个标号而未检查的点vi,对于一切未标号的点vj:

A.对于弧(vi,vj),若fij

B.对于弧(vi,vj),若fji>0,则给vj标号(-vi,0),这时,vj点成为标号而未检查的点。

于是vi成为标号且已检查的点,将它的第二个标号记为1。重复上述步骤,一旦vt被标上号,表明得到一条从vi到vt的增广路径p,转入调整过程。

若所有标号都已检查过去,而标号过程进行不下去时,则算法结束,这时的可行流就是最大流。

(2)调整过程

从vt点开始,通过每个点的第一个标号,反向追踪,可找出增广路径P。例如设vt的第一标号为vk(或-vk),则弧(vk,vt)(或相应地(vt,vk))是p上弧。接下来检查vk的第一标号,若为vi(或-vi),则找到(vi,vk)(或相应地(vk,vi))。再检查vi的第一标号,依此类推,直到vs为止。这时整个增广路径就找到了。在上述找增广路径的同时计算Q:

Q=min{min(c ij-f ij),minf*ij}

对流f进行如下的修改:

f'ij = f ij+Q (vi,vj)∈P的前向弧的集合

f'ij = f ij-Q (vi,vj)∈P的后向弧的集合

f'ij = f*ij(vi,vj)不属于P的集合

接着,清除所有标号,对新的可行流f’,重新进入标号过程。

2)求最大流标号法的具体实现

(1)数据结构

对于网络N,它首先是一个有向图N(V,E),对于有向图一般我们用邻接矩阵表示,为了存放流f,这个有向图的弧上信息包含两个部分,分别是弧的容量与弧上的流。具体的数据结构如下:type

nettype=record

c,f:integer;

end;

var

g:array[O..maxn,O..maxn] of nettype;

为了找到增广路径,我们要有对每个的顶点标号,第一个标号L表明它的标号从哪一点得到的,第二标号p是为了表示该顶

点是否已检查过。具体数据结构如下:

type

nodetype=record

l,p:integer;

end;

var

Lt:array[O..maxn] of nodetype;

(2)参考程序

Program Max_Stream;

Const Maxn=20;

type

nettype=record

C,F:integer;

end;

nodetype=record

L,P:integer;

end;

var

Lt:array[O..maxn] of nodetype;

G:Array[0..Maxn,0..Maxn] of Nettype;

N,S,T:integer;

F:Text;

Procedure Init;{初始化过程,读人有向图,并设置流为0} Var Fn :String;

I,J :Integer;

Begin

Write( 'Graph File = ' ); Readln(Fn);

Assign(F,Fn);

Reset(F);

Readln(F,N);

Fillchar(G,Sizeof(G) ,0);

Fillchar(Lt,Sizeof(Lt),O);

For I:=1 To N Do

For J:=1 To N Do Read(F,G[I,J].C);

Close(F);

End;

Function Find: Integer; {寻找已经标号未检查的顶点}

Var I: Integer;

Begin

I:=1;

While (I<=N) And Not((Lt[I].L<>0)And(Lt[I].P=0)) Do Inc(I);

If I>N Thru Find:= 0 Else Find:= I;

End;

Function Ford(Var A: Integer):Boolean;

Var {用标号法找增广路径,并求修改量A}

I,J,M,X:Integer;

Begin

Ford:=True;

Fillchar(Lt,Sizeof(Lt),0);

Lt[S].L:=S;

Repeat

I:= Find;

If i=0 Then Exit;

For J:=1 To N Do

If (Lt[J].L= 0)And((G[I,J].C<>0)or(G[J,I].C<>0)) Then Begin

if (G[I,J].F

If (G[J,I].F>0) Then Lt[J].L:= I;

End;

Lt[I].P:=1;

Until (Lt[T].L<>0);

M:=T;A:=Maxint;

Repeat

J:=M;M:=Abs(Lt[J].L);

If Lt[J].L<0 Then X:= G[J,M].F;

If Lt[J].L>0 Then X:= G[M,J].C- G[M,J].F;

If X

Until M= S;

Ford:=False;

End;

Procedure Change(A: Integer);{调整过程}

Var M, J: Integer;

Begin

M:= T;

Repeat

J:=M;M:=Abs(Lt[J].L);

If Lt[J].L<0 Then G[J,M].F:=G[J,M].F-A;

If Lt[J].L>0 Then G[M,J].F:=G[M,j].F+A;

Until M=S;

End;

Procedure Print; {打印最大流及其方案}

VAR

I ,J: Integer;

Max: integer;

Begin

Max:=0;

For I:=1 To N DO

Begin

If G[I,T].F<>0 Then Max:= Max + G[I,T].F;

For J:= 1 To N Do

If G[I,J].F<>0 Then Writeln( I, '-> ' ,J,' ' ,G[I,J].F);

End;

Writln(’TheMaxStream‘’,Max);

End;

Procedure Process;{求最大流的主过程}

Var Del:Integer;

Success:Boolean;

Begin

S:=1;T:=N;

Repeat

Success:=Ford(Del);

If Success Then Print

Else Change(Del);

Until Success;

End;

Begin {Main Program}

Init;

Process;

End. {源程序及数据文件}

以上标号法求最大流的算法,只能适用于网络中的任意两点之间只有一条弧的情况,若任意两点之间有多条弧,则我们可以通过在这些弧中的每条弧上设置一个虚拟点,转化成任意两点间只有一条弧情况。

三.最小费用最大流

上面的网络,可看作为辅送一般货物的运输网络,此时,最大流问题仅表明运输网络运输货物的能力,但没有考虑运送货物的

费用。在实际问题中,运送同样数量货物的运输方案可能有多个,因此从中找一个输出费用最小的的方案是一个很重要的问题,这就是最小代价流所要讨论的内容。

1)最小费用最大流问题的模型

给定网络N=(V,E,c,w,s,t),每一弧(vi,vj)属于E上,除了已给容量c ij外,还给了一个单位流量的费用w(vi,vj)≥O(简记为w ij)。所谓最小费用最大流问题就是要求一个最大流f,使得流的总输送费用取最小值。

W(f)=∑w ij f ij

2)用对偶法解最小费用最大流问题

最小费用流问题的常用算法有两种:原始算法与对偶算法,下面只介绍对偶算法。

定义:已知网络N=(V,E,c,w,s,t),f是N上的一个可行流,p为vs到vt(关于流f)的可增广路径,称W(p)=∑w ij(p+)-∑w ij(p-)为路径p的费用。

若p*是从vs到vt所有可增广路径中费用最小的路径,则称p*为最小费用可增广路径。

定理:若f是流量为v(f)的最小费用流,p是关于f的从vs到vt的一条最小费用可增广路径,则f经过p调整流量Q得到新的可行流f’(记为f’=f+Q),一定是流量为v(f)+Q的可行流中的最小费用流。(证明参见有关运筹学资料)由于w ij≥0,f={0}就是流量为0的最小费用流(费用也为0),所以初始最小费用流可以取f={0}。

(1)对偶法的基本思路

①取f={0}

②寻找从vs到vt的一条最小费用可增广路径p。

若不存在p,则f为N中的最小费用最大流,算法结束。

若存在p,则用求最大流的方法将f调整成f*,使v(f*)=v(f)+Q,并将f*赋值给f,转②。

(2)迭代法求最小费用可增广路径

在前一节中,我们已经知道了最大流的求法。在最小费用最大流的求解中,每次要找一条最小费用的增广路径,这也是与最大流求法唯一不同之处。于是,对于求最小费用最大流问题余下的问题是怎样寻求关于f的最小费用增广路径p。为此,我们构造一个赋权有向图b(f),它的顶点是原网络N中的顶点,而把N中每一条弧(vi,vj)变成两个相反方向的弧(vi,vj)和(vj,vi)。定义w(f)中的弧的权如下:如果(f ij

如果(f ij>0),则b ji=-w ij;如果(f ij=c ij),则b ji=+oo

于是在网络N中找关于f的最小费用增广路径就等价于在赋权有向图b(f)中,寻求从vs到vt的最短路径。求最短路有三

种经典算法,它们分别是Dijkstra算法、Floyd算法和迭代算法。由于在本问题中,赋权有向图b(f)中存在负权,故我们只能用后两种方法求最短路,其中对于本问题最高效的算法是迭代算法。

为了程序的实现方便,我们只要对原网络做适当的调整。将原网络中的每条弧(vi,vj)变成两条相反的弧:前向弧(vi,vj),其容量c ij和费用w ij不变,流量为f ij;

后向弧(vj,vi),其容量0和费用-w ij,流量为-f ij。

事实上,对于原网络的数据结构中,这些单元已存在,在用标号法求最大流时是闲置的。这样我们就不必产生关于流f的有向图b(f)。同时对判断(vi,vj)的流量可否改时,可以统一为判断是否“f ij0,则f ji=-f ij<0=c ji。

除此,为了求vs到vt的最短路径,设置一个数组best,其中结构如下。

type Tbest=record

value,fa:integer;

end;

var best:array[1..maxN) of Tbest;

best[i].value表示vs到vi的最短距离,best[i].fa记录着vs到vi最短路径中vi的前趋顶点,以便于找到从vs到vt的增广路径。在每一次寻找最小费用可增广路径前,vs的value值设为0,其它顶点的value 值设为MaxInt。

迭代法求最短增广路径的具体算法如下:

①Best赋初值(除源点的value值为0,其余点的value值均为MaxInt)

②repeat

③Quit:= True;

④for i:=1 to n do

⑤if 源点到i有道路then

⑥for j:=1 to n do

⑦if ((vi,vj)的流量可改进)and

⑧(i的value值+(vi,vj)

⑨begin

⑩j的value值:= i的value值+(vi,vj);

⑾j的fa值:=i;

⑿Quit:=false;

⒀end;

⒁until Quit;

(3)流的调整

若找到vs到vt的最小费用可增广路径,则我们可以从best[t].fa开始反向跟踪找到整个从源点到汇点的可增广路径p,然

后修改可增广路的流量,改进量Q=min{|fij|;(vi,vj)∈p}。注意,在修改增广路上的弧(vi,vj)的流量fij 后,还要修改狐(vj,vi)的流量fji(fji=-fij)。

为了简化程序设计,下面的改进流的过程Add-Path,仅以1作为改进量。

procedure Add_Path;

var i,j:integer;

begin

i:=t;

while i<>s do

begin

j:=beat[i].fa;inc(Net[j,i].f);

Net[i,j].f:=-Net[j,i].f;i:=j;

end;

inc(Minw,best[t].value);

end;

下面请大家编出求最小费用最大流的程序。程序要求的输入文件的格式如下:文件的第一行有两种整数N,表示网络中顶点数。第二行开始,每行描述网络中的一条弧的信息i,j,cij,wij,分别表示弧的起点与终点以及弧上的容量与单位流量通过该弧的费用。文件以连续的4个0表示输入结束。

四.网络流算法的应用

网络流算法的效率为大约为O(E2·V(f*)),其中E为网络中弧的数目,v(f*)为最大流的流值。因此网络流算法效率是多项式算法,仍然是—个高效算法。在近年的竞赛中,网络流算法的应用越来越广,但竞赛中的问题大都看起来与流的问题似乎不相

关。只要我们能构造出问题的网络流模型,就能应用流的算法高效的解决问题。

[例1]最优工作问题(work)

CCS集团有n台机器。为了生产需要,新招募了n名技术人员。他们有丰富的专业技术,每个人都熟悉各种机器的操作。现

在每个人只能操作一台机器,而每个人对不同机器的控制能力又有差别,技术员i对机器j的控制能力称为ability(i,j)。要求给每人分配一台机器,使得所有人控制能力之和最大。

输入格式:

第一行仅有一个整数n(n<=100),第二行开始是一个n*n的矩阵,第i行第j列表示ability(i,j)(ability(i,

j)<=300)。

输出格式:

仅一行:包含一个整数S,表示最大控制能力和。

样例:

INPUT.TXT

3 5 2

3 2 8

7 5 8

OUTPUT.TXT

20

[问题分析]对于本问题,可以建立如图4-3所示的图,x1,x2,x3分别代表3个技术员,y1,y2,y3分别表示3台机器,有向边(xi,yj)表示xi控制机器yj,边上的权表示技术员对该机器的控制能力。显然图4-3是一个二分图。现在要求每个技术员唯一控制一台机器,且要控制能力之和最大。这样问题就转化为一个关于二分图求最佳匹配的问题。

图4 - 3 图4 - 4

[算法分析]下面用求最大流的算法,求最佳匹配。

(1)在二分图基础上,构造一个网络N(如图4-4)。

①增加一个源点s与一个汇点t;

②从s向原图中顶点xi引一条弧;从顶点yi向t引一条弧;

③令所有的弧的容量都为1;

④令弧(s,xi)和(yi,t)上的费用为O。

(2)对网络N求最大费用最大流(只要将所有权改为负,就是最小费用最大流)。

这样构造网络的正确性道理很显然。首先因为网络中每个弧流量都为1,所以就能保证每个技术员控制一台机器,一台机器也唯一由一个技术员控制,最大流量必为n,其次要求最大费用最大流,即可保证所有技术员的控制机器的能力之和最大。

在编程时,可以边读人数据边产生网络N,接着运用一次求最大费用最大流算法,最后,在最大流的方

案中通过找所有流为1的边(vi,vj),就可得到各个技术员控制机器的情况及最大控制能力之和。

(参考程序略)

[例2]最少皇后控制

在国际象棋中,皇后能向八个方向攻击(如图4-5所示,图中黑点格子为皇后的位置,标有K的格子为皇后可攻击到的格

子)。现在给定一个M*N(N、M均不大于10)的棋盘,棋盘上某些格子有障碍。每个皇后被放置在无障碍的格子中,且它就控制了这个格子,除此,它可以从它能攻击到的最多8个格子中选一个格子来控制,如图4-5(b)所示,标号为1的格子被一个皇后所控制。

请你编一程序,计算出至少有多少个皇后才能完全控制整个棋盘。

输入格式:

输入文件的第一行有两个整数M和N,表示棋盘的行数与列数。接下来M行N列为一个字符矩阵,用‘.’号表示空白的格子,‘x’表示有障碍的格子。

输出格式:

输出文件的第一行仅有一个数S,表示需要皇后的数目,接下来输出一个皇后的放置方案,

输入范例:

3 4

x...

x.x.

.x..

输出范例

5

x132

x5x1

4x23

图4 - 5 图4 - 6

[问矗分析]如果本问题用简单的搜索来做,尽管题目给的棋盘不大,但搜索算法很难在短时间内出解。由于皇后在棋盘中最多只能控制两个棋格子,如果我们将棋盘涂成黑白相间的格子,若某皇后控制的两个格子一定是一个是黑格,另一个是白格

(如图4-6),不妨设这两个格子中皇后在白格子上。于是,我们将N*M个格子分成白格与黑格两部分。已知最少需要皇后的数目的下界为[N*M÷2],要使得皇后数目最少必定是尽量多的皇后控制两个格子。如果我们在每个白格与它能攻击到的黑格之间加上一条有向弧,则问题很自然的转化为二分图的最大匹配问题。最大匹配数M加上未匹配的格子数即为最少需要的皇后数目。

[算法分析]

(1)构造一个网络N

①将棋盘中的所有格子分成两个部分,对所有的格子进行编号,每个白格与它能攻击到的黑格之间(障碍除外)添上一条从白格到黑格的弧,构成一个二分图。

②增加一个源点s,从s点向所有非障碍的白格添上一条弧;增加一个汇点t,从所有非障碍的黑格到t 添上一条弧。

③设置所有的弧的流量为1。

(2)使用一次最大流算法,求二分图一个最大匹配

(参考程序略)

§6 习题

1.对如题图1所示的有向图,画出邻按矩阵和邻接表的存储表示。

2.一个无向连通图的存储结构以邻接表的形式给定题图2,编写算法删除该图中的一条边(i,j)。

3.一个无向连通图的存储结构由如题图2所示的邻接表给出,如果选定初始点为V0=2,分别写出DFS和BFS搜索时打印顶点的序列。

4.利用DFS搜索的思想编写一个算法,求一条从V0出发到Vk点的简单路径。分别选用邻接表和邻接矩阵为图的存储结构完成上述任务。

5.利用BFS搜索的思想编写一个算法,求从V0点到Vk点之间的最短路径。分别选用邻接表和邻接矩阵为图的存储结构完成上述任务。

6.利用深度优先搜索的算法思想写一个算法,判断有向图中是否存在环路。

7.由如下的网络邻接矩阵(oo表示无穷大),画出一棵最小生成树。

1 2 3 4 5 6

1 | oo 16 oo oo 19 21

2 | 16 oo 5 6 oo 11

3 | oo 5 oo 10 oo oo

4 | oo 6 10 oo 18 14

5 | 19 oo oo 18 oo 33

6 | 21 11 oo 14 33 oo

8.对如题图3所示的AOV网按拓扑排序的算法思想进行顶点排序,写出所有可能的拓扑序列。

9.在无向连通图G中给定两个顶点u和v。设计算法,打印出到u和v的最短路径是等距离的所有顶点及其相应的最短路径值。图G的存储方式选用邻按表.对于给定的数据模型和输出结果如题图4所示。(提示:分别从u和v出发进行广度优先搜索)。

10.城市中有一环行地铁,可以找到最经济的方案,从市中一点乘公共车经过最少的转车站数去换乘地铁(不考虑倒车次数)。用图的模型可描述为:在无向图中存在一个环路。从图中一给定点出发,求-—条可以到达环上顶点且包含最少边数的路径。若图的存储方式为邻接表,环路的数据结构形式自行决定,没汁算法求出符合要求的路径。一个参考模型如下。

初中数学建模案例

初中数学建模案例 Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】

中学数学建模论文指导 中学阶段常见的数学模型有:方程模型、不等式模型、函数模型、几何模型和统计模型等。我们也把运用数学模型解决实际问题的方法统称为应用建模。可以分五种模型来写。论文最好自己写,如果是参加竞赛的话从网上找的会被搜出来的。 一、建模论文的标准组成部分 建模论文作为一种研究性学习有意义的尝试,可以锻炼学生发现问题、解决问题的能力。一般来说,建模论文的标准组成部分由论文的标题、摘要、正文、结论、参考文献等部分组成。现就每个部分做个简要的说明。 1. 题目 题目是给评委的第一印象,所以论文的题目一定要避免指代不清,表达不明的现象。建议将论文所涉及的模型或所用的计算方式写入题目。如“用概率方法计算商场打折与返券的实惠效应”。 2. 摘要 摘要是论文中重要的组成部分。摘要应该使用简练的语言叙述论文的核心观点和主要思想。如果你有一些创新的地方,一定要在摘要中说明。进一步,必须把一些数值的结果放在摘要里面,例如:“我们的最终计算得出,对于消费者来说,打折比返券的实惠率提高了23%。”摘要应该最后书写。在论文的其他部分还没有完成之前,你不应该书写摘要。因为摘要是论文的主旨和核心内容的集中体现,只有将论文全部完成且把论文的体系罗列清楚后,才可写摘要。 摘要一般分三个部分。用三句话表述整篇论文的中心。 第一句,用什么模型,解决什么问题。 第二句,通过怎样的思路来解决问题。

第三句,最后结果怎么样。 当然,对于低年级的同学,也可以不写摘要。 3. 正文 正文是论文的核心,也是最重要的组成部分。在论文的写作中,正文应该是从“提出问题—分析问题—选择模型—建立模型—得出结论”的方式来逐渐进行的。其中,提出问题、分析问题应该是清晰简短。而选择模型和建立模型应该是目标明确、数据详实、公式合理、计算精确。在正文写作中,应尽量不要用单纯的文字表述,尽量多地结合图表和数据,尽量多地使用科学语言,这会使得论文的层次上升。 4. 结论 论文的结论集中表现了这篇论文的成果,可以说,只有论文的结论经得起推敲,论文才可以获得比较高的评价。结论的书写应该注意用词准确,与正文所描述或论证的现象或数据保持绝对的统一。并且一定要对结论进行自我点评,最好是能将结论推广到社会实践中去检验。 5. 参考资料 在论文中,如果使用了其他人的资料。必须在论文后标明引用文章的作者、应用来源等信息。 二、建模论文的写作步骤 1. 确定题目 选择一个你感兴趣的生活中的问题作为研究对象,并根据研究对象设置论文题目。最好是找一位或几位老师帮助安排研究课题。在确定好课题后,应该写一个写作计划给指导老师看看,并征求他们对该计划的建议。 2. 开展科研课题

数学建模笔记

数学模型按照不同的分类标准有许多种类: 1。按照模型的数学方法分,有几何模型,图论模型,微分方程模型.概率模型,最优控制模型,规划论模型,马氏链模型. 2。按模型的特征分,有静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型. 3.按模型的应用领域分,有人口模型,交通模型,经济模型,生态模型,资源模型。环境模型。 4.按建模的目的分,有预测模型,优化模型,决策模型,控制模型等。 5.按对模型结构的了解程度分,有白箱模型,灰箱模型,黑箱模型。 数学建模的十大算法: 1.蒙特卡洛算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法。) 2.数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用matlab作为工具。) 3.线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用lingo、lingdo软件实现) 4.图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。) 5.动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6.最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题时用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需谨慎使用) 7.网格算法和穷举法(当重点讨论模型本身而情史算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8.一些连续离散化方法(很多问题都是从实际来的,数据可以是连续的,而计算机只认得是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。

数学建模中的图论方法

数学建模中的图论方法 一、引言 我们知道,数学建模竞赛中有问题A和问题B。一般而言,问题A是连续系统中的问题,问题B是离散系统中的问题。由于我们在大学数学教育内容中,连续系统方面的知识的比例较大,而离散数学比例较小。因此很多人有这样的感觉,A题入手快,而B题不好下手。 另外,在有限元素的离散系统中,相应的数学模型又可以划分为两类,一类是存在有效算法的所谓P类问题,即多项式时间内可以解决的问题。但是这类问题在MCM中非常少见,事实上,由于竞赛是开卷的,参考相关文献,使用现成的算法解决一个P类问题,不能显示参赛者的建模及解决实际问题能力之大小;还有一类所谓的NP问题,这种问题每一个都尚未建立有效的算法,也许真的就不可能有有效算法来解决。命题往往以这种NPC问题为数学背景,找一个具体的实际模型来考验参赛者。这样增加了建立数学模型的难度。但是这也并不是说无法求解。一般来说,由于问题是具体的实例,我们可以找到特殊的解法,或者可以给出一个近似解。 图论作为离散数学的一个重要分支,在工程技术、自然科学和经济管理中的许多方面都能提供有力的数学模型来解决实际问题,所以吸引了很多研究人员去研究图论中的方法和算法。应该说,我们对图论中的经典例子或多或少还是有一些了解的,比如,哥尼斯堡七桥问题、中国邮递员问题、四色定理等等。图论方法已经成为数学模型中的重要方法。许多难题由于归结为图论问题被巧妙地解决。而且,从历年的数学建模竞赛看,出现图论模型的频率极大,比如: AMCM90B-扫雪问题; AMCM91B-寻找最优Steiner树; AMCM92B-紧急修复系统的研制(最小生成树) AMCM94B-计算机传输数据的最小时间(边染色问题) CMCM93B-足球队排名(特征向量法) CMCM94B-锁具装箱问题(最大独立顶点集、最小覆盖等用来证明最优性) CMCM98B-灾情巡视路线(最优回路) 等等。这里面都直接或是间接用到图论方面的知识。要说明的是,这里图论只是解决问题的一种方法,而不是唯一的方法。 本文将从图论的角度来说明如何将一个工程问题转化为合理而且可求解的数学模型,着重介绍图论中的典型算法。这里只是一些基础、简单的介绍,目的在于了解这方面的知识和应用,拓宽大家的思路,希望起到抛砖引玉的作用,要掌握更多还需要我们进一步的学习和实践。

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

数学建模常用的十大算法==转 (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 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的

数学建模模拟题,图论,回归模型,聚类分析,因子分析等 (48)

第11章第2题 摘要 本题分析4 种化肥和3 个小麦品种对小麦产量的影响,以及二者交互作用对小麦产量的影响,可视为两因素方差分析,即化肥和小麦品种两个因素,4种化肥可看作是化肥的四个不同水平,3个小麦品种也可以看作是小麦品种的三个不同水平。 试验的目的是分析化肥的四个不同水平以及小麦品种的三个不同水平对小麦产量有无显着性影响。 关键词:方差分析显着性化肥种类小麦品种

一.问题重述 为了分析4 种化肥和3 个小麦品种对小麦产量的影响,把一块试验田等分成36个小块,分别对3种种子和四种化肥的每一种组合种植3 小块田,产量如表1所示(单位公斤),问不同品种、不同种类的化肥及二者的交互作用对小麦产量有无显着影响。 二.问题分析 本题意在分析四种化肥和三种小麦品种对小麦产量的影响,以及二者交互作用对小麦产量的影响,为两因素方差分析问题,即化肥和小麦品种两个因素,4种化肥可看作是化肥的四个不同水平,3个小麦品种也可以看作是小麦品种的三个不同水平。通过对这两种因素的不同水平及交互作用的分析,从而分析 4 种化肥和3 个小麦品种对小麦产量的影响。 三.模型假设 1.假设只有化肥种类和小麦品种两个因素,其他因素对试验结果不构成影响。 2.假设不存在数据记录错误。 3.假设每一块试验田本身各项指标相同,不会影响结果。 四.符号说明 数字1,2,3,4——不同的化肥种类 数字1,2,3——不同的小麦品种 五.模型建立 将化肥种类和小麦品种视为两个因素,四种化肥种类看作是化肥种类的四个不同水平,三个小麦品种看作是小麦品种的三个不同水平,将表1的数据进行整理,如表2所示。

六.模型求解 将表2数据导入到spss软件中,进行两因素方差检验,得到结果如下:表3

数学建模案例分析

案例分析1: 自行车外胎的使用寿命 问题: 目前,自行车在我国是一种可缺少的交通工具。它小巧、灵活、方便、易学,而且价格适中,给广大居民带来了不小的益处。但是,自行车也有令人头痛的地方,最常见的问题莫过于扎胎了。扎胎的原因有很多,但相当一部分是由于外胎磨损,致使一些玻璃碴、小石子很容易侵入、扎破内胎。为了减少不必要的麻烦,如何估计自行车外胎的寿命,及时更换? 分析: 分析角度:由于题目里未明确指出我们是应从厂家角度,还是应从用户角度来考虑这个问题,因此需要我们自己做出合理判断。若从厂家角度,我们面对的应当是一大批自行车外胎的平均寿命的估计。这样的估计要求一定精确度和相对明确的使用环境;而从用户角度来说,面对的仅是个人的一辆车,不需要很高的精确度,这样的寿命估计更简单,易于随时了解,下面仅从用户角度进行分析。 产品的使用者需要了解产品的寿命,是基于安全性及更换的费用来考虑的。我们将这两个标准作为主要标准来分析,首先值得注意的两个关键性问题是如何定义寿命、何时为寿命的终止。寿命的定义要做到科学,直观,有可比性,在航空工业中航天飞机的使用寿命是用重复使用的次数来衡量,而工厂机器设备的寿命则以连续工作的时间来定义。本题外胎的寿命亦可用时间来表征,但由于外胎的寿命直接与其磨损速度相关;而磨损速度又与使用频率及行驶速度相互联系,致使外胎的寿命不一定与使用时间成正比(这种非正比关系使我们不能拿一辆—天跑200公里的自行车与一天只跑1公里的自行车进行寿命比较),降低了可比性。如换成自行车的路程寿命来比较,就好得多。产品寿命是在安全性和更换费用相互制约下达到的一个点,在这个点上,外胎的安全系数降到用户不可接受的最低值,更换费用(寿命越长,在一定意义上更换费用越低)也达到了最大限度的节省。 弄清了上面两个问题后,我们继续明确建立模型需要解决哪些问题及建立模型的重点难点。 自行车使用过程中,一来影响因素多,二来这些因素之间彼此相关,十分复杂,要做到比较准确地估计使用寿命,不但要对外胎的性能有相当的了解,而且对使用环境更不能忽视。当然我们由于是站在用户角度上来考虑的,相对地就可忽略一些次要的影响因素。 这样的数学模型面对着两个主要问题。一、自行车使用寿命与外胎厚度的关系,二、外胎能够抵御小石子破坏作用的最小厚度。后者可处理得相对简略些(如只考虑一块具有一般特征的小石子对外胎的破坏作用),而重点(也是难点)是第一个问题。车重、人重、轮胎性质(力学的、热学的、甚至化学的)和自行车使用频率等都左右着它们的关系。这么多相关因素,不必一一都加以考虑(用户是不会在意这么多的),有些因素,可以先不考虑,在模型的改进部分再作修改,采取逐步深入的方法,如:摩擦损耗有滑动摩擦和滚动摩擦损耗两种,由于滚动摩擦占用的时间(或路程)显然占绝对优势,因此可重点考虑。但滑动摩擦造成的一次损坏又比滚动摩擦大,在刹车使用过频的情况下,就不能不考虑了。 最后,需对得出的结果用简单清晰的文字进行说明,以供用户参考。 案例分析2:城市商业中心最优位置分析 问题: 城市商业中心是城市的基本构成要素之一。它的形成是一个复杂的定位过程。商业中心的选址涉及到各种因素制约,但其中交通条件是很重要的因素之一。即商业中心应位于城市“中心”,如果太偏离这一位置,极有可能在城市“中心”地带又形成一个商业区,造成重复建设。 某市对老商业中心进行改建规划,使居民到商业中心最方便。如果你是规划的策划者,如何建立一个数学模型来解决这个问题。

数据建模目前有两种比较通用的方式

数据建模目前有两种比较通用的方式1983年,数学建模作为一门独立的课程进入我国高等学校,在清华大学首次开设。1987年高等教育出版社出版了国内第一本《数学模型》教材。20多年来,数学建模工作发展的非常快,许多高校相继开设了数学建模课程,我国从1989年起参加美国数学建模竞赛,1992年国家教委高教司提出在全国普通高等学校开展数学建模竞赛,旨在“培养学生解决实际问题的能力和创新精神,全面提高学生的综合素质”。近年来,数学模型和数学建模这两个术语使用的频率越来越高,而数学模型和数学建模也被广泛地应用于其他学科和社会的各个领域。本文主要介绍了数学建模中常用的方法。 一、数学建模的相关概念 原型就是人们在社会实践中所关心和研究的现实世界中的事物或对象。模型是指为了某个特定目的将原型所具有的本质属性的某一部分信息经过简化、提炼而构造的原型替代物。一个原型,为了不同的目的可以有多种不同的模型。数学模型是指对于现实世界的某一特定对象,为了某个特定目的,进行一些必要的抽象、简化和假设,借助数学语言,运用数学工具建立起来的一个数学结构。 数学建模是指对特定的客观对象建立数学模型的过程,是现实的现象通过心智活动构造出能抓住其重要且有用的特征的表示,常常是形象化的或符号的表示,是构造刻画客观事物原型的数学模型并用以分析、研究和解决实际问题的一种科学方法。 二、教学模型的分类 数学模型从不同的角度可以分成不同的类型,从数学的角度,按建立模型的数学方法主要分为以下几种模型:几何模型、代数模型、规划模型、优化模型、微分方程模型、统计模型、概率模型、图论模型、决策模型等。 三、数学建模的常用方法 1.类比法 数学建模的过程就是把实际问题经过分析、抽象、概括后,用数学语言、数学概念和数学符号表述成数学问题,而表述成什么样的问题取决于思考者解决问题的意图。类比法建模一般在具体分析该实际问题的各个因素的基础上,通过联想、归纳对各因素进行分析,并且与已知模型比较,把未知关系化为已知关系,

数学建模案例

2014年河南科技大学模拟训练一 承诺书 我们仔细阅读了数学建模选拔赛的规则. 我们完全明白,在做题期间不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人研究、讨论与选拔题有关的问题。 我们知道,抄袭别人的成果是违反选拔规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守选拔规则,以保证选拔的公正、公平性。如有违反选拔规则的行为,我们将受到严肃处理。 我们选择的题号是(从A/B/C中选择一项填写): C 队员签名:1. 2. 3. 日期: 2014 年 8 月 19 日

2014年河南科技大学数学建模竞赛选拔 编号专用页 评阅编号(评阅前进行编号): 评阅记录(评阅时使用): 评 阅 人 评 分 备 注

搜索黑匣子 摘要

一、问题重述 2014年3月8号,马来西亚航空370号班机从马来西亚吉隆坡前往中国北京途中失联,被认为是有史以来“最离奇”的飞机失联案例。空难的谜团不能解开,很大程度上取决于能不能打捞到“黑匣子”。MH370的失联,各国为此出动了25架飞机,40艘舰艇,甚至包括若干卫星。 我们要解决的问题如下: 1.我们首先将单独对船只这种搜寻工具分析,根据假设确定最后失联地点,找出大概搜索区域,确定飞机残骸和黑夹子疑似地点,利用性变形最短路径模型确定搜索完所有可疑地点的最短路径,最后求出最小风险系数下的最优搜索方案,并明确这种搜索方案的优缺点。 2.所有的飞机船舰及卫星都有一个国家统一调度,则根据卫星、飞机、船舰的各自的探索方式划分搜寻区域,进行统一分工合作,提高搜索的效率和降低搜索的费用。分别建立模型得出每种单一搜索工具的最优搜索你方案,最终利用多人TST问题计算整合出多种搜索工具共同参与下的最优搜索方案。 二、模型假设 1.马航370残骸和黑夹子落点的可疑位置已确定。 2.专家对搜索船只在搜索过程中的权重确定真是可靠。 3.船只在搜索过程中只受到文中因素的影响,其余因素影响很小。 4.在搜索过程中,风速和浪高等环境因素是不变的。 5.搜索过程中各种搜索工具不会出现故障。 6.搜救船只只能按照特定航道行驶。 7.搜索船只的设备都比较齐全,船只的类别对搜索的影响不大。 8.在搜索过程中,风速和浪高等环境因素是不变的。 9.各种搜索人员之间能够实现理想状态下的无障碍交流和信息共享。 三、符号说明 变量和缩略语定义 WC 风飘矢量位移 Vt 海流t时刻的速度 S1 只在洋流影响下的漂流位移 S0 初始位移 La1 A线上相邻顶点之间的距离 A 顶点的分组A即搜索路线A线 M 关联矩阵

初中数学建模案例

中学数学建模论文指导 中学阶段常见的数学模型有:方程模型、不等式模型、函数模型、几何模型和统计模型等。我们也把运用数学模型解决实际问题的方法统称为应用建模。可以分五种模型来写。论文最好自己写,如果是参加竞赛的话从网上找的会被搜出来的。 一、建模论文的标准组成部分 建模论文作为一种研究性学习有意义的尝试,可以锻炼学生发现问题、解决问题的能力。一般来说,建模论文的标准组成部分由论文的标题、摘要、正文、结论、参考文献等部分组成。现就每个部分做个简要的说明。 1. 题目 题目是给评委的第一印象,所以论文的题目一定要避免指代不清,表达不明的现象。建议将论文所涉及的模型或所用的计算方式写入题目。如“用概率方法计算商场打折与返券的实惠效应”。 2. 摘要 摘要是论文中重要的组成部分。摘要应该使用简练的语言叙述论文的核心观点和主要思想。如果你有一些创新的地方,一定要在摘要中说明。进一步,必须把一些数值的结果放在摘要里面,例如:“我们的最终计算得出,对于消费者来说,打折比返券的实惠率提高了23%。”摘要应该最后书写。在论文的其他部分还没有完成之前,你不应该书写摘要。因为摘要是论文的主旨和核心内容的集中体现,只有将论文全部完成且把论文的体系罗列清楚后,才可写摘要。 摘要一般分三个部分。用三句话表述整篇论文的中心。 第一句,用什么模型,解决什么问题。

第二句,通过怎样的思路来解决问题。 第三句,最后结果怎么样。 当然,对于低年级的同学,也可以不写摘要。 3. 正文 正文是论文的核心,也是最重要的组成部分。在论文的写作中,正文应该是从“提出问题—分析问题—选择模型—建立模型—得出结论”的方式来逐渐进行的。其中,提出问题、分析问题应该是清晰简短。而选择模型和建立模型应该是目标明确、数据详实、公式合理、计算精确。在正文写作中,应尽量不要用单纯的文字表述,尽量多地结合图表和数据,尽量多地使用科学语言,这会使得论文的层次上升。 4. 结论 论文的结论集中表现了这篇论文的成果,可以说,只有论文的结论经得起推敲,论文才可以获得比较高的评价。结论的书写应该注意用词准确,与正文所描述或论证的现象或数据保持绝对的统一。并且一定要对结论进行自我点评,最好是能将结论推广到社会实践中去检验。 5. 参考资料 在论文中,如果使用了其他人的资料。必须在论文后标明引用文章的作者、应用来源等信息。 二、建模论文的写作步骤

数学建模常用算法模型

数学模型的分类 按模型的数学方法分: 几何模型、图论模型、微分方程模型、概率模型、最优控制模型、规划论模型、马氏链模型等 按模型的特征分: 静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型等 按模型的应用领域分: 人口模型、交通模型、经济模型、生态模型、资源模型、环境模型等。 按建模的目的分: 预测模型、优化模型、决策模型、控制模型等 一般研究数学建模论文的时候,是按照建模的目的去分类的,并且是算法往往也和建模的目的对应 按对模型结构的了解程度分: 有白箱模型、灰箱模型、黑箱模型等 比赛尽量避免使用,黑箱模型、灰箱模型,以及一些主观性模型。 按比赛命题方向分: 国赛一般是离散模型和连续模型各一个,2016美赛六个题目(离散、连续、运筹学/复杂网络、大数据、环境科学、政策) 数学建模十大算法 1、蒙特卡罗算法 (该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法) 2、数据拟合、参数估计、插值等数据处理算法 (比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问题 (建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4、图论算法 (这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备)

5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 (这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法 (这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法 (当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法 (很多问题都是从实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9、数值分析算法 (如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10、图象处理算法 (赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的这些图形如何展示,以及如何处理就是需要解决的问题,通常使用Matlab进行处理) 算法简介 1、灰色预测模型(必掌握) 解决预测类型题目。由于属于灰箱模型,一般比赛期间不优先使用。 满足两个条件可用: ①数据样本点个数少,6-15个 ②数据呈现指数或曲线的形式 2、微分方程预测(高大上、备用) 微分方程预测是方程类模型中最常见的一种算法。近几年比赛都有体现,但其中的要求,不言而喻。学习过程中 无法直接找到原始数据之间的关系,但可以找到原始数据变化速度之间的关系,通过公式推导转化为原始数据的关系。 3、回归分析预测(必掌握) 求一个因变量与若干自变量之间的关系,若自变量变化后,求因变量如何变化; 样本点的个数有要求: ①自变量之间协方差比较小,最好趋近于0,自变量间的相关性小; ②样本点的个数n>3k+1,k为自变量的个数;

数学建模常用算法模型

按模型的数学方法分: 几何模型、图论模型、微分方程模型、概率模型、最优控制模型、规划论模型、马氏链模型等 按模型的特征分: 静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型等 按模型的应用领域分: 人口模型、交通模型、经济模型、生态模型、资源模型、环境模型等。 按建模的目的分: 预测模型、优化模型、决策模型、控制模型等 一般研究数学建模论文的时候,是按照建模的目的去分类的,并且是算法往往也和建模的目的对应 按对模型结构的了解程度分: 有白箱模型、灰箱模型、黑箱模型等 比赛尽量避免使用,黑箱模型、灰箱模型,以及一些主观性模型。 按比赛命题方向分: 国赛一般是离散模型和连续模型各一个,2016美赛六个题目(离散、连续、运筹学/复杂网络、大数据、环境科学、政策) 数学建模十大算法 1、蒙特卡罗算法 (该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法) 2、数据拟合、参数估计、插值等数据处理算法 (比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具)

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

高中常见数学模型案例(最新整理)

高中常见数学模型案例 中华人民共和国教育部2003年4月制定的普通高中《数学课程标准》中明确指出:“数学探究、数学建模、数学文化是贯穿于整个高中数学课程的重要内容”,“数学建模是数学学习的一种新的方式,它为学生提供了自主学习的空间,有助于学生体验数学在解决问题中的价值和作用,体验数学与日常生活和其他学科的联系,体验综合运用知识和方法解决实际问题的过程,增强应用意识;有助于激发学生学习数学的兴趣,发展学生的创新意识和实践能力。”教材中常见模型有如下几种: 一、函数模型 用函数的观点解决实际问题是中学数学中最重要的、最常用的方法。函数模型与方法在处理实际问题中的广泛运用,两个变量或几个变量,凡能找到它们之间的联系,并用数学形式表示出来,建立起一个函数关系(数学模型),然后运用函数的有关知识去解决实际问题,这些都属于函数模型的范畴。 1、正比例、反比例函数问题 例1:某商人购货,进价已按原价a 扣去25%,他希望对货物订一新价,以便按新价让利销售后仍可获得售价25%的纯利,则此商人经营者中货物的件数x 与按新价让利总额y 之间的函数关系是___________。 分析:欲求货物数x 与按新价让利总额y 之间的函数关系式,关键是要弄清原价、进价、新价之间的关系。 若设新价为b ,则售价为b (1-20%),因为原价为a ,所以进价为a (1-25%) 解:依题意,有化简得,所以25.0)2.01()25.01()2.01(?-=---b a b a b 4 5=,即x a bx y ??==2.0452.0+ ∈=N x x a y ,4 2、一次函数问题 例2:某人开汽车以60km/h 的速度从A 地到150km 远处的B 地,在B 地停留1h 后,再以50km/h 的速度返回A 地,把汽车离开A 地的路x (km )表示为时间t (h )的函数,并画出函数的图像。 分析:根据路程=速度×时间,可得出路程x 和时间t 得函数关系式x (t );同样,可列出v(t)的关系式。要注意v(t)是一个矢量,从B 地返回时速度为负值,重点应注意如何画这两个函数的图像,要知道这两个函数所反映的变化关系是不一样的。 解:汽车离开A 地的距离x km 与时间t h 之间的关系式是:,图略。 ?? ???∈--∈∈=]5.6,5.3(),5.3(50150]5.3,5.2(,150]5.2,0[,60t t t t t x 速度vkm/h 与时间t h 的函数关系式是:,图略。 ?? ???∈-∈∈=)5.6,5.3[,50)5.3,5.2[,0)5.2,0[,60t t t v 3、二次函数问题 例3:有L 米长的钢材,要做成如图所示的窗架,上半部分为半圆,下半部分为六个全等小矩形组成的矩形,试问小矩形的长、宽比为多少时,窗所通过的光线最多,并具体标出窗框面积的最大值。

数学建模方法归类(很全很有用)

在数学建模中常用的方法:类比法、二分法、量纲分析法、差分法、变分法、图论法、层次分析法、数据拟合法、回归分析法、数学规划(线性规划,非线性规划,整数规划,动态规划,目标规划)、机理分析、排队方法、对策方法、决策方法、模糊评判方法、时间序列方法、灰色理论方法、现代优化算法(禁忌搜索算法,模拟退火算法,遗传算法,神经网络)。 用这些方法可以解下列一些模型:优化模型、微分方程模型、统计模型、概率模型、图论模型、决策模型。拟合与插值方法(给出一批数据点,确定满足特定要求的曲线或者曲面,从而反映对象整体的变化趋势):matlab可以实现一元函数,包括多项式和非线性函数的拟合以及多元函数的拟合,即回归分析,从而确定函数;同时也可以用matlab实现分段线性、多项式、样条以及多维插值。 在优化方法中,决策变量、目标函数(尽量简单、光滑)、约束条件、求解方法是四个关键因素。其中包括无约束规则(用fminserch、fminbnd实现)线性规则(用linprog实现)非线性规则、(用fmincon实现)多目标规划(有目标加权、效用函数)动态规划(倒向和正向)整数规划。 回归分析:对具有相关关系的现象,根据其关系形态,选择一个合适的数学模型,用来近似地表示变量间的平均变化关系的一种统计方法(一元线性回归、多元线性回归、非线性回归),回归分析在一组数据的基础上研究这样几个问题:建立因变量与自变量之间的回归模型(经验公式);对回归模型的可信度进行检验;判断每个自变量对因变量的影响是否显著;判断回归模型是否适合这组数据;利用回归模型对进行预报或控制。相对应的有线性回归、多元二项式回归、非线性回归。 逐步回归分析:从一个自变量开始,视自变量作用的显著程度,从大到地依次逐个引入回归方程:当引入的自变量由于后面变量的引入而变得不显著时,要将其剔除掉;引入一个自变量或从回归方程中剔除一个自变量,为逐步回归的一步;对于每一步都要进行值检验,以确保每次引入新的显著性变量前回归方程中只包含对作用显著的变量;这个过程反复进行,直至既无不显著的变量从回归方程中剔除,又无显著变量可引入回归方程时为止。(主要用SAS来实现,也可以用matlab软件来实现)。 聚类分析:所研究的样本或者变量之间存在程度不同的相似性,要求设法找出一些能够度量它们之间相似程度的统计量作为分类的依据,再利用这些量将样本或者变量进行分类。 系统聚类分析—将n个样本或者n个指标看成n类,一类包括一个样本或者指标,然后将性质最接近的两类合并成为一个新类,依此类推。最终可以按照需要来决定分多少类,每类有多少样本(指标)。 系统聚类方法步骤: 1.计算n个样本两两之间的距离 2.构成n个类,每类只包含一个样品 3.合并距离最近的两类为一个新类 4.计算新类与当前各类的距离(新类与当前类的距离等于当前类与组合类中包含的类的距离最小值), 若类的个数等于1,转5,否则转3 5.画聚类图 6.决定类的个数和类。 判别分析:在已知研究对象分成若干类型,并已取得各种类型的一批已知样品的观测数据,在此基础上根据某些准则建立判别式,然后对未知类型的样品进行判别分类。 距离判别法—首先根据已知分类的数据,分别计算各类的重心,计算新个体到每类的距离,确定最短的距离(欧氏距离、马氏距离) Fisher判别法—利用已知类别个体的指标构造判别式(同类差别较小、不同类差别较大),按照判别式的值判断新个体的类别 Bayes判别法—计算新给样品属于各总体的条件概率,比较概率的大小,然后将新样品判归为来自概率最大的总体 模糊数学:研究和处理模糊性现象的数学(概念与其对立面之间没有一条明确的分界线)与模糊数学相关的问题:模糊分类问题—已知若干个相互之间不分明的模糊概念,需要判断某个确定事物用哪一个模糊概念来反映更合理准确;模糊相似选择—按某种性质对一组事物或对象排序是一类常见的问题,但是用来比

数学建模图论模型图论

§1 最小生成树 1.1 生成树的概念 设图G=(V,E)是一个连通图,当从图中任一顶点出发遍历图G时,将边集E(G)分成两个集合A(G)和B(G)。其中A(G)是遍历图时所经过的边的集合,B(G)是遍历图时未经过的边的集合。显然,G1=(V,A)是图G的子图,则称子图G1是连通图G的生成树。图的生成树不是惟一的。如对图1(a),当按深度和广度优先搜索法进行遍历就可以得到图1中(b)和(c)的两棵不同的生成树,并分别称之为深度优先生成树和广度优先生成树。 对于有n个顶点的连通图,至少有n-1条边,而生成树中恰好有n-1条边,所以连通图的生成树是该图的极小连通子图。若图G的生成树中任意加一条边属于边集B(G)中的边,则必然形成回路。 求解生成树在许多领域有实际意义。例如,对于供电线路或煤气管道的铺设问题,即假设要把n个城市联成一个供电或煤气管道网络,则需要铺设n-1条线路。任意两城市间可铺设一条线路,n个城市间最多可能铺设n(n-1)/2条线路,各条线路的造价一般是不同的。一个很实际的问题就是如何在这些可能的线路中选择n-1条使该网络的建造费用最少,这就是下面要讨论的最小生成树问题。 1.2 网的最小生成树 在前面我们已经给出图的生成树的概念。这里来讨论生成树的应用。 假设,要在n个居民点之间敷设煤气管道。由于,在每一个居民点与其余n-1个居民点之间都可能敷设煤气管道。因此,在n个居民点之间,最多可能敷设n(n-1)/2条煤气管道。然而,连通n个居民点之间的管道网络,最少需要n-1条管道。也就是说,只需要n-1条管道线路就可以把n个居民点间的煤气管道连通。另外,还需进一步考虑敷设每一条管道要付出的经济代价。这就提出了一个优选问题。即如何在n(n-1)/2条可能的线路中优选n-1条线路,构成一个煤气管道网络,从而既能连通n个居民点,又能使总的花费代价最小。 解决上述问题的数学模型就是求图中网的最小生成树问题。把居民点看作图的顶点,把居民点之间的煤气管道看作边,而把敷设各条线路的代价当作权赋给相应的边。这样,便构成一个带权的图,即网。对于一个有n个顶点的网可以生成许多互不相同的生成树,每一棵生成树都是一个可行的敷设方案。现在的问题是应寻求一棵所有边的权总和为最小的生成树。

数学建模图论

图论 一.最短路问题 问题描述:寻找最短路径就是在指定网络中两结点间找一条距离最小的路。最短路不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等。 将问题抽象为赋权有向图或无向图G ,边上的权均非负 对每个顶点定义两个标记(()l v ,()z v ),其中: ()l v :表示从顶点到v 的一条路的权 ()z v :v 的父亲点,用以确定最短路的路线 S :具有永久标号的顶点集 1.1Dijkstra 算法:即在每一步改进这两个标记,使最终()l v 为最短路的权 输入:G 的带权邻接矩阵(,)w u v 步骤: (1) 赋初值:令0()0l u =,对0v u ≠,令 ()l v =∞,0={u }S ,0i = 。 (2) 对每个(\)i i i v S S V S ∈= (即不属于上 面S 集合的点),用min{(),()()}i u S l v l u w uv ∈+ 代替()l v ,这里()w uv 表示顶点u 和v 之间边的权值。计算min{()}i u S l v ∈,把达到这个最小值的一个顶点记为1i u +,令11{}i i i S S u ++=?。 (3) 若1i V =-,则停止;若1i V <-,则 用1i +代替i ,转(2) 算法结束时,从0u 到各顶点v 的距离由v 的最后一次编号()l v 给出。在v 进入i S 之前的编号()l v 叫T 标号,v 进入i S 之后的编号()l v 叫P 标号。算法就是不断修改各顶点的T 标号,直至获得P 标号。若在算法运行过程中,将每一顶点获得P 标号所由来的边在图上标明,则算法结束时,0u 至各顶点的最短路也在图上标示出来了。 理解:贪心算法。选定初始点放在一个集合里,此时权值为0初始点搜索下一个相连接点,将所有相连接的点中离初始点最近的点纳入初始点所在的集合,并更新权值。然后以新纳入的点为起点继续搜索,直到所有的点遍历。

数学建模图论

数学建模图论 Document number:WTWYT-WYWY-BTGTT-YTTYU-2018GT

图论 一.最短路问题 问题描述:寻找最短路径就是在指定网络中两结点间找一条距离最小的路。最短路不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等。 将问题抽象为赋权有向图或无向图G ,边上的权均非负 对每个顶点定义两个标记(()l v ,()z v ),其中: ()l v :表示从顶点到v 的一条路的权 ()z v :v 的父亲点,用以确定最短路的路线 S :具有永久标号的顶点集 算法:即在每一步改进这两个标记,使最终()l v 为最短路的权 输入:G 的带权邻接矩阵(,)w u v 步骤: (1) 赋初值:令0()0l u =,对0v u ≠, 令()l v =∞,0={u }S ,0i =。 (2) 对每个(\)i i i v S S V S ∈=(即不属 于上面S 集合的点),用min{(),()()}i u S l v l u w uv ∈+代替()l v ,这里()w uv 表示顶点u 和v 之间边的权值。计算min{()}i u S l v ∈,把达到这个最小值的一个顶点记为1i u +,令11{}i i i S S u ++=?。 (3) 若1i V =-,则停止;若 1i V <-,则用1i +代替i ,转(2) 算法结束时,从0u 到各顶点v 的距离由v 的最后一次编号()l v 给出。在v 进入i S 之前的编号()l v 叫T 标号,v 进入i S 之后的编号()l v 叫P 标号。算法就是不断修改各顶点的T 标号,直至获得P 标号。若在算法运行过程中,将

数学建模 图与网络模型及方法

第五章 图与网络模型及方法 §1 概论 图论起源于18世纪。第一篇图论论文是瑞士数学家欧拉于1736 年发表的“哥尼斯堡的七座桥”。1847年,克希霍夫为了给出电网络方程而引进了“树”的概念。1857年,凯莱在计数烷22 n n H C 的同分异构物时,也发现了“树”.哈密尔顿于1859年提出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈,近几十年来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和方法已经渗透到物理、化学、通讯科学、建筑学、生物遗传学、心理学、经济学、社会学等学科中。 图论中所谓的“图"是指某类具体事物和这些事物之间的联系.如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。当 然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功.欧拉为了解决 这个问题,采用了建立数学模型的方法.他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点”,七条“线”的“图”.问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河. 图与网络是运筹学(Operat ions Research )中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域.下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题. 我们首先通过一些例子来了解网络优化问题. 例1 最短路问题(SPP -shorte st pat h p rob lem ) 一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?假设货柜车的运行速度是恒定的,那么这一问题相当于需要找到一条从甲地到乙地的最短路。 例2 公路连接问题 某一地区有若干个主要城市,现准备修建高速公路把这些城市连接起来,使得从其中任何一个城市都可以经高速公路直接或间接到达另一个城市.假定已经知道了任意两个城市之间修建高速公路的成本,那么应如何决定在哪些城市间修建高速公路,使得总

相关文档
相关文档 最新文档