CN107016048A - 基于追赶法求解圣维南方程组的树状河网智能搜索方法 - Google Patents

基于追赶法求解圣维南方程组的树状河网智能搜索方法 Download PDF

Info

Publication number
CN107016048A
CN107016048A CN201710102631.8A CN201710102631A CN107016048A CN 107016048 A CN107016048 A CN 107016048A CN 201710102631 A CN201710102631 A CN 201710102631A CN 107016048 A CN107016048 A CN 107016048A
Authority
CN
China
Prior art keywords
node
search
nodes
degree
sort
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710102631.8A
Other languages
English (en)
Inventor
雷晓辉
曾志强
杨明祥
蒋云钟
王浩
权锦
刘珂
田雨
张云辉
蔡思宇
秦韬
谢明超
王迁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Institute of Water Resources and Hydropower Research
Original Assignee
China Institute of Water Resources and Hydropower Research
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Institute of Water Resources and Hydropower Research filed Critical China Institute of Water Resources and Hydropower Research
Priority to CN201710102631.8A priority Critical patent/CN107016048A/zh
Publication of CN107016048A publication Critical patent/CN107016048A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提出一种基于追赶法求解圣维南方程组的树状河网智能搜索方法,属于水利信息化应用领域。本发明在准备阶段,将需要进行搜索的河网进行河网概化,生成有向图并编码,然后生成邻接矩阵;在搜索路径计算阶段,首先计算有向图中每个节点的出度和入度并将所有节点分类放入SN源节点、IN内节点、EN终节点三个集合中,并设置一个Sort集合;在SN集合中任选一个节点作为搜索起始节点,根据条件对起始节点进行判定,选择执行相应的步骤进行搜索,并将结果放入Sort集合;搜索结束,返回Sort集合,按先后顺序依次排列所得到的边的编码,即为搜索得到的路径。本发明方法是一种针对树状河网的通用型方法,计算简便,具有较大实用价值。

Description

基于追赶法求解圣维南方程组的树状河网智能搜索方法
技术领域
本发明属于水利信息化应用领域,特别涉及一种基于追赶法求解圣维南方程组的树状河网智能搜索方法。
背景技术
随着计算机的快速发展,计算机技术逐渐渗透到水利领域,促使水利应用系统开发成为一种发展趋势,例如水文预报系统、调度系统和水资源管理系统等。这些系统大多都不可避免地需要进行河网一维水动力计算。
河网一维水动力计算的本质在于求解圣维南方程组,而求解该方程组一般先采用有限差分法将方程组离散成差分方程,然后利用追赶法对线性化的差分方程组进行求解。差分化的过程与河网拓扑结构没有相关关系,但对差分方程的求解却依赖于河网的拓扑结构,其本质原因在于追赶法在“追”和“赶”的过程中是讲究河道计算先后顺序的。其中,“追”是求解各断面追赶系数的过程,而“赶”是求解各断面水位、流量的过程。针对河网中的单个河段,只有确定了河段首断面的追赶系数后,才能从上游到下游依次确定其余断面的追赶系数。而针对整个河网来说,只有确定了相邻上游河段的追赶系数之后,才能求得下游河段的追赶系数。另外,“赶”的顺序正好是“追”过程的逆序。针对追赶法的求解特点,如何让计算机智能地选择“追”、“赶”计算路线成为一个亟待解决的问题。
目前,针对此问题还没有比较好的解决方法,一般采用的方法是事先人工设定河网的计算顺序。这种人工方法在小型树状河网中还适用,一旦河网变得复杂,人工设定也会变得复杂。同时,如果计算河网发生变化,则又需重新设定,过程复杂且容易出错。目前尚没有一种通用的智能方法能够解决追赶法求解圣维南方程组中的计算顺序选择问题。
发明内容
本发明的目的是为克服已有技术的不足之处,提出一种基于追赶法求解圣维南方程组的树状河网智能搜索方法。本发明所提出的智能搜索方法是一种针对树状河网的通用型方法,搜索方法所产生的搜索路径即为追赶法中“追”的计算顺序,而搜索路径的逆序路径即为“赶”的计算顺序,所形成的搜索路径可用于指引追赶法的求解计算。
本发明提出的一种基于追赶法求解圣维南方程组的树状河网智能搜索方法,其特征在于,包括以下步骤:
1)准备阶段;在搜索开始前,进行三个方面的前期准备工作,包括:河网概化、有向图编码、邻接矩阵生成。具体步骤如下:
1-1)河网概化;
将需要进行搜索的树状河网概化为由节点N和边E组成的有向图G,记为G=(N,E);有向图G中,一条带有箭头的边代表一个河段,箭头的指向为河段水流的方向,每一条边两端都连接着一个节点,节点分为源节点SN、内节点IN和终节点EN三类;
1-2)有向图编码;
将步骤1-1)得到的有向图G中的节点从0开始用自然数进行编码,将边所对应的两端节点的编码进行组合形成边的编码,有向图中边上箭尾所对应的节点编码在前,箭头所指向的节点编码在后;
1-3)邻接矩阵生成;
编码后的节点用邻接矩阵aij表示节点i和节点j的到达关系,i和j表示两个节点的编码:如果节点i和节点j为同一条边ij上的两个节点,且节点i到节点j的方向与箭头方向同向,则表示节点i能够达到节点j,记为邻接矩阵aij=1,否则为0;节点本身不能到达自己本身,即aii≡0;利用各节点的拓扑关系,构建出河网的邻接矩阵,用邻接矩阵aij表示节点i和节点j的到达关系如式(1)所示:
2)搜索路径计算阶段,具体包括以下步骤:
2-1)计算每个节点的出度和入度;
LD(i)表示节点i节的出度,ED(i)表示节点i的入度;如果某一节点j能够到达i,即aji=1,则节点i的入度ED(i)增加1;如果某一节点i能够达j(j=0,1,…,n),即aij=1,则节点i的出度LD(i)增加1;遍历所有节点,计算得到每个节点的出度和入度;
2-2)对节点分类;
设置SN源节点、IN内节点、EN终节点和Sort四个集合;将满足ED(i)=0且LD(i)=1的所有节点放入SN集合中;将满足ED(i)>0且LD(i)=1的所有节点放入IN集合中;将满足ED(i)>0且LD(i)=0的所有节点放入EN集合中;Sort集合用于存放搜索得到的边的编码;
2-3)在SN集合中任意选取一个节点i作为搜索的起始节点,并执行步骤2-4);
2-4)根据条件对步骤2-3)选定的起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
2-5)循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止;如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
2-6)循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
2-7)将返回得到的节点作为新的搜索起始点,重新返回步骤2-4);
2-8)搜索结束,返回Sort集合,Sort集合中按先后顺序依次排列所得到的边的编码,即为搜索得到的路径。
本发明的特点及有益效果
本发明提出的基于追赶法求解圣维南方程组的树状河网智能搜索方法,解决了利用追赶法求解圣维南方程时,传统的依靠人工设定河网计算顺序方法的不足。本发明方法不仅适用于小型树状河网,也适合于大型或情况复杂的树状河网。该发明将计算机与水利紧密结合,体现了学科交叉的特点。本发明所提出的智能搜索方法是一种针对树状河网的通用型方法,计算简便,具有较大的实用价值。
附图说明
图1为河网概化示意图。
图2为本发明中搜索路径计算阶段流程框图。
图3为本发明实施例的河网概化示意图。
图4为本发明实施例中河网节点入度和出度示意图。
具体实施方式
本发明提出的基于追赶法求解圣维南方程组的树状河网智能搜索方法,下面结合附图和具体实施例进一步详细说明如下。
本发明仅针对树状河网进行智能搜索,而树状河网是指由多条河流汇入,但河流与河流之间不形成环状结构,且仅有一条河流流出的河系结构。
本发明提出的基于追赶法求解圣维南方程组的树状河网智能搜索方法,包括以下步骤:
1)准备阶段;
在搜索开始前,进行三个方面的前期准备工作,包括:河网概化、有向图编码、邻接矩阵生成。具体步骤如下:
1-1)河网概化
将需要进行搜索的树状河网概化为由节点N(Node)和边E(Edge)组成的有向图G(Graph),记为G=(N,E)。河网概化示意图如图1所示。图1中,一条带有箭头的边代表一个河段,箭头的指向即为河段水流的方向;每一条边(河段)两端都连接着一个节点,这个节点可能是两个河段的交汇点,也可能是整个河网的最上游起始点或者河网最下游的终止点,具体节点类型由河段在河网中的具体位置而定。为了规范化节点类型,将节点又分为源节点(SN)、内节点(IN)和终节点(EN)三类。其中源节点是指只有水流出而没有水流入的节点,即为河网的最上游起始点,如图1中0号、1号以及4号节点;内节点指的是既有水流入又有水流出的节点,即两个河段的交汇点,如图1中的2号和3号节点;而终节点是指只有水流入而没有水流出的节点,即河网最下游的终止点,如图1中的5号节点。概化后的树状河网在几何上有一个共同的特点,即每个节点有几条河流汇入或者没有河流流入,但最多只有一条河流流出。
1-2)有向图编码
将步骤1-1)得到的有向图G中的节点从0开始用自然数进行编码(节点编号顺序不作具体限制,原则上从上游往下游依次编码),节点的序号为图1中圆圈内所示数字;而将边所对应的两端节点的编码进行组合形成边的编码,边上箭尾所对应的节点编码在前,箭头所指向的节点编码在后,例如图1中,节点0和节点2所组成的边的编码即为02,节点1和节点2所组成的边的编码即为12,节点2和节点3所组成的边的编码即为23,节点4和节点3所组成的边的编码即为43,节点3和节点5所组成的边的编码即为35。
1-3)邻接矩阵生成
编码后的节点用邻接矩阵aij表示节点i和节点j的到达关系,i和j表示两个节点的编码:如果节点i和节点j为同一条边ij上的两个节点,且节点i到节点j的方向与箭头方向同向,则表示节点i能够达到节点j,记为邻接矩阵aij=1,否则为0;另外,节点本身不能到达自己本身,即aii≡0;利用各节点的拓扑关系,可构建出河网的邻接矩阵,用邻接矩阵aij表示节点i和节点j的到达关系如式(1)所示:
2)搜索路径计算阶段,计算方法流程图如图4所示,具体包括以下步骤:
2-1)计算每个节点的出度和入度;
出度:指某节点能够到达除自身以外节点的节点个数,用LD(i)表示节点i节的出度。
入度:指能够到达某一节点的节点个数,用ED(i)表示该节点i的入度。
如果某一节点j能够到达i,即aji=1,则节点i的入度ED(i)增加1;如果某一节点i能够达j(j=0,1,…,n),即aij=1,则节点i的出度LD(i)增加1;遍历所有节点,计算得到每个节点的出度和入度;
2-2)对节点分类;
设置SN源节点、IN内节点、EN终节点和Sort四个集合,将满足ED(i)=0且LD(i)=1的所有节点放入SN集合中;将满足ED(i)>0且LD(i)=1的所有节点放入IN集合中;将满足ED(i)>0且LD(i)=0的所有节点放入EN集合中;Sort集合用于存放搜索得到的边的编码;
2-3)在SN集合中任意选取一个节点i作为搜索的起始节点,并执行步骤2-4);
2-4)根据条件对步骤2-3)选定的起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
2-5)循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵中的aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
2-6)循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
2-7)将返回得到的节点作为新的搜索起始点,重新返回步骤2-4);
2-8)搜索结束,返回Sort集合,Sort集合中按先后顺序依次排列所得到的边的编码,即为搜索得到的路径;Sort集合的正序即为追赶法中设定的“追”的计算顺序,逆序即为设定的“赶”的计算顺序。
上述步骤可通过编程实现,进而实现树状河网的智能搜索。
本发明提出的基于追赶法求解圣维南方程组的树状河网智能搜索方法,下面结合一个具体实施例对本发明进一步说明如下。
1)准备阶段;
在搜索开始前,进行三个方面的前期准备工作,包括:河网概化、有向图编码、邻接矩阵生成。
将需要进行搜索的树状河网概化为由节点N(Node)和边E(Edge)组成的有向图G(Graph),记为G=(N,E)。本实施例的河网概化示意图如图3所示,图3中有9个节点和8条边。其中,节点的编号为:0、1、2、3、4、5、6、7、8、9,边的编号为:02、12、23、43、54、64、38、78.;本实施例河网邻接矩阵如下所示:
2)搜索路径计算阶段,具体实施过程如下:
执行步骤2-1);
计算每个节点的出度和入度,本实施例中每个节点的出度和入度的计算结果示意图如图4所示,图4中相连接的两个矩形方框分别记录了每个节点的入度(左)和出度(右)。计算过程如下所示,
节点0:a02=1,ai0=0(i=0,1,2,…,8),则ED(0)=0,LD(0)=1;
节点1:a12=1,ai1=0(i=0,1,2,…,8),则ED(0)=0,LD(0)=1;
节点2:a23=1,ai2=1(i=0,1),则ED(0)=2,LD(0)=1;
节点3:a38=1,ai3=1(i=2,4),则ED(0)=2,LD(0)=1;
节点4:a43=1,ai3=1(i=5,6),则ED(0)=2,LD(0)=1;
节点5:a54=1,ai5=0(i=0,1,2,…,8),则ED(0)=0,LD(0)=1;
节点6:a64=1,ai6=0(i=0,1,2,…,8),则ED(0)=0,LD(0)=1;
节点7:a78=1,ai7=0(i=0,1,2,…,8),则ED(0)=0,LD(0)=1;
节点8:a8j=0(j=0,1,2,…,8),ai0=1(i=3,7),则ED(0)=2,LD(0)=0;
执行步骤2-2);
设置SN源节点、IN内节点、EN终节点和Sort四个集合,将满足ED(i)=0且LD(i)=1的所有节点放入SN集合中;将满足ED(i)>0且LD(i)=1的所有节点放入IN集合中;将满足ED(i)>0且LD(i)=0的所有节点放入EN集合中;Sort集合用于存放搜索得到的边的编码。
由步骤2-1)所得结果,并根据上述判定条件,将所有节点放入到各自所属的集合中,结果如下所示:
源节点:{0,1,5,6,7}∈SN
内节点:{2,3,4}∈IN
终节点:{8}∈EN
执行步骤2-3);
在SN集合中任意选取节点作为搜索的起始节点。本实施例选择节点0作为搜索的起始节点;
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点0∈SN,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止:如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7)。
本实施例中,通过循环遍历所有节点,得a02=1,则搜索到的节点为2;由节点2∈IN且ED(2)=2≥1,则将邻接矩阵中的a02置为0,同时将节点2的入度ED(2)-1=1,并将边02放入到Sort集合中,返回节点2,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点2作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点2∈IN且ED(2)=1≥1,则执行步骤2-6);
执行步骤2-6);
循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
本实施例中,循环遍历所有节点,得a12=1,则返回节点1,并执行步骤2-7);
执行步骤2-7)
将返回得到的节点1作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点1∈SN,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
本实施例中,通过循环遍历所有节点,得a12=1,则搜索到的节点为2;由节点2∈IN且ED(2)=1≥1,则将邻接矩阵中的a12置0,同时将节点2的的入度ED(2)-1=0,并将边12放入到Sort集合中,返回节点2,并执行步骤2-7);
执行步骤2-7)
将返回得到的节点2作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点2∈IN且ED(2)=0,则执行步骤2-6);
执行步骤2-6);
循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
本实施例中,循环遍历所有节点,得a23=1,则返回节点3,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点3作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点3∈IN且ED(3)=2,则执行步骤2-6);
执行步骤2-6);
循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
循环遍历所有节点,得a43=1,则返回节点4,并执行步骤2-7));
执行步骤2-7);
将返回得到的节点4作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点4∈IN且ED(4)=2,则执行步骤2-6);
执行步骤2-6);
循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
本实施例中,循环遍历所有节点,得a54=1,则返回节点5,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点5作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点5∈SN,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
本实施例中,通过循环遍历所有节点,得a54=1,则搜索到的节点为4;由节点4∈IN且ED(4)=2≥1,则将邻接矩阵中的a54置0,同时将节点4的的入度ED(4)-1=1,并将边54放入到Sort集合中,返回节点4,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点4作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4)
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点4∈IN且ED(4)=,则执行步骤2-6);
执行步骤2-6);
循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
本实施例中,循环遍历所有节点,得a64=1,则返回节点6,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点6作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点6∈SN,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
本实施例中,通过循环遍历所有节点,得a64=1,则搜索到的节点为4;由节点4∈IN且ED(4)=1≥1,则将邻接矩阵中的a64置0,同时将节点4的的入度ED(4)-1=0,并将边64放入到Sort集合中,返回节点4,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点4作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4)
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点4∈IN且ED(4)=0,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
本实施例中,通过循环遍历所有节点,得a43=1,则搜索到的节点为3;由节点3∈IN且ED(3)=1≥1,则将邻接矩阵中的a43置0,同时将节点3的入度ED(3)-1=0,并将43放入到Sort集合中,返回节点3,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点3作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4)
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点3∈IN且ED(3)=0,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
本实施例中,通过循环遍历所有节点,得a38=1,则搜索到的节点为8;由节点8∈EN且ED(8)=2≥1,则将邻接矩阵中的a38置0,同时将节点8的入度ED(8)-1=1,并将38放入到Sort集合中,返回节点8,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点8作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点8∈EN且ED(8)=1>0,则执行步骤2-6);
执行步骤2-6);
循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
本实施例中,循环遍历所有节点,得a78=1,则返回节点7,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点8作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,节点4∈SN,则执行步骤2-5);
执行步骤2-5);
循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止。如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
本实施例中,通过循环遍历所有节点,得a78=1,则搜索到的节点为8;由节点8∈EN且ED(8)=1≥1,则将邻接矩阵中的a78置0,同时将节点8的入度ED(8)-1=0,并将78放入到Sort集合中,返回节点8,并执行步骤2-7);
执行步骤2-7);
将返回得到的节点8作为新的搜索起始点,重新返回步骤2-4);
执行步骤2-4);
根据条件对起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
本实施例中,8∈EN且ED(8)=0,则执行步骤2-8);
执行步骤2-8);
搜索结束,返回Sort集合为:{02;12;23;54;64;43;38;78},Sort集合中按先后顺序依次排列所得到的边的编码,即为搜索得到的路径;Sort集合的正序即为追赶法中设定的“追”的计算顺序,逆序即为设定的“赶”的计算顺序。

Claims (1)

1.一种基于追赶法求解圣维南方程组的树状河网智能搜索方法,其特征在于,包括以下步骤:
1)准备阶段;在搜索开始前,进行三个方面的前期准备工作,包括:河网概化、有向图编码、邻接矩阵生成;具体步骤如下:
1-1)河网概化;
将需要进行搜索的树状河网概化为由节点N和边E组成的有向图G,记为G=(N,E);有向图G中,一条带有箭头的边代表一个河段,箭头的指向为河段水流的方向,每一条边两端都连接着一个节点,节点分为源节点SN、内节点IN和终节点EN三类;
1-2)有向图编码;
将步骤1-1)得到的有向图G中的节点从0开始用自然数进行编码,将边所对应的两端节点的编码进行组合形成边的编码,有向图中边上箭尾所对应的节点编码在前,箭头所指向的节点编码在后;
1-3)邻接矩阵生成;
编码后的节点用邻接矩阵aij表示节点i和节点j的到达关系,i和j表示两个节点的编码:如果节点i和节点j为同一条边ij上的两个节点,且节点i到节点j的方向与箭头方向同向,则表示节点i能够达到节点j,记为邻接矩阵aij=1,否则为0;节点本身不能到达自己本身,即aii≡0;利用各节点的拓扑关系,构建出河网的邻接矩阵,用邻接矩阵aij表示节点i和节点j的到达关系如式(1)所示:
2)搜索路径计算阶段,具体包括以下步骤:
2-1)计算每个节点的出度和入度;
LD(i)表示节点i节的出度,ED(i)表示节点i的入度;如果某一节点j能够到达i,即aji=1,则节点i的入度ED(i)增加1;如果某一节点i能够达j(j=0,1,…,n),即aij=1,则节点i的出度LD(i)增加1;遍历所有节点,计算得到每个节点的出度和入度;
2-2)对节点分类;
设置SN源节点、IN内节点、EN终节点和Sort四个集合;将满足ED(i)=0且LD(i)=1的所有节点放入SN集合中;将满足ED(i)>0且LD(i)=1的所有节点放入IN集合中;将满足ED(i)>0且LD(i)=0的所有节点放入EN集合中;Sort集合用于存放搜索得到的边的编码;
2-3)在SN集合中任意选取一个节点i作为搜索的起始节点,并执行步骤2-4);
2-4)根据条件对步骤2-3)选定的起始节点进行判定,选择执行相应的步骤:如果搜索起始节点i∈SN或i∈IN且ED(i)=0时,则执行步骤2-5);如果搜索起始节点i∈IN且ED(i)≥1或节点i∈EN且ED(i)>0时,则执行步骤2-6);如果搜索起始节点i∈EN且ED(i)=0时,则执行步骤2-8);
2-5)循环遍历所有节点,搜索起始节点i能够到达的节点m,直到首次搜索到aim=1时则循环终止;如果搜索到的节点m∈EN且ED(m)=0,则无节点返回,将边mi所对应的编码放入Sort集合中,并执行步骤2-8);如果搜索到的节点m∈IN且ED(m)≥1或者m∈EN且ED(m)≥1,则将邻接矩阵aim置为0,同时将节点m的入度ED(m)减1,并将边im所对应的编码放入Sort集合中,返回节点m,执行步骤2-7);
2-6)循环遍历所有节点,搜索能够达到搜索起始节点i的节点,直到首次搜索到节点k且aki=1时则循环终止;返回节点k,执行步骤2-7);
2-7)将返回得到的节点作为新的搜索起始点,重新返回步骤2-4);
2-8)搜索结束,返回Sort集合,Sort集合中按先后顺序依次排列所得到的边的编码,即为搜索得到的路径。
CN201710102631.8A 2017-02-24 2017-02-24 基于追赶法求解圣维南方程组的树状河网智能搜索方法 Pending CN107016048A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710102631.8A CN107016048A (zh) 2017-02-24 2017-02-24 基于追赶法求解圣维南方程组的树状河网智能搜索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710102631.8A CN107016048A (zh) 2017-02-24 2017-02-24 基于追赶法求解圣维南方程组的树状河网智能搜索方法

Publications (1)

Publication Number Publication Date
CN107016048A true CN107016048A (zh) 2017-08-04

Family

ID=59440469

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710102631.8A Pending CN107016048A (zh) 2017-02-24 2017-02-24 基于追赶法求解圣维南方程组的树状河网智能搜索方法

Country Status (1)

Country Link
CN (1) CN107016048A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110532506A (zh) * 2019-08-26 2019-12-03 上海交通大学 一种基于图论的大型客机辅助冷却系统仿真建模方法
CN110719106A (zh) * 2019-09-27 2020-01-21 华中科技大学 一种基于节点分类排序的社交网络图压缩方法及系统
CN117312608A (zh) * 2023-08-14 2023-12-29 河海大学 一种基于深度优先搜索的河网节点简并方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110532506A (zh) * 2019-08-26 2019-12-03 上海交通大学 一种基于图论的大型客机辅助冷却系统仿真建模方法
CN110532506B (zh) * 2019-08-26 2023-05-12 上海交通大学 一种基于图论的大型客机辅助冷却系统仿真建模方法
CN110719106A (zh) * 2019-09-27 2020-01-21 华中科技大学 一种基于节点分类排序的社交网络图压缩方法及系统
CN117312608A (zh) * 2023-08-14 2023-12-29 河海大学 一种基于深度优先搜索的河网节点简并方法
CN117312608B (zh) * 2023-08-14 2024-06-04 河海大学 一种基于深度优先搜索的河网节点简并方法

Similar Documents

Publication Publication Date Title
CN110717251B (zh) 一种考虑多要素的分布式水文模型子流域划分方法
CN107016048A (zh) 基于追赶法求解圣维南方程组的树状河网智能搜索方法
CN105721279B (zh) 一种电信网络用户的交往圈挖掘方法及系统
CN103150163A (zh) 一种基于MapReduce模型的并行关联方法
CN103426042A (zh) 社交网络的分组方法及系统
Klein A subset spanner for planar graphs, with application to subset TSP
CN108614915B (zh) 基于情景驱动的水文模型自由组建策略方法
US20160055660A1 (en) Apparatus and method for generating a shortest-path tree in a graph
CN104239965B (zh) 一种基于重叠社团划分的大规模道路网络双层路由方法
CN109271562A (zh) 通行费用确定方法、路网节点关系模型构建方法及装置
CN106981194B (zh) 一种高速路网关键路段的识别方法
CN109978710A (zh) 基于k-核迭代因子和社区隶属度的重叠社区划分方法
CN107315813A (zh) 一种stroke特征约束的树状河系层次关系构建及简化方法
Ploussard et al. A search space reduction method for transmission expansion planning using an iterative refinement of the DC load flow model
CN105932673A (zh) 一种含大规模新能源的大型互联电网的外网等值方法
CN113808424A (zh) 基于双向Dijkstra的城市路网K条最短路径的获取方法
CN103365975B (zh) 一种考虑数据起源的基于SP树的Web服务匹配方法及模型
CN114169580B (zh) 一种区域枢纽的交通等时圈计算方法
CN103428087B (zh) 采用循环深度优先遍历的最长路预置保护p圈生成方法
CN105320647B (zh) 一种基于文字交互行为的用户特征建模方法
CN109472072B (zh) 基于河流模拟的季节性河流与地下水间相互作用预测方法
CN104462829B (zh) 空间推进求解中的复杂多区网格的处理方法
CN107018074B (zh) 一种基于扁平化的网络连通路径快速搜索方法
CN102684912B (zh) 基于网络势能的社区结构挖掘方法
Diniz et al. An exact multi-plant hydro power production function for mid/long term hydrothermal coordination

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170804

WD01 Invention patent application deemed withdrawn after publication