Python实现二终端可靠度怎么做,方法是什么
Admin 2022-06-27 群英技术资讯 298 次浏览
在网络可靠性中,一种较为经典且在实践中更为常用的可靠度计算便是二终端可靠度,即给定网络拓扑结构与边可靠度(假定节点完全可靠),计算网络中指定的两个节点之间的连通可靠度。
在此,笔者依据最小路集思想给出此方法的python代码实现,该代码可以依据给定的输入矩阵、节点序号等设定值算出两节点间的连通可靠度。
逻辑代码与测试用例如下:
import itertools def min_path_sets(init_matrix,index_start,index_end): import re num_point = init_matrix.shape[0] min_path_list = [] for i in range(num_point-1): temp = init_matrix**(i+1) item = expand(temp[index_start-1,index_end-1]) list_given = re.sub('[ *123456789]',"",str(item)).split("+") #删除指定阶数下,路径长度不等于阶数的路 index_to_delete = [] for j in range(len(list_given)): if len(list_given[j])!=(i+1) or list_given[j]=='0': index_to_delete.append(j) for counter, index in enumerate(index_to_delete): index = index - counter list_given.pop(index) min_path_list.extend(list_given) return min_path_list def str_de_duplication(pstr): a = '' for i in range(len(pstr)): if pstr[i] not in a: a+=pstr[i] return a def product_symbol(pstr,my_dict): import numpy as np value_list = [] for i in pstr: value_list.append(my_dict[i]) return np.prod(value_list) def generate_label(path_sets,my_dict): import numpy as np all_result = [] for exp_num in range(len(path_sets)): item_Combination = list(itertools.combinations(path_sets, exp_num+1)) item_list = list(map(lambda x: str_de_duplication("".join(x)),item_Combination)) value_list = list(map(lambda x: product_symbol(x,my_dict),item_list)) all_result.append(np.sum(value_list)*(-1)**(exp_num)) return np.sum(all_result) def Matrix_label(init_matrix,my_dict,index_start,index_end): path_sets = min_path_sets(init_matrix,index_start,index_end) pro_value = generate_label(path_sets,my_dict) return pro_value from sympy import * from sympy.abc import A,B,C,D,E,F index_start = 2 index_end = 1 data = Matrix([[0,A,B], [A,0,C], [B,C,0]]) my_dict = {'A':0.8, 'B':0.9, 'C':0.9} Matrix_label(data,my_dict,index_start,index_end)
在前部分,主要定义了几个函数以便求出最小路集以及利用容斥原理计算二终端可靠度,最终外层函数为Matrix_label(data,my_dict,index_start,index_end):
参数解释:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于Python的相关知识,主要介绍了Python如何用NumPy读取和保存点云数据,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下。
python中集合set是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素,还可以计算交集、差集、并集等,它与列表(list)的行为类似,这篇文章主要介绍了python set()去重的底层原理,需要的朋友可以参考下
这篇文章主要介绍了Python列表1~n输出步长为3的分组实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
最近整理了一些好用的库但是只是初级介绍,如果大家用得到的话还请自己到官网上查一下,因为东西太多我一 一介绍的话可能不太现实,需要的朋友可以参考下
内容介绍题目描述解题思路/算法分析/问题及解决实验代码运行结果题目描述本次实验为连接数据库的实验,并对数据库进行一些简单的操作,要实现的基本功能如下所示,要能连接并展现数据库里的数据,能够实现插入功能
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008