Python实现二终端可靠度怎么做,方法是什么
Admin 2022-06-27 群英技术资讯 436 次浏览
在网络可靠性中,一种较为经典且在实践中更为常用的可靠度计算便是二终端可靠度,即给定网络拓扑结构与边可靠度(假定节点完全可靠),计算网络中指定的两个节点之间的连通可靠度。
在此,笔者依据最小路集思想给出此方法的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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了C语言中的结构体在Python中实现转换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要为大家详细介绍了Python实现双人五子棋对局,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在使用Pandas处理数据时,常见的读取数据的方式时从Excel或CSV文件中获取,这篇文章主要给大家介绍了关于如何使用pandas生成、读取csv文件的相关资料,需要的朋友可以参考下
大家好,本篇文章主要讲的是python图片格式转换脚本,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
这篇文章主要介绍了python实现三次密码验证的示例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008