Структурные характеристики системы позволяют уже на ранней стадии создания системы оценить качество ее структуры и элементов с позиции общего системного подхода. Рассмотрим основные характеристики и приведем реализацию описанных алгоритмов анализа систем на языке программирования C#.
1 Связность структуры
1.1 Теоретические сведения
Эта характеристика позволяет выявить наличие обрывов в структуре, висячие вершины и т.п.
Связность элементов графа определяется матрицей связности С = ||cij||, элементы которой определяются на основе суммарной матрицы смежности:
где n – число вершин графа, Ak = Ak-1A (в частности A2 = A•A), где A – матрица смежности графа.
Элемент матрицы Ak = ||akij|| определяет число путей длиной k от вершины i к вершине j.
Элемент матрицы связности:
1.2 Программная реализация
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37  | 
						public void connectionStructure(int n, int[,] A, int[,] C) {     if (n > 0)     {         int[, ,] Ak = new int[n, n, n];         for (int i = 0; i < n; i++)             for (int j = 0; j < n; j++)                 Ak[0, i, j] = A[i, j];         for (int k = 1; k < n; k++)         {             for (int i = 0; i < n; i++)                 for (int j = 0; j < n; j++)                 {                     Ak[k, i, j] = 0;                     for (int m = 0; m < n; m++)                         Ak[k, i, j] += Ak[k - 1, i, m] * A[m, j];                 }         }         for (int i = 0; i < n; i++)             for (int j = 0; j < n; j++)                 C[i, j] = 0;         for (int k = 0; k < n; k++)         {             for (int i = 0; i < n; i++)                 for (int j = 0; j < n; j++)                     C[i, j] += Ak[k, i, j];         }         for (int i = 0; i < n; i++)             for (int j = 0; j < n; j++)                 if (C[i, j] >= 1) C[i, j] = 1;     } }  | 
					
Аргументы метода connectionStructure( ): n – число вершин в графе, A – матрица смежности, C – ссылка на экземпляр класса Array, в который будет занесена матрица связности.
2 Структурная избыточность
2.1 Теоретические сведения
Структурной избыточностью R называется параметр, отражающий превышение общего числа связей над минимально необходимым. R определяется следующим образом:
Для систем с избыточностью, имеющих кольцевую структуру или структуру типа «полный граф», R > 0, для систем без избыточности R = 0, для систем несвязных R < 0.
Обычно системы с большим R потенциально более надежны.
Для характеристики систем с большой избыточностью вводят также параметр ε2, учитывающий неравномерность распределения связей. При этом дуги у ориентированного графа рассматриваются без учета направленности.
где n – количество вершин, gi – степень i-ой вершины, m – количество ребер у графа.
Этот показатель характеризует недоиспользование возможностей структуры в достижении максимальной связности.
2.2 Программная реализация
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | 
						public void structuralRedundancy(int n, int countE, int[,] A, out double R, out double e2) {     R = 0;     for (int i = 0; i < n; i++)         for (int j = 0; j < n; j++)             R += A[i, j];     R = R * 0.5 / (double)(n - 1) - 1;     e2 = 0;     for (int i = 0; i < n; i++)     {         int degreeV = 0;         for (int j = 0; j < n; j++)             degreeV += A[i, j];         e2 += degreeV * degreeV;     }     e2 -= 4 * countE * countE / (double)n; }  | 
					
Аргументы метода structuralRedundancy( ): n – число вершин в графе, countE – количество ребер в графе, A – матрица смежности, R – структурная избыточность, e2 – неравномерность распределения связей. R и e2 – выходные параметры.
3 Структурная компактность
3.1 Теоретические сведения
Близость элементов i, j между собой определяется через минимальную длину цепи (пути) dij. Структурная компактность определяется несколькими параметрами.
Абсолютная компактность:
Относительная компактность:
где Qmin = n(n-1) – это минимальное значение компактности для структуры системы типа «полный граф»;
Диаметр структуры:
Чем выше эти параметры, тем инерционнее процессы, осуществляемые в системе, тем больше количество разделяющих элементы связей, тем меньше надежность.
3.2 Программная реализация
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  | 
						List<int> chainsLenght; public void structuralCompactness(int n, List<Edge> E, out int Q, out double Qotn, out int d) {     chainsLenght = new List<int>();     Q = 0;     d = 0;     //1-white 2-black     int[] color = new int[n];     for (int i = 0; i < n; i++)         for (int j = 0; j < n; j++)         {             if (i == j) continue;             chainsLenght.Clear();             for (int k = 0; k < n; k++)                 color[k] = 1;             DFSchain(i, j, E, color, 0);             if (chainsLenght.Count > 0)             {                 int min = chainsLenght[0];                 foreach (int element in chainsLenght)                 {                     if (element < min) min = element;                 }                 Q += min;                 if (min > d) d = min;             }         }     Qotn = (double)Q / (n * (n - 1)) - 1; }  | 
					
Аргументы метода structuralCompactness( ): n – число вершин в графе, E – список ребер графа, Q – абсолютная компактность, Qotn – относительная компактность, d – диаметр структуры. Q, Qotn и d – выходные параметры.
Ребро графа графа определяется экземпляром класс Edge:
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						class Edge {     public int v1, v2;     public Edge(int v1, int v2)     {         this.v1 = v1;         this.v2 = v2;     } }  | 
					
где v1 и v2 — номера вершин, которые соединяет данное ребро.
Для поиска длин цепей (заносятся в List<int> chainsLenght) в графе используется модификация рекурсивного алгоритма «Поиск в глубину» (Depth-first search). Опишем принцип ее работы:
Пусть дан граф G = (V, E), где V – множество вершин графа, E – множество его ребер. Предположим, что в начальный момент времени все вершины графа окрашены в белый цвет. Выполним следующие действия:
- Перебираем все пары вершин, возможно, они являются началом и концом цепи. На каждой итерации перекрашиваем все вершины в белый цвет (обозначим его 1, а черный цвет будем обозначать 2). Вызываем для каждой пары вершин процедуру DFSchain.
 
Процедура DFSchain(int u, int endV, List<Edge> E, int[] color, int len) (параметры: u – номер начальной вершины цепи, endV – номер конечной вершины цепи, E – список ребер графа, color — массив, в котором хранятся цвета вершин, len – текущая длина цепи):
- Если номер вершины u не равен endV, значит мы не достигли конца цепи, поэтому перекрашиваем вершину u в черный цвет. Иначе – конец цепи достигнут: добавляем длину цепи (len) в список и выполняем возврат из функции.
 - Для всякой вершины w, смежной с вершиной u и окрашенной в белый цвет, рекурсивно выполняем процедуру DFSchain(w, endV, E, color, len + 1). Возвращаем вершине w белый цвет (возможно через нее проходят другие цепи, поэтому не будем исключать ее из рассмотрения).
 
Приведем реализацию метода DFSchain( ):
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  | 
						private void DFSchain(int u, int endV, List<Edge> E, int[] color, int len) {     //вершину не следует перекрашивать, если u == endV (возможно в нее есть несколько путей)     if (u != endV)         color[u] = 2;     else     {         chainsLenght.Add(len);         return;     }     for (int w = 0; w < E.Count; w++)     {         if (color[E[w].v2] == 1 && E[w].v1 == u)         {             DFSchain(E[w].v2, endV, E, color, len + 1);             color[E[w].v2] = 1;         }         else if (color[E[w].v1] == 1 && E[w].v2 == u)         {             DFSchain(E[w].v1, endV, E, color, len + 1);             color[E[w].v1] = 1;         }     } }  | 
					
4 Степень централизации в структуре
4.1 Теоретические сведения
Для оценки централизации используют индекс центральности:
где Zmax – максимальное значение величины:
Для структур систем, имеющих максимальную степень централизации σ = 1 (радиальная), для структур с равномерным распределением связей (полный граф, кольцевая) σ = 0.
4.2 Программная реализация
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  | 
						public double degreeOfCentralization(int n, int Q, List<Edge> E) {     double[] Z = new double[n];     chainsLenght = new List<int>();     int[] color = new int[n];     for (int i = 0; i < n; i++)     {         int sumD = 0;         for (int j = 0; j < n; j++)         {             if (i == j) continue;             chainsLenght.Clear();             for (int k = 0; k < n; k++)                 color[k] = 1;             DFSchain(i, j, E, color, 0);             if (chainsLenght.Count > 0)             {                 int min = chainsLenght[0];                 foreach (int element in chainsLenght)                 {                     if (element < min) min = element;                 }                 sumD += min;             }         }         Z[i] = (double)(Q / 2) / sumD;     }     double Zmax = Z[0];     foreach(double element in Z)     {         if (element > Zmax) Zmax = element;     }     double sigma;     sigma = (double)(n - 1) * (2 * Zmax - n) / (Zmax * (n - 2));     return sigma; }  | 
					
Аргументы метода degreeOfCentralization( ): n – число вершин в графе, Q – значение абсолютной компактности, E – список ребер графа. Метод возвращает значение индекса централизации (sigma). Для поиска значений длины цепей между вершинами используется метод DFSchain( ), описанный выше.
5 Основные виды структур
Введенные количественные характеристики могут быть использованы при сравнительной оценки топологических свойств структур систем. С точки зрения топологии внутренних связей выделяют следующие основные виды структур:
а) последовательная
б) кольцевая
в) радиальная
г) древовидная
д) типа «полный граф»
е) несвязная
Количественные значения структурно-топологических характеристик этих структур приведены в таблице ниже.
Видно, что структуры с нулевой избыточностью R = 0 всё же различаются по параметру ε2. Наибольшую неравномерность связей имеет радиальная структура. Наибольшую компактность имеет структура типа «полный граф». Наименьшую близость элементов – последовательная структура. Структуры неразличимые по показателю d: кольцевая и радиальная – имеют различные значения параметра Q, т.е. кольцевая структура всё же более компактна, чем радиальная. Отметим также, что чем больше централизация, тем выше неравномерность связей (параметр ε2).
Скачать листинги
Поделиться в соц. сетях:










Никогда не видел понятие матрицы связности, но насколько я понимаю [latex]A^k[/latex] — это матрица достижимости. Если в клетке такой матрицы содержится единица, значит между элементами графа, соответствующими строке и столбцу существует путь длины не более k (в невзвешенном графе, по крайней мере).
Вы определяете матрицу связности как сумму матриц достижимости для всех k от 1 до n. Я не совсем понимаю что даст такая сумма. [latex]A^k[/latex] содержит информацию обо всех возможных путях в матрице — такая матрица позволит выявить компоненты связности и, в частности, изолированные вершины. А что в этом случае дает сумма?