您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:使用Python实现二终端网络可靠度

51自学网 2021-10-30 22:41:48
  python
这篇教程使用Python实现二终端网络可靠度写得很实用,希望能帮到您。

在网络可靠性中,一种较为经典且在实践中更为常用的可靠度计算便是二终端可靠度,即给定网络拓扑结构与边可靠度(假定节点完全可靠),计算网络中指定的两个节点之间的连通可靠度。

在此,笔者依据最小路集思想给出此方法的python代码实现,该代码可以依据给定的输入矩阵、节点序号等设定值算出两节点间的连通可靠度。

逻辑代码与测试用例如下:

import itertoolsdef 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_listdef str_de_duplication(pstr):    a = ''    for i in range(len(pstr)):        if pstr[i] not in a:            a+=pstr[i]    return adef 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_valuefrom sympy import *from sympy.abc import A,B,C,D,E,Findex_start = 2index_end = 1data = 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):

参数解释:

  • data:矩阵形式的数据,表征整个网络的拓扑结构和边可靠度,其中每一个矩阵元素要么为0,要么预设的字母如“A、B、C”等,每个字母取值为0到1(不包含0但包括1),元素为0表示对应行号与列号的节点之间无边相连,元素为字母如“A”表示对应行号与列号的节点之间以可靠度为A的概率相连;
  • my_dict:字典形式的数据,指定每一个用到的字母所表示的概率值,如{'A':0.8,'B':0.9,'C':0.9},特别指出网络中节点之间的连通概率可以相异;
  • index_start:二终端节点中的起始点序号;
  • index_end:二终端节点中的终止点序号;

以上就是使用Python实现二终端网络可靠度的详细内容,更多关于二终端网络可靠度 的资料请关注51zixue.net其它相关文章!


python实现由数组生成对称矩阵
python3使用迭代生成器实现减少内存占用
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。