Python实现二终端可靠度的代码是什么
Admin 2022-06-15 群英技术资讯 539 次浏览
在网络可靠性中,一种较为经典且在实践中更为常用的可靠度计算便是二终端可靠度,即给定网络拓扑结构与边可靠度(假定节点完全可靠),计算网络中指定的两个节点之间的连通可靠度。
在此,笔者依据最小路集思想给出此方法的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列表什么时候应用,常用操作有哪些?当我们需要存一个数据时,可以直接使用变量,但是,当我们要存储100个,设置更多的时候,变量肯定不行,这时候我们要用啥?此时列表就有它的用武之地了,一次性存储多个数据。
我们通过python pygame中draw模块的函数在窗口上绘图,可以绘制的图形包括:线条、矩形、多边形、圆、椭圆、圆弧等等。这篇文章就给大家介绍一下,如何使用pygame绘制矩形框、直线和线条。感兴趣的朋友就继续往下看吧。
这篇文章主要为大家介绍了Python对象的底层实现源码学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
图像二值化是指将图像上像素点的灰度值设定为0或255,即整个图像呈现明显的黑白效果的过程。
这篇文章主要介绍了基于Python实现新版正方系统滑动验证码识别算法和方案,文中示例代码对我们的学习和工作有一定的帮助,感兴趣的可以了解一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008