Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание 5 - 8 отчеты.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
197.87 Кб
Скачать

Лабораторная работа № 8

Задание:

Исследовать модели подсети вычислительной сети и вычислить:

  1. Интенсивность потоков сообщений, проходящих по каналам.

  2. Среднюю длину пути

  3. Пропускные способности каналов, минимизирующие среднюю задержку сообщений.

  4. Среднюю задержку сообщений для оптимальных пропускных способностях каналов и при неоптимальных.

А так же изобразить сеть в виде графа.

Вариант 17:

C = 70

N = 5

Код программы:

package ru;

import java.text.DecimalFormat;

import java.util.*;

public class Main {

static int N = 5;

static int C = 70;

static double mu = 1.0;

static Map<Integer, Integer> channels = null;

static double[][] Y = {

{0, 1, 2, 1, 2},

{2, 0, 1, 1, 1},

{2, 3, 0, 1, 2},

{3, 1, 1, 0, 1},

{3, 1, 1, 2, 0},

};

static int[][] r = {

{9, 1, 1, 3, 3},

{4, 9, 4, 2, 3},

{4, 1, 9, 3, 3},

{4, 1, 4, 9, 3},

{4, 1, 4, 5, 9},

};

public static void main(String[] args) {

DecimalFormat formatter = new DecimalFormat("###.########");

double lam0 = 0;

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

lam0 += Y[i][j];

}

}

System.out.println("lam0 = " + lam0);

List<Integer> lam = getLam();

System.out.println("lam = " + lam.toString());

int A = 0;

for (Integer x : lam) {

A += x;

}

System.out.println("A = " + A);

double n = ((double)A)/ ((double)lam0);

System.out.println("n = " + n);

List<Double> Ci = getC(lam0, n);

System.out.println("Ci = " + Ci.toString());

double sum = 0;

for (Double x : Ci) {

sum += x;

}

System.out.println("sum Ci = " + sum);

double t = getT(lam0, n, Ci);

System.out.println("t = " + t);

List<Double> C2 = getAlternativeC();

System.out.println("C2 = " + C2.toString());

double t2 = getT(lam0, n, C2);

System.out.println("t2 = " + t2);

}

private static List<Double> getAlternativeC() {

List<Double> C2 = new ArrayList<Double>();

List<Integer> lam = getLam();

double tempC = C;

for(int i = 0; i < lam.size() - 1; i++) {

C2.add(lam.get(i) + 0.5);

tempC -= C2.get(i);

}

C2.add(tempC);

return C2;

}

private static double getT(double lam0, double n, List<Double> Ci) {

List<Integer> lam = getLam();

double t = 0;

for(int i = 0; i < lam.size(); i++) {

t+= lam.get(i)/ lam0 * (1.0 / (mu * Ci.get(i) - lam.get(i)));

}

return t;

}

private static List<Double> getC(double lam0, double n) {

List<Double> res = new ArrayList<Double>();

double psi = lam0 / (C * mu);

List<Integer> lam = getLam();

for(int i = 0; i < lam.size(); i++) {

double c = lam.get(i) / mu;

double temp = 0;

for (Integer x : lam) {

temp += Math.sqrt(x);

}

temp = Math.sqrt(lam.get(i)) / temp;

temp *= C * (1.0 - n * psi);

c += temp;

res.add(c);

}

return res;

}

private static List<Integer> getLam() {

Map<Integer, Integer> map = new TreeMap<Integer, Integer>();

for (int i = 0; i < r.length; i++) {

for (int j = 0; j < r.length; j++) {

if (i != j) {

int k = j;

int cost = (int) Y[i][j];

while (k != i) {

int num = getChannelNumber(k, r[i][k] - 1);

if (!map.containsKey(num)) {

map.put(num, 0);

}

map.put(num, map.get(num) + cost);

k = r[i][k] - 1;

}

}

}

}

return new ArrayList<Integer>(map.values());

}

private static void createMap() {

channels = new HashMap<Integer, Integer>();

int count = 0;

for (int i = 0; i < r.length; i++) {

for (int j = 0; j < r.length; j++) {

if (i != j) {

int v2 = r[i][j] - 1;

if (!channels.containsKey(j * 10 + v2)) {

channels.put(j * 10 + v2, count);

count++;

}

}

}

}

}

private static int getChannelNumber(int v1, int v2) {

if (channels == null) {

createMap();

}

Integer res = channels.get(v1 * 10 + v2);

if (res == null) {

throw new IllegalArgumentException("Invalid v1 =" + v1 + ", v2 = " + v2 + ".");

}

return res;

}

}

Результат работы программы:

Интенсивности потоков сообщений в каналах: [6, 5, 7, 6, 15, 5, 5, 7].

Средняя длина пути - 1,75.

Оптимальные пропускные способности каналов, минимизирующие задержку сообщений:

[7.65, 6.507, 8.783, 7.65, 17.61, 6.507, 6.507, 8.783]

Средняя задержка сообщения при оптимальных пропускных способностях - 0.963.

Оптимальные пропускные способности каналов: [6.5, 5.5, 7.5, 6.5, 15.5, 5.5, 5.5, 17.5]

Средняя задержка сообщения при неоптимальных пропускных способностях - 3.083.

Выводы:

Из полученных результатов можно увидеть, что оптимальные пропускные способности каналов зависят от интенсивности потоков сообщений в каналах. Средняя задержка сообщения при неоптимальных пропускных способностях каналов заметно больше (в 3 раза), чем при оптимальных. Даже не смотря на то, что разница между оптимальными и не оптимальными пропускными способностями не столь велика. Вследствие этого, при выборе пропускных способностей необходимо выбирать именно оптимальные значения, так как даже малейшее отклонение от них увеличивает время задержки сообщения.