可靠性设计分析技术大作业
用计算机系统的最小通路集的算法
学生姓名 | |
学 号 | |
学 校 | 南京航空航天大学 |
学 院 | 自动化学院 |
专 业 | 自动化专业 |
班 级 | |
指导老师 | |
2015年4月
试验目的
通过实验,掌握可靠性分析中的网络分析法,学习利用计算机计算系统可靠性的方法。
实验内容
针对给定的系统网络图,任选一种计算机语言(MATLAB语言或C语言)编写采用网络分析法求解系统
程序的编排思想
1.思想
1输入节点I作为起始节点;
2由起始节点出发,选下一步可到达的节点j;
3判断节点j是否走过,若已走过则后退一步,以上一个节点作为起始节点,转②;
4判断是否已达到输出节点L,若未到,则把j作为起始点,转②;
5判断是否已到了所有的路,若否,则后退两步,把上面两个节点作为起始节点,转②;
6结束
2.由以上可见,计算机算法的关键是要进行几个判断:
1判断节点是否与前面走过的节点重复;
2判断是否已到了一条路;
3判断是否已到了所有的路。
3.算法参数和符号
n:网络中节点数;
I:输入节点标号;
L:输出节点标号;
E:扇出向量;E=(E(1),…,E( I ),…,E(n)),表示离开节点1,…,n的弧数。其中E(i)表示节点I 下一步可以到达的节点有E( I ) 个。E阵完全由网络所确定。
R:路线矩阵;R=(r(I ,k)),I =1,…,n;k=;,…,E(I )。
R的第I 行记录了节点I 可以一步到达的节点标号。R不一定是长方阵,即对不同的行,列数未必相同。为了表示I 的下一步的节点已经完全走遍,同时区分出输入节点I,在R的每行再增加一个元素
r(I,E(I )+1),当I ≠I时,取-1,当I =I时,取0。
此时仍称R为G路线矩阵。显然,R阵完全由网络所确定。
C:位置向量;C=(C(1),…,C(I ),…,C(n)),其中C(j)记录节点j在R中的列号。而元素r(j, C j)记录j下一步到达的节点标号。
F:检验向量;F为定义在节点{1,2,…,n}上的函数,初值为I≠I时,取1,i=L时取-1,其余情况取0。
F的作用为:当某个节点j已走过时,F(j)的值就为1。在寻一条最小路集的过程中,这可以用来判断后面的节点是否与已走过的节点有重复。一旦F(j)=1,表明已达到输出节点L,即到了一条最小路集。
P:输出矩阵;所有最小路集组成的矩阵,其中每一列为由输入节点I到输出节点L的一条最小路集。P的元素P(v,w)记录了第w条最小路集中第v个节点的标号。
程序运行的最终结果
所用语言:c语言
运行平台:Dev-C++ 5.4.1
假设网络如图所示。
图3-29 桥式网络 图3-30 有向网络图
图3-29从节点1 到节点3的运行结果为
图3-30运行结果
心得体会
经过一天的学习,以及以前的知识储备,终于把代码写了出来,最终也能正常运行。在这个过程中查了不少资料,也抄了部分代码,我觉得抄程序是最笨的方法但我认为它是进步最快的方法,抄程序是积累经验的时候,而做项目才是真正把所学为所用的时候,可以说只有你做一个大点的项目出来才能真正是说明你学到了东西,你会用所学的东西,要不然就算你学的再多,不会用也没用。
matlab中printf输出格式在这个过程中的体会是
1.不会的一定要问明白;
2.在学习语言的时候一定要记住动手,不要只说不做,这样会行成眼高手低,不管什么样的程序都要亲手做过才能说会了;
3.进一步加深对课堂讲授内容的理解。课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,
在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致;
4.熟悉程序开发环境、学习计算机系统的操作方法。一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。 通过上机实验,熟练地掌握c语言开发环境 ;
5.学习上机调试程序。完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
参考文献
【1】辛开远. 大型网络所有最小路的计算机算法——系统可靠性分析讲座[J]. 水利电力机械. 2004(04)
【2】金星,洪延姬,余浩章,王华,李永. 大型网络系统最小路集的优化计算方法[J]. 系统工程学报. 2002(01)
【3】武小悦,沙基昌. 构造网络不交化最小路集的一种新算法[J]. 系统工程理论与实践. 2000(01)
附录
#include<stdio.h>
main()
{
int n,I,L,i,j,w,v;
int E[20],C[20],F[20],U[20];
int R[20][20],P[20][20];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
P[i][j]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
R[i][j]=0;
printf("***用计算机系统的最小通路集的算法***\n\n");
printf(" 请输入节点数 n,输入节点 I,输出节点 L:\n\t");
scanf("%d,%d,%d",&n,&I,&L);
printf("\n 输入扇出向量 E :\n\t");
for(i=0;i<n;i++)
scanf("%d",&E[i]);
printf("\n 输入路线矩阵 R :\n\t");
for(i=0;i<n;i++)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论