使用Python實(shí)現(xiàn)二終端網(wǎng)絡(luò)可靠度
在網(wǎng)絡(luò)可靠性中,一種較為經(jīng)典且在實(shí)踐中更為常用的可靠度計(jì)算便是二終端可靠度,即給定網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與邊可靠度(假定節(jié)點(diǎn)完全可靠),計(jì)算網(wǎng)絡(luò)中指定的兩個(gè)節(jié)點(diǎn)之間的連通可靠度。
在此,筆者依據(jù)最小路集思想給出此方法的python代碼實(shí)現(xiàn),該代碼可以依據(jù)給定的輸入矩陣、節(jié)點(diǎn)序號(hào)等設(shè)定值算出兩節(jié)點(diǎn)間的連通可靠度。
邏輯代碼與測(cè)試用例如下:
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ù)下,路徑長(zhǎng)度不等于階數(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)
在前部分,主要定義了幾個(gè)函數(shù)以便求出最小路集以及利用容斥原理計(jì)算二終端可靠度,最終外層函數(shù)為Matrix_label(data,my_dict,index_start,index_end):
參數(shù)解釋:
- data:矩陣形式的數(shù)據(jù),表征整個(gè)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)和邊可靠度,其中每一個(gè)矩陣元素要么為0,要么預(yù)設(shè)的字母如“A、B、C”等,每個(gè)字母取值為0到1(不包含0但包括1),元素為0表示對(duì)應(yīng)行號(hào)與列號(hào)的節(jié)點(diǎn)之間無邊相連,元素為字母如“A”表示對(duì)應(yīng)行號(hào)與列號(hào)的節(jié)點(diǎn)之間以可靠度為A的概率相連;
- my_dict:字典形式的數(shù)據(jù),指定每一個(gè)用到的字母所表示的概率值,如{'A':0.8,'B':0.9,'C':0.9},特別指出網(wǎng)絡(luò)中節(jié)點(diǎn)之間的連通概率可以相異;
- index_start:二終端節(jié)點(diǎn)中的起始點(diǎn)序號(hào);
- index_end:二終端節(jié)點(diǎn)中的終止點(diǎn)序號(hào);
以上就是使用Python實(shí)現(xiàn)二終端網(wǎng)絡(luò)可靠度的詳細(xì)內(nèi)容,更多關(guān)于二終端網(wǎng)絡(luò)可靠度 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python算法與數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)代碼
鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。這篇文章主要介紹了python算法與數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)代碼,需要的朋友可以參考下2019-06-06
PyTorch搭建LSTM實(shí)現(xiàn)時(shí)間序列負(fù)荷預(yù)測(cè)
這篇文章主要為大家介紹了PyTorch搭建LSTM實(shí)現(xiàn)時(shí)間序列負(fù)荷預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python常用數(shù)據(jù)結(jié)構(gòu)字典梳理
這篇文章主要介紹了python常用數(shù)據(jù)結(jié)構(gòu)字典梳理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
python實(shí)現(xiàn)密碼強(qiáng)度校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)密碼強(qiáng)度校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
Python 3中print函數(shù)的使用方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Python 3中print函數(shù)的使用方法,python3中的print函數(shù)和之前版本的用法相差很多,本文通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-08-08
Python輕松讀取TOML文件告別手動(dòng)編輯配置文件
這篇文章主要為大家介紹了Python輕松讀取TOML文件告別手動(dòng)編輯配置文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

