使用Python實現(xiàn)二終端網(wǎng)絡(luò)可靠度
在網(wǎng)絡(luò)可靠性中,一種較為經(jīng)典且在實踐中更為常用的可靠度計算便是二終端可靠度,即給定網(wǎng)絡(luò)拓撲結(jié)構(gòu)與邊可靠度(假定節(jié)點完全可靠),計算網(wǎng)絡(luò)中指定的兩個節(jié)點之間的連通可靠度。
在此,筆者依據(jù)最小路集思想給出此方法的python代碼實現(xiàn),該代碼可以依據(jù)給定的輸入矩陣、節(jié)點序號等設(shè)定值算出兩節(jié)點間的連通可靠度。
邏輯代碼與測試用例如下:
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("+") #刪除指定階數(shù)下,路徑長度不等于階數(shù)的路 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)
在前部分,主要定義了幾個函數(shù)以便求出最小路集以及利用容斥原理計算二終端可靠度,最終外層函數(shù)為Matrix_label(data,my_dict,index_start,index_end):
參數(shù)解釋:
- data:矩陣形式的數(shù)據(jù),表征整個網(wǎng)絡(luò)的拓撲結(jié)構(gòu)和邊可靠度,其中每一個矩陣元素要么為0,要么預(yù)設(shè)的字母如“A、B、C”等,每個字母取值為0到1(不包含0但包括1),元素為0表示對應(yīng)行號與列號的節(jié)點之間無邊相連,元素為字母如“A”表示對應(yīng)行號與列號的節(jié)點之間以可靠度為A的概率相連;
- my_dict:字典形式的數(shù)據(jù),指定每一個用到的字母所表示的概率值,如{'A':0.8,'B':0.9,'C':0.9},特別指出網(wǎng)絡(luò)中節(jié)點之間的連通概率可以相異;
- index_start:二終端節(jié)點中的起始點序號;
- index_end:二終端節(jié)點中的終止點序號;
以上就是使用Python實現(xiàn)二終端網(wǎng)絡(luò)可靠度的詳細內(nèi)容,更多關(guān)于二終端網(wǎng)絡(luò)可靠度 的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python中將一個全部為int的list 轉(zhuǎn)化為str的list方法
下面小編就為大家分享一篇python中將一個全部為int的list 轉(zhuǎn)化為str的list方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python pandas.DataFrame 找出有空值的行
這篇文章主要介紹了Python pandas.DataFrame 找出有空值的行,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09