最短路径问题实验报告

最短路径问题实验报告
最短路径问题实验报告

徐州工程学院

管理学院实验报告

实验课程名称:最短路径问题

实验地点:南主楼七楼机房经济管理实验中心 2015 年 5 月至 2015 年 6 月

实验报告

实验项目:B15201302

实验学时:8 学时

实验日期:2015/5---2015/6

实验要求:通过对求最短路径方法的梳理,运用其中一种方法解决一个实际问题

实验内容:案例分析最短路径

几种算法的比较

蚁群算法

蚁群算法的基本原理可大致描述如下。蚂蚁属于群居昆虫,个体行为极其简单,而群体行为却相当复杂。相互协作的一群蚂蚁很容易找到从蚁穴到食物源的最短路径,而单个蚂蚁则不能。人们通过大量的研究发现,蚂蚁之所以可以做到这一点,是因为蚂蚁个体之间是通过在其所经过的路径上留下一种可称之为信息素的物质来进行信息传递。蚂蚁可以嗅到这种信息素,而且可以根据信息素的浓度来指导自己对前进方向的选择。同时,该信息素会随着时间的推移逐渐挥发掉,于是路径的长短及该路径上通过的蚂蚁的多少就对残余信息素的强度产生影响。反过来信息素的强弱又指导着其它蚂蚁的行动方向。因此,某一路径上走过的蚂蚁越多,则后来者选择该路径的概率就越大。这就构成了蚂蚁群体行为表现出的一种信息正反馈现象。蚂蚁个体之间就是通过这种信息交流达到快速找到食物源或蚁穴的。蚁群算法就是受这种行为启发,以人工蚂蚁模拟真实蚂蚁行为来求解组合优化问题,到目前为止,人们已经用它成功地解决了TSP、JSP等许多组合优化问题。

用基本蚁群算法(基于Ant quantity模型)求解最短路径问题的过程就是:将m只蚂蚁放到起点s处,每只蚂蚁将根据一定的概率选择下一个与此交叉点直接相邻的交叉点。蚂蚁k从s点出发,按照选择策略,从与s相关联的边的集合中,选择一条边。然后,按照一定的方式更新这条边上的信息素浓度。接着再从这条边的另一节点T开始,从与T相关联的边的集合中,选择另一条边。以此类推,直到搜索到终点D。于是,蚂蚁k得到一个从s到D的解。直到所有的m只蚂蚁都搜索完毕后,得到m个解(包括重复的)。继续迭代直到满足停止条件,停止条件为最大迭代次数。在所求得的所有解中,值最小的解为所求的全局最优解,即最短路径的长度。

遗传算法

遗传算法抽象于生物体的进化过程,是一种通过全面模拟自然选择和遗传机制,形成具有“生成+检验”特征的搜索算法.遗传算法以编码空间代替问题的参数空间,以适应度函数为评价依据,以编码群体为进化基础,以对群体中个体位串的遗传操作实现选择和遗传机制,建立起一个迭代过程。在这一过程中,通过随机重组编码位串中重要的基因,使新一代的位串集合优于老一代的位串集合,群体的个体不断进化,逐渐接近最优解,最终达到求解问题的目的。遗传算法的运行过程为一个典型的迭代过程,其必须完成的工作内容和基本步骤如下:

(1)选择编码策略,把参数集合x和域转换为位串结构空间S;

(2)定义适应值函数()

f x;

(3)确定遗传策略,包括选择群体大小n ,选择、交叉、变异方法,以及确定交叉概率c P 、变异概率m P 等遗传参数; (4)随机初始化生成群体P ;

(5)计算群体中个体位串解码后的适应值()f x ;

(6)按照遗传策略,运用选择、交叉和变异算子作用于群体,形成下一代群体;

(7)判断群体性能是否满足某一指标,或者已完成预定迭代次数,不满足则返回步骤6,或者修改遗传策略再返回步骤6。

通过比较遗传算法属于智能算法能切合实际的解决选址问题。因此下面对遗传算法进行详细说明、应用。

Floyd

算法

Floyd 算法主要用于计算所有节点对之间的最短路Floyd 算法是通过权矩阵计算来

实现的一种方法,其主要思想是从代表任意两个节点i V 到j V 距离的带权邻接矩阵(0)D 开始,首先计算(1)D ,即计算i V 到j V 经过一次经转的所有可能路径,经过比较后选出最短路,代替(0)D 中对应的路径,迭代列出距离矩阵(1)D ,(1)D 中各元素表示通过一次迭代后网络中任意两点间最短路,也即网络中任意两点之间直接到达或只经过一个中间点时的最短路.在此基础上依次计算(2)(3)()(),,,k k D D D D 中对应的元素表示任意两点间不经过中间点或最多允许经过21k -个中间点时的最短路。当(1)()k k D D +=时,表明得到的带权邻接矩阵()k D 就反映了所有顶点对之间的最短距离信息,成为最短距离矩阵.其算法(记为算法1)如下:

第一步,作初始距离矩阵(0)(0)

()ij D d =,其中:

(0),,(,1,2,3,),ij ij W i j d i j n i j ?==?∞? 相邻对,,不相邻或无路时

第二步,构造迭代矩阵()(0)

()k ij D d =,其中:

{}()(1)(1)min |k k k ij ir ri d d d --=+ r=1,2,,n;

第三步,若(1)()k k D +=D,迭代终止.否则,返回第二步。

对Floyd 算法进行分析,不难发现在不含负回路的网络中存在以下问题:

(1)在计算两点i V 和j V 之间最短路时,每次都要计算n 次加法,且插入的中间节点

r V 很明显不能使路长变短,降低了计算效[1]率;

(2)若要找出点i V 、j V 间的最短路,则要回头去查是如何计算出()k ij V 的,不妨设

()(1)(1)k k k ij il lj

d d d --=+,同样再去查(1)

k il d -、(1)k lj d -是如何算出的,…,一直查到(0)D 中的元素为止,才能找出所求最短路.显然上述寻找最短路径的方法不直观、比较繁琐.基于这两点

不足,本文在不含负回路的网络中对Floyd 算法进行了优化,不仅简化了计算量,而且使得在寻找最短路径时更简洁方便。

既然原始的Floyd 算法存在一些问题,则本文对Floyd 算法进行优化具体思路如下:

对于问题(1),构造迭代矩阵()()

()k k ij D d =,计算两点i V 和j V 之间最短路时,对待插入

的节点r V 先进行路长比较,如果(1)(1)k k ir ij d d --≥或(1)(1)

k k ri ij

d d --≥,则说明插入节点r V 后, 点

i V 经过节点r V 到达点j V 的路长不会比原来的短,于是不用再计(1)1

k k ir rj

d d --+,进入下一个节点的搜索。

对于问题(2),构造一个序号矩阵()()k k

ij A a =,(0,1,)k = ,记录算法第二步中第k次迭代插入节点的情况.优化后的Floyd 算法(记为算法2)如下:

第一步,作初始距离矩阵(0)(0)()ij D d =和序号矩阵(0)0)()ij A a =(,其中:

(0)

,,(,1,2,3,),ij ij W i j d i j n i j ?==?∞?

相邻对,,不相邻或无路时,

(0)

0,,,1,2,,,ij i j a i j n i j ?==?Φ? 相邻时,()

,不相邻或无路

, 此时距离矩阵(0)D 中的元素(0)

ij d 表示任意两点i V 、j V 不经过其它节点的路长。

第二步,构造迭代矩阵()()()k k ij D d =和序号矩阵(0))()k ij A a =(。

① 对于迭代矩阵()k D 的元素()k ij d : r 从1到n ,且,r i j ≠时,如果(1)(1)k k ir ij

d d --≥或(1)(1)k k ri ij d d --≥,说明插入点r V 后路长(1)

k ij d -不会变短,此时无须计算(1)1k k ir rj d d --+。否则{}()(1)(1)(1)

min ,k k k k ij ij ir rj d d d d ---=+。

② 相应地,序号矩阵()k A 的各元素变化为:若()(1)(1)k k k ij il lj d d d --=+,且(1)(1)k k ir rj

d d --<,则记下点l V ,并在序号矩阵中()k A 对应的元素)

k ij a (变为:

{}()(1)(1)

,,k k k ij il l lj a a V a --=。

表明经过该次迭代后从节点i V 出发到节点j V 的最短路长经过节点l V 路长变短.否则,

()(1)

k k ij ij

a a -=。 第三步,若(1)()k K D D ++,迭代终止.否则,返回第二步。

针对以上算法本文用改进后的Floyd 算法利用Matlab 编程对实例进行试验。

实例

已知网络如图1所示,计算所有节点之间的最短路。

图1

由图可以得到个点间的距离矩阵:

5

1234

12345013012520410230v v v v v v v v v v ∞∞????∞????∞∞??∞∞????∞∞∞??

列如求节点1v 到节点5v 之间的最短路径和最短距离可用Matlab 编程Floyd 算法代码如下:

function [D,R]=floyd(a) n=size(a,1); D=a

for i=1:n for j=1:n R(i,j)=j; end end R

for k=1:n for i=1:n for j=1:n

if D(i,k)+D(k,j)

可求得节点1v 到节点5v 之间的最短路径为1245v v v v →→→最短距离为5。

参考文献

[1]林华珍,周根贵.求解最短路问题的一种优化矩阵算法[J].长江大学学报:自然科学版(理工卷), 2007 4 (4 ): 14-16

实验总结

采用优化的Floyd算法,由于在计算路长之前先进行了比较,那些不和节点对直接相连的插入点、不能使路长变短以及和节点对直接相连的插入点的路长比节点对路长还要长的节点,在计算的过程中没有参与计算,因此,大大减少了计算量,且在最短路计算的同时使用序号矩阵记下使路径变短的节点,这样使得在寻找最短路径时更简单、方便、直接.因此,优化的Floyd算法计算量小,寻找最短路径时直观并切实有效。

实验三 最短路径的算法(离散数学实验报告)

实验3:最短路径算法 一、实验目的 通过本实验的学习,理解Floyd(弗洛伊得)最短路径算法的思想 二、实验内容 用C语言编程实现求赋权图中任意两点间最短路径的Floyd算法,并能对给定的两结点自动求出最短路径 三、实验原理、方法和手段 1、Floyd算法的原理 定义:Dk[i,j] 表示赋权图中从结点vi出发仅通过v0,v1,┉,vk-1中的某些结点到达vj的最短路径的长度, 若从vi到vj没有仅通过v0,v1,┉,vk-1 的路径,则D[i,j]=∝即 D-1[i,j] 表示赋权图中从结点vi到vj的边的长度,若没有从结点vi到vj的边,则D[i,j]=∝ D0[i,j] 表示赋权图中从结点vi到vj的”最短”路径的长度, 这条路上除了可能有v0外没有其它结点 D1[i,j] 表示赋权图中从结点vi到vj的”最短”路径的长度, 这条路上除了可能有v0,v1外没有其它结点 ┉┉┉ 根据此定义,D k[i,j]=min{ D k-1[i,j] , D k-1[i,k-1]+D k-1[k-1,j] } 定义:path[i,j]表示从结点vi到vj的“最短”路径上vi的后继结点 四、实验要求 要求输出每对结点之间的最短路径长度以及其最短路径 五、实验步骤 (一)算法描述 Step 1 初始化有向图的成本邻矩阵D、路径矩阵path 若从结点vi到vj有边,则D[i,j]= vi到vj的边的长度,path[i,j]= i; 否则D[i,j]=∝,path[i,j]=-1 Step 2 刷新D、path 对k=1,2,┉n 重复Step 3和Step 4 Step 3 刷新行对i=1,2,┉n 重复Step 4 Step 4 刷新Mij 对j=1,2,┉n 若D k-1[i,k]+D k-1[k,j]

实验报告

算法与数据结构 实验报告 系(院):计算机科学学院 专业班级:软工11102 姓名:潘香杰 学号: 201104449 班级序号: 18 指导教师:詹泽梅老师 实验时间:2013.6.17 - 2013.6.29 实验地点:4号楼5楼机房

目录 1、课程设计目的...................................... 2、设计任务.......................................... 3、设计方案.......................................... 4、实现过程.......................................... 5、测试.............................................. 6、使用说明.......................................... 7、难点与收获........................................ 8、实现代码.......................................... 9、可改进的地方.....................................

算法与数据结构课程设计是在学完数据结构课程之后的实践教学环节。本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。 一.设计目的 1.提高数据抽象能力。根据实际问题,能利用数据结构理论课中所学到的知识选择合适的逻辑结构以及存储结构,并设计出有效解决问题的算法。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 3.初步了解开发过程中问题分析、整体设计、程序编码、测试等基本方法和技能。二.设计任务 设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。内容如下: ①创建无向图的邻接表 ②无向图的深度优先遍历 ③无向创建无向图的邻接矩阵 ④无向图的基本操作及应用 ⑤图的广度优先遍历 1.有向图的基本操作及应用 ①创建有向图的邻接矩阵 ②创建有向图的邻接表 ③拓扑排序 2.无向网的基本操作及应用 ①创建无向网的邻接矩阵 ②创建无向网的邻接表 ③求最小生成树 3.有向网的基本操作及应用 ①创建有向网的邻接矩阵 ②创建有向网的邻接表 ③关键路径 ④单源最短路径 三.设计方案 第一步:根据设计任务,设计DOS菜单,菜单运行成果如图所示:

简化的路径损耗模型

简化的路径损耗模型 信号传播的复杂性使得用一个单一的模型准确描述信号穿越一系列不同的环境的路径损耗的特征非常困难。准确的路径损耗模型可以通过复杂的射线追踪模型或者经验测量获得,其中必须满足严格的系统规范,或者基站和接入点的布局必须在最佳的位置。然而,出于对不同系统设计的通用权衡分析,有时候最好的方式是用一个简单的模型抓住信号传播的本质特征,而不是求助于复杂的路径损耗模型,后者也仅仅是真实的信道的近似。这样,下面这个路径损耗(以距离为自变量的函数)的简单模型成为系统设计的常用方法。 (2.20) 如果用dB衰减的形式表达,则为: (2.21) 在这个近似公式中,K是无单位常数,取值取决于传播、天线参数和阻塞引起的平均衰减,d0是天线远场的参考距离,γ是路径损耗指数。由于在天线近场存在散射现象,模型(2.20)通常只适用于传播距离d>d0,其中室内环境下假设d0的范围是1-10米,室外环境下假设d0的范围是10-100米。K的值小于1,而且通常被设定为在距离d0处的自由空间路径损耗(这个设定已经被经验测试数据证实): (2.22) 或者K也可以由在d0处的测量数据决定,并且进行进一步的优化,以便模型或者经验数据之间的均方误差(MSE)能够最小化。γ的值取决于传播环境:对于近似遵循自由空间模型或者双路径模型的传播来说,γ值相应地取为2—4。在更复杂的环境中,γ值可以通过拟合经验测试数据的最小均方误差(MMSE,Mimimum Mean Square Error)来取得(如下面的例子所示)。或者γ值也可以由考虑了载频和天线高度的经验模型(如Hata模型、Okumura模型等)来取得。表格2.1概括了900MHz下不同的室内环境和室外环境下的γ值。如果载频更高,则路径损耗指数γ也会更高。主要指出的是,室内环境下γ的取值范围变化比较大,这是由地板、隔墙和物体引起的信号衰减导致的。

MATLAB实验报告,遗传算法解最短路径以及函数最小值问题讲解

硕士生考查课程考试试卷 考试科目:MATLAB教程 考生姓名:考生学号: 学院:专业: 考生成绩: 任课老师(签名) 考试日期:20 年月日午时至时

《MATLAB 教程》试题: A 、利用MATLA B 设计遗传算法程序,寻找下图11个端点的最短路径,其中没有连接的端点表示没有路径。要求设计遗传算法对该问题求解。 a d e h k B 、设计遗传算法求解f (x)极小值,具体表达式如下: 3 21231(,,)5.12 5.12,1,2,3 i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 C 、利用MATLAB 编程实现:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行,随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何乘船渡河的大权掌握在商人手中,商人们怎样才能安全渡河? D 、结合自己的研究方向选择合适的问题,利用MATLAB 进行实验。 以上四题任选一题进行实验,并写出实验报告。

选择题目: A 一、问题分析(10分) 1 4 10 11 如图如示,将节点编号,依次为 1.2.3.4.5.6.7.8.9.10.11,由图论知识,则可写出其带权邻接矩阵为: 0 2 8 1 500 500 500 500 500 500 500 2 0 6 500 1 500 500 500 500 500 500 8 6 0 7 500 1 500 500 500 500 500 1 500 7 0 500 500 9 500 500 500 500 500 1 500 500 0 3 500 2 500 500 500 500 500 1 500 3 0 4 500 6 500 500 500 500 500 9 500 4 0 500 500 1 500 500 500 500 500 2 500 500 0 7 500 9 500 500 500 500 500 6 500 7 0 1 2 500 500 500 500 500 500 1 500 1 0 4 500 500 500 500 500 500 500 9 2 4 0 注:为避免计算时无穷大数吃掉小数,此处为令inf=500。 问题要求求出任意两点间的最短路径,Floyd 算法采用的是在两点间尝试插入顶点,比较距离长短的方法。我思考后认为,用遗传算法很难找到一个可以统一表示最短路径的函数,但是可以对每一对点分别计算,然后加入for 循环,可将相互之间的所有情况解出。观察本题可发现,所有节点都是可双向行走,则可只计算i 到j 的路径与距离,然后将矩阵按主对角线翻折即可得到全部数据。 二、实验原理与数学模型(20分) 实现原理为遗传算法原理: 按所选择的适应度函数并通过遗传中的复制、交叉及变异对个体进行筛选,使得适应度高的个体被保留下来,组成新的群体,新的群体既继承了上一代的信息,又优于上一代。这样周而复始,群体中个体适应度不断提高,直到满足一定的条件。 数学模型如下: 设图G 由非空点集合12{,...}n V V V V = 和边集合12{,...}m E e e e = 组成,其中121221(,)e ,P ,)(P ,P ), i i i i i i i i e P P E P =∈≠且若(则G 为一个有向图; 又设i e 的值为i a ,12{,...},m A a a a = 故G 可表示为一个三元组{,,}G P E A = 则求最短路径的数学模型可以描述为:

甘特图实验报告doc

甘特图实验报告 篇一:Project实验报告 Project实验报告 朱曦朦 学号:XX306202412信管1001 实验目的: 通过做出一个标准的实验,了解project的基本运用方法和实验步骤,掌握设定项目的开始日期的基本方法。完成资源的优化配置,实现资源的充分利用。并对工期做一个初步的调整, 提高估计工期的精确度,掌握PERT的方法,实现整个过程(本文来自:https://www.360docs.net/doc/9d8958283.html, 小草范文网:甘特图实验报告)的最优配置。对甘特图,关键路径等基本定义有一个初步的了解,初步学习到PROJECT的基本内容。 一;定义起始时间: 在定义项目中进行时间的确认: 一直保存至第三步,进行初始化的设定。 二复制新产品模板. 三调整资源的最大单位 修改资源“产品工程设计”的最大单位为200%,并增加资源“生产线”(工时资源,100%,用于完成生产任务,原来工程师需要5小时完成的任务,生产线只要1小时就能完

成,但必须同时配1名产品工程设计进行监控)。 通过视图进入资源工作表,将“产品工程设计”的最大单位改为 200% 在甘特图中未找到工程师,所以未对其进行修改。 三.为了提高估计工期的精确度,采用PERT技术规划项目工期(选取2到3个任务进行规划)。 设置PERT权重 设置后观察得到PERT项工作表。 选取2,3个项目后确定乐观工期,预期工期,悲观工期,通过计算PERT得出结论。 四.分析项目工期由哪些任务决定,确定压缩工期的方法。通过格式中的甘特图向导,对关键路径进行确认,从而得到确定项目工期的任务,由红线显示。编号为2,3,5,6,8,9,10, 11 对项目进行优化,可以通过2种路径,一是调整关键路径的工期,将其缩短。二是删除原有的链接关系,将后面的工期开始时间提前,如下图所示。 篇二:MS Project 上机实验报告 MS Project 上机实验报告 一、工程概况

《数据结构课程设计》最短路径问题实验报告

《数据结构课程设计》最短路径问题实验报告

目录 一、概述 0 二、系统分析 0 三、概要设计 (1) 四、详细设计 (5) 4.1建立图的存储结构 (5) 4.2单源最短路径 (6) 4.3任意一对顶点之间的最短路径 (7) 五、运行与测试 (8) 参考文献 (11) 附录 (12)

交通咨询系统设计(最短路径问题)一、概述 在交通网络日益发达的今天,针对人们关心的各种问题,利用计算机建立一个交通咨询系统。在系统中采用图来构造各个城市之间的联系,图中顶点表示城市,边表示各个城市之间的交通关系,所带权值为两个城市间的耗费。这个交通咨询系统可以回答旅客提出的各种问题,例如:如何选择一条路径使得从A城到B城途中中转次数最少;如何选择一条路径使得从A城到B城里程最短;如何选择一条路径使得从A城到B城花费最低等等的一系列问题。 二、系统分析 设计一个交通咨询系统,能咨询从任何一个城市顶点到另一城市顶点之间的最短路径(里程)、最低花费或是最少时间等问题。对于不同的咨询要求,可输入城市间的路程、所需时间或是所需费用等信息。 针对最短路径问题,在本系统中采用图的相关知识,以解决在实际情况中的最短路径问题,本系统中包括了建立图的存储结构、单源最短问题、对任意一对顶点间最短路径问题三个问题,这对以上几个问题采用了迪杰斯特拉算法和弗洛伊德算法。并未本系统设置一人性化的系统提示菜单,方便使用者的使用。

三、概要设计 可以将该系统大致分为三个部分: ①建立交通网络图的存储结构; ②解决单源最短路径问题; ③实现两个城市顶点之间的最短路径问题。

迪杰斯特拉算法流图:

project项目管理实验报告

计算机辅助项目管理 课程报告 班级: 学号: 姓名: 指导教师: 完成日期: -

目录 1、项目概况 (2) 1.1项目简介 (3) 1.2项目任务关系、固定成本及资源需求量 (2) 1.3可用资源 (2) 2、项目的实施计划 (3) 2.1初始计划 (3) 2.2初始计划的调整和优化 (5) 3、跟踪监控 3.1第一轮监控 (7) 3.2第二轮监控 (21) 3.3第三轮监控 (25) 3.4第四轮监控 (25) 4、项目完工总结分析报告 4.1总结分析报告 (26) 4.2分析实施和管理的成效 (26) 4.3目标实现措施的分析 (26) 5.学习思考总结 5.1问题思考 (27) 5.2问题分析与总结 (28) PROJECT项目管理课程报告

1、项目概况 1.1项目简介 项目的主要工作是维修某主要道路下一段长约1公里的供水管道,市政局要求电力部门配合施工,同时铺设一条地下电缆,以增加该道路两侧的用电用户。由于该项目是在现有道路上开挖,故市政局决定在回填后顺便铺设新的混凝土路面。为此,专门成立了一个项目管理办公室,以管理、协调该项目。项目内容包括:供水工程、电力工程和道路工程。整个项目从2016年7月1日提交预算报批为开始,市政局希望将项目施工对公众造成的影响降至最低,故希望该项目能在2016年10月底竣工并恢复交通。 1.2项目任务关系、固定成本及资源需求量 项目各项任务逻辑关系及固定成本(设备费、材料费等)、资源需求量如表1。 表1 工程工艺关系、固定成本及所需资源表 编号工序名称固定 成本 紧前 工序 资源需求 技工壮工 人数工日人数工日 1 道路及配套工程 2 准备工作 3 预算报批5000 4 对外公告1500 3 5 开走路上停留 的车辆 2000 4 3 6 6 开挖槽沟50000 5 15 200 7 供水工程5000 8 维修水管50000 6 12 200 35 500 9 压力试验1500 8 5 10 10 电力工程 11 支设新电杆15000 5 5 50 10 75 12 铺设电缆50000 6 8 50 25 150 13 吊装变压器75000 11,12,16 15 100 25 250 14 电力入户25000 13 20 240 20 240 15 道路工程25000 16 剪除树枝1500 5 6 12 17 复铺路面150000 9,12 20 300 30 420 18 恢复交通14,17 预算报批需1周,对外公告需2周时间。 1.3可用资源

分支限界法实现单源最短路径问题

实验五分支限界法实现单源最短路径 一实验题目:分支限界法实现单源最短路径问题 二实验要求:区分分支限界算法与回溯算法的区别,加深对分支限界法的理解。 三实验内容:解单源最短路径问题的优先队列式分支限界法用一极小堆来存储活结点表。其优先级是结点所对应的当前路长。算法从图G的源顶点s和空优先队列开始。 结点s被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。这个结点的扩展过程一直继续到活结点优先队列为空时为止。 四实验代码 #include using namespace std; const int size = 100; const int inf = 5000; //两点距离上界 const int n = 6; //图顶点个数加1 int prev[n]; //图的前驱顶点 int dist[] = {0,0,5000,5000,5000,5000}; //最短距离数组 int c[n][n] = {{0,0,0,0,0,0},{0,0,2,3,5000,5000}, //图的邻接矩阵 {0,5000,0,1,2,5000},{0,5000,5000,0,9,2}, {0,5000,5000,5000,0,2},{0,5000,5000,5000,5000,0}}; const int n = 5; //图顶点个数加1 int prev[n]; //图的前驱顶点 int dist[] = {0,0,5000,5000,5000}; int c[][n] = {{0,0,0,0,0},{0,0,2,3,5000},{0,5000,0,1,2},{0,5000,5000,0,9}, {0,5000,5000,5000,0}};

最短路径实验报告

一、实验目的 学习掌握图的存储结构 利用最短路径算法,通过java编程实现最短路径输出。 二、实验环境 Eclipse平台 三、实验过程 最短路径算法问题是计算机科学、运筹学、地理信息系统和交通诱导、导航系统等领域研究的一个热点。传统的最短路径算法主要有Floyd算法和Dijkstra算法。Floyd 算法用于计算所有结点之间的最短路径。Dijkstra算法则用于计算一个结点到其他所有结点的最短路径。本程序利用Dijkstra算法用java语言实现最短路径的可视化。 流程: 画无向邻接矩阵邻接矩阵初始化求取最短路径 Java文件如下 M ain.java 文件: import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.StringTokenizer; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.TitledBorder; public class Main { public static void main(String args[]) { new UI("最短路径"); } } @SuppressWarnings("serial") class UI extends JFrame implements ActionListener, ItemListener { JFrame frame; JButton button;

关键路径的查找实验报告

中国矿业大学矿业工程学院 实验报告 课程名称计算机软件设计基础 姓名 xxxx 班级采矿10-8班学号 xxxxx 日期 2012年10月 成绩教师 xxxx

3.2算法步骤:

(1)输入e条弧,建立AOE网的存储结构。 (2)从源点v1出发,令ve(1)=0,求ve(j),2<=j<=n。 (3)从汇点vn出发,令vl(n)=ve(n),求vl(i) 1<=i<=n-1。 (4)根据各顶点的ve和vl值,求每条弧s(活动)的最早开始时间e(s)和最晚开始时间l(s),其中e(s)=l(s)的为关键活动。 总结 首先,关于程序方面,我发现即使对设计思路有了眉目,知道了所要用到的数据结构、用邻接表来存储AOE-网、建立栈来求拓扑序列、输出的拓扑序列的个数少于节点数则有回路等等,要把这些方法写成函数代码,其实还是一件非常不容易的事情。再加上要完善设计思路,构造整个程序框架在内,都是一件工作量非常大的工作。 在处理程序代码的时候,有两个问题始终解决不了。一是程序输入时只能输入整形数据,而非整形的输入则会导致程序异常停止,但是因为整形的输入方式已贯穿整个程序,若要修改只能另外重做整个程序,所以暂不考虑修改,而打算做一个判错系统,判断若非整形的输入则报错;二是第一种错误的解决方案未能成功实行,于网路上搜索到了几种判断是否为整形数据的程序代码,但将其修改融合到求关键路径的程序中,虽然没有错误可以运行,但是却不能正确的报错。 于是,在尝试多种方案却仍不成功的前提下,我只好选择加上提示语,即:printf("请输入某项目的信息,并请用整形数字表示(格式:弧头,

单源最短路径 贪心算法

实验三单源最短路径 一、实验目的及要求 掌握贪心算法的基本思想 用c程序实现单源最短路径的算法 二、实验环境 Window下的vc 2010 三、实验内容 1、有向图与单源点最短路径 2、按路径长度非降的次序依次求各节点到源点的最短路径 3、Dijkstra算法 四、算法描述及实验步骤 设给定源点为Vs,S为已求得最短路径的终点集,开始时令S={Vs} 。当求得第一条最短路径(Vs ,Vi)后,S为{Vs,Vi} 。根据以下结论可求下一条最短路径。 设下一条最短路径终点为Vj ,则Vj只有:源点到终点有直接的弧 ;从Vs 出发到Vj 的这条最短路径所经过的所有中间顶点必定在S中。即只有这条最短路径的最后一条弧才是从S内某个顶点连接到S外的顶点Vj 。 若定义一个数组dist[n],其每个dist[i]分量保存从Vs 出发中间只经过集合S中的顶点而到达Vi的所有路径中长度最小的路径长度值,则下一条最短路径的终点Vj必定是不在S中且值最小的顶点, 即:dist[i]=Min{ dist[k]| Vk∈V-S } 利用公式就可以依次找出下一条最短路径。 在程序中c[][]表示带权邻接矩阵, dist[]表示顶点到源点的最短路径, p[]记录顶点到源点最短路径的前驱节点, u源点,函数Way是递归的构造出最短路径的次序。 五、实验结果 程序执行的结果: 六、源代码 #include #include using namespace std;

#define MAX 999 void getdata(int **c,int n) { int i,j; int begin,end,weight; for (i=1;i<=n;i++) { for (j=1;j<=n;j++) { if(i==j) c[i][j]=0; else c[i][j]=MAX; } } do { cout<<"请输入起点终点权值(-1退出):"; cin>>begin; if(begin==-1) break; cin>>end>>weight; c[begin][end]=weight; } while(begin!=-1); } void Dijkstra(int n,int v ,int *dist,int *prev,int **c) { bool s[MAX]; int i,j; for (i=1;i<=n;i++) { dist[i]=c[v][i]; //从源点到各点的值 s[i]=false; if(dist[i]==MAX) prev[i]=0; //最大值没有路径 else prev[i]=v; //前驱为源点 } dist[v]=0;s[v]=true; for (i=1;i<=n;i++) { int temp=MAX; int u=v; for(j=1;j<=n;j++) if((!s[j])&&(dist[j]

最短路径实验报告

云南财经大学信息学院学生综合性与设计性实验报告 (2013—2014 学年第 2 学期) 周次:第7周日期:2014年 4 月 17 日地点: 一、实验内容与目的 1.内容 查看“最短路径.swf”,选择熟悉的程序设计语言定义有向图,根据动画演示求取从有向图任一结点到其他结点的最短路径。 2.实验目的 了解最短路径的概论,掌握求最短路径的方法。 二、实验原理或技术路线(可使用流程图描述) 实验原理:(李燕妮负责设计,周丽琼负责编程) 图是由结点的有穷集合V和边的集合E组成,求最短路径用迪杰斯特拉算法: 1)适用条件&范围: a) 单源最短路径(从源点s到其它所有顶点v); b) 有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E的有向图) c) 所有边权非负(任取(i,j)∈E都有Wij≥0); 2)算法描述: a)初始化:dis[v]=maxint(v∈V,v≠s); dis[s]=0; pre[s]=s; S={s}; b)For i:=1 to n 1.取V-S中的一顶点u使得dis[u]=min{dis[v]|v∈V-S}

2.S=S+{u} 3.For V-S中每个顶点v do Relax(u,v,Wu,v) c)算法结束:dis[i]为s到i的最短距离;pre[i]为i的前驱节点 三、实验环境条件(使用的软件环境) Microsoft Visual C++6.0 四、实验方法、步骤(列出程序代码或操作过程) /*本程序的功能是求图中任意两点间的最短路径*/ #include #include #include #include #define ING 9999 typedef struct ArcCell{ int adj; /*顶点关系类型,用1表示相邻,0表示不相邻*/ }ArcCell,**AdjMatrix; /*邻接矩阵*/ typedef struct type{ char data[3]; /*顶点值*/ }VertexType; typedef struct{ VertexType *vexs; /*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum,arcnum; /*图的顶点数和边数*/ }MGraph; /*初始图*/ void InitGraph(MGraph *G) { int i,nu,mu; printf("\n输入顶点的个数和(边)弧的个数:"); scanf("%d %d",&nu,&mu); G->arcs=(ArcCell **)malloc(nu*sizeof(ArcCell *)); for(i=0;iarcs[i]=(ArcCell *)malloc(nu*sizeof(ArcCell)); G->vexs=(VertexType *)malloc(nu*sizeof(VertexType)); /*分配顶点空间*/ G->vexnum=nu;G->arcnum=mu; /*图的顶点数和边数*/ }

Project实验报告

Project实验报告 朱曦朦 学号:2010306202412 信管1001 实验目的: 通过做出一个标准的实验,了解project的基本运用方法和实验步骤,掌握设定项目的开始日期的基本方法。完成资源的优化配置,实现资源的充分利用。并对工期做一个初步的调整, 提高估计工期的精确度,掌握PERT的方法,实现整个过程的最优配置。对甘特图,关键路径等基本定义有一个初步的了解,初步学习到PROJECT的基本内容。 一;定义起始时间:

在定义项目中进行时间的确认: 一直保存至第三步,进行初始化的设定。二复制新产品模板.

三调整资源的最大单位 修改资源“产品工程设计”的最大单位为200%,并增加资源“生产线”(工时资源,100%,用于完成生产任务,原来工程师需要5小时完成的任务,生产线只要1小时就能完成,但必须同时配1名产品工程设计进行监控)。 通过视图进入资源工作表,将“产品工程设计”的最大单位改为200% 在甘特图中未找到工程师,所以未对其进行修改。

三.为了提高估计工期的精确度,采用PERT技术规划项目工期(选取2到3个任务进行规划)。 设置PERT权重 设置后观察得到PERT项工作表。 选取2,3个项目后确定乐观工期,预期工期,悲观工期,通过计算PERT得出结论。

四.分析项目工期由哪些任务决定,确定压缩工期的方法。通过格式中的甘特图向导,对关键路径进行确认,从而得到确定项目工期的任务,由红线显 示。编号为2,3,5,6,8,9,10,11 的链接关系,将后面的工期开始时间提前,如下图所示。

实验总结: 通过按要求做实验,初步掌握的project的基本方法,但大部分还是按照书本的内容照搬,自己缺乏独立的融会贯通并将只是运用到实际甘特图中,并且,在有一些需要拓展的部分自己还是缺乏想法,没能很好地掌握知识。后面还需要多加练习,对制图还有一定的兴趣,但还是缺乏足够的训练。

3路径损耗模型-ITU

ITU-R P.1238-5建议书 用于规划频率范围在900 MHz到100 GHz内的室内无线电 通信系统和无线局域网的传播数据和预测方法 (ITU-R第211/3号课题) (1997-1999-2001-2003-2005-2007年) 范围 本建议书介绍了在900 MHz 至100 GHz频率范围内的室内传播的指导原则,主要内容如下: –路径损耗模型; –时延扩展模型; –极化和天线辐射图的效应; –发射机和接收机选址的效应; –建材装修和家具的效应; –室内物体移动的效应。 考虑到 a)正在开发将在室内工作的许多短距离(工作范围短于1 km)的个人通信应用; b)正如许多现有产品和热门的研究活动所表明的那样,无线局域网(RLAN)和无线专用交换机(WPBX)需求很旺盛; c)希望设立无线局域网标准,可与无线和有线通信都兼容; d)采用非常低功率的短距离系统在移动和个人环境下提供业务有许多优点; e)在建筑物内的传播特性和在同一区域内许多用户引起的干扰这两方面的知识,对系统的有效设计是非常重要的; f)用于系统初步规划和干扰估算的通用(即与位置无关)模型和用于某些细致评估的定型(或具体地点)模型都是需要的; 注意到 a)ITU-R P.1411建议书为频率范围在300 MHz到100 GHz的室外短距离电波传播提供了指导,并且该建议也应该作为同时存在室内和室外传播条件的那些情况下的参考文件。 建议 1 对工作于900 MHz到100 GHz之间的室内无线电系统的传播特性进行评估时,采用附件1中的资料和方法。

附件 1 1 引言 室内无线电系统的传播预测在某些方面是与室外系统有区别的。跟室外系统中一样,根本目的是保证在所要求的区域内有效覆盖(或在点对点系统情况下保证有可靠的传播路径)和避免干扰,包括系统内的干扰以及其他系统的干扰。然而,在室内情况下,覆盖的范围是由建筑物的几何形状明确地限定的,而且建筑物本身的各边界将对传播有影响。除了一建筑物的同一层上的频率要重复使用外,经常还希望在同一建筑物的各层之间要频率共用。这样就增添了三维干扰问题。最后,距离很短,特别是使用毫米波频率的场合,意味着无线电路径附近环境的微小变化可能会对传播特性有重大的影响。 由于这些因素的复杂性,若要着手室内无线电系统的具体规划,就需要知道特定位置的详细情况,如几何形状、材料、家具、预期的使用模型等。但是,为了进行系统初步规划,必须估计出覆盖该区域内所分布的移动站所需要的基站数目以及要估计与其他业务的可能干扰或系统之间的潜在干扰。对这些系统规划的情况而言,通常必须要有代表该环境中的传播特性的模型。同时,为了完成计算,该模型不应该要求使用者提供许多输入信息。 本附件主要说明了在室内无线电环境中遇到的传输损伤的通用的、与位置无关的模型和定性的建议。如有可能,也给出与位置有关的专用模型。在许多情况下,基本模型可用的数据受限于频率或试验环境。当可以取得更多的数据时,希望将附件中的建议加以扩充。同样,要根据使用这些模型过程中取得的经验来改善这些模型的精度。但是,本附件代表了目前可以使用的最佳建议。 2 室内无线电系统中的传播损伤和质量的度量标准 室内无线电信道的传播损伤主要由下列因素所造成: —来自房间内的物体(包括墙和地板)的反射和物体附近的衍射; —穿过墙、地板和其他障碍物的传输损耗; —高频情况下能量的通道效应,特别时走廊中这个效应更明显; —房间中人和物体的运动,包括在无线电链路的一端或两端可能的运动,而引起的传播损伤如下: —路径损耗——不仅有自由空间损耗,还有由于障碍物以及穿过建筑物材料传输引起的附加损耗,并且由于通道效应,自由空间损耗可能会减小; —路径损耗随时间和空间的变化; —从波的反射分量和衍射分量而引起的多径效应; —由于移动终端的随机位置变化而引起的极化失配。 室内无线通信业务可以由如下特性来表征: —高/中/低数据速率;

单源最短路径问题

实验四单源最短路径问题 一、实验目的: 1、理解分支限界法的剪枝搜索策略; 2、掌握分支限界法的算法柜架; 3、掌握分支限界法的算法步骤; 4、通过应用范例学习动态规划算法的设计技巧与策略; 二、实验内容及要求: 1、使用分支限界法解决单源最短路径问题。 2、通过上机实验进行算法实现。 3、保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。 三、实验原理: 分支限界法的基本思想: 1、分支限界法与回溯法的不同: 1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。 2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。 2、分支限界法基本思想: 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。

此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。 3、常见的两种分支限界法: 1)队列式(FIFO)分支限界法 按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。 2)优先队列式分支限界法 按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。 四、程序代码 #include using namespace std; int matrix[100][100]; // 邻接矩阵 bool visited[100]; // 标记数组 int dist[100]; // 源点到顶点i的最短距离 int path[100]; // 记录最短路的路径 int source; // 源点 int vertex_num; // 顶点数 int edge_num; // 边数 int destination; // 终结点 void Dijkstra(int source) { memset(visited, 0, sizeof(visited)); // 初始化标记数组 visited[source] = true; for (int i = 0; i < vertex_num; i++) { dist[i] = matrix[source][i]; path[i] = source; } int min_cost; // 权值最小 int min_cost_index; // 权值最小的下标 for (int i = 1; i < vertex_num; i++) // 找到源点到另外 vertex_num-1 个点的最短路径{ min_cost = INT_MAX;

最短路径_Dijkstra算法__实验报告

实验六:编程实现Dijkstra 算法求最短路问题. 1.需求分析: 首先让用户输入一个带权的有向图,输入时可通过一对一对输入存在弧的两个弧头与弧尾顶点以及弧上的权值从而输入整个有向图。用户输入一对对弧后,我们可以采用数组的形式来进行存储每个顶点之间的权值,最后由用户输入该有向图的源点(即每个最短路径的起点),要求源点必须为刚才输入的各顶点中的某一个,如果用户输入错误,程序要给出错误信息提示并退出程序。然后,我们可以设计一个Graph这样的类,将对关系的各种操作放入其中,然后我们在主函数中调运这个类就可以实现最短路问题的求解了。 2.概要设计: ①.构造一个新的类Graph: class Graph { private: int arcs[MAX][MAX],Path[MAX][MAX],D[MAX]; int arcnum,vexnum,weight,v0; Type a,b,vexs[MAX]; public: void Creat_Graph(); void Show_ShortestPath(); void ShortestPath_DIJ(); }; ②.结构化调用类中方法的主函数: int main() { Graph G; G.Creat_Graph(); G.ShortestPath_DIJ(); G.Show_ShortestPath(); return 0; } 3.代码实现: #include #define MAX 100 #define INFINITY INT_MAX enum BOOL{FALSE,TRUE}; using namespace std; template class Graph {

网络计划实验报告

PERT 实验 商业中心建设活动持续时间表 活动紧前活动需要时间(周) A 设计-20 B 批准-10 C 招标A, B8 D 建设C24 E 外装修D8 F 谈判A,B14 G 签约F10 H 区域分割D, G6 I 内装修H12 J 进驻I, E6 正常正常加急加急最大成本/时间 时间成本时间成本减少比率 A*203012808 6.25 B101010100- C*8106162 3.0 D*24 230020 2340410.0 E8110 4 1204 2.5 F141210204 2.0 G1*******- H* 6202254 1.25 I* 12160101702 5.0 J*6106100- 根据以上表格给出的信息,用PERT软件画出项目网络计划图,并进行网络计算与优化设计。

网络计划方法: 大型项目的开发涉及很复杂的项目协调和管理问题,为使项目管理人员对项目进度有全面的了解,进行有效的控制,必须使用科学的管理方法;网络计划法是使用最广泛的方法之一,关键路径法(critical path method 缩写为CPM)和项目评审技术(program evaluation and review technique 缩写为PERT)是两种使用最广泛的网络计划技术。网络计划方法的优点使它适用于生产技术复杂,工作项目繁多,且紧密联系的一些跨部门的工作计划,如:新产品研制开发;大型工程项目建设;生产技术准备;复杂设备的大修计划。 网络计划方法的基本原理: 将工程项目分解为相对独立的活动,根据各活动先后顺序、相互关系以及完成所需时间做出反映项目全貌的网络图;从项目完成全过程着眼,找出影响项目进度的关键活动和关键路线,通过对资源的优化调度,实现对项目实施的有效控制和管理。 网络计划方法的主要功能: 1用网络图描述一个实际项目的管理问题 (画网络图); 2计算项目的最早、最晚完成和开工时间 (网络计算); 3寻找关键活动和关键路径(网络分析); 4根据以上分析对网络进行优化 PERT网络分析法 PERT网络分析法(计划评估和审查审技术,Program Evaluation and Review Technique) PERT(Program Evaluation and Review Technique)即计划评审技术,最早是由美国海军在计划和控制北极星导弹的研制时发展起来的。PERT技术使原先估计的研制北极星潜艇的时间缩短了两年。简单地说,PERT是利用网络分析制定计划以及对计划予以评价的技术,它能协调整个计划的各道工序,合理安排人力、物力、时间、资金,加速计划的完成。在现代计划的编制和分析手段上,PERT被广泛的使用,是现代化管理的重要手段和方法。 一.画网络图 画网络图应注意以下规则: 1、按工作本身的逻辑顺序连接箭线 2、网络图中不允许出现循环线路 3、在网络图中不允许出现代号相同的箭线 4、在一个网络图中只允许有一个起点节点,一般只允许出现一个终点节点(多目标网络图除外) 5、在网络图中不允许出现有双向箭头或无箭头的线段 6、网

相关文档
最新文档