Z9411_КафкаРС_ВССиТ_ЛР
.docx
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА 41
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
ассистент |
|
|
|
Н. В. Апанасенко |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1
|
АНАЛИЗ ЭЛЕМЕНТАРНОЙ СИСТЕМЫ МНОЖЕСТВЕННОГО ДОСТУПА
|
по дисциплине: Вычислительные системы, сети и телекоммуникации |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z9411 |
|
|
|
Р. С. Кафка |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2019/3603 |
|
|
|
Санкт-Петербург 2023
Цель работы
Целью данной работы является получение навыков моделирования алгоритмов случайного множественного доступа в системах передачи данных.
Краткие теоретические сведения
В данной работе рассматривается элементарная модель системы множественного доступа, где под множественным доступом подразумевается использование общего канала связи всеми абонентами. В рассматриваемой модели длительность сообщений от абонентов принято за единицу времени. Время разделено на равные интервалы – слоты, длительность которого равна длительности передаваемого сообщения. Предполагается, что абоненты начинают передачу сообщений только в начале слота. В соответствии с алгоритмом возможны три события.
Событие «успех». Если в слоте с индексом k передает только один абонент, считается, что сообщение доставлено успешно. Абонент, успешно передавший сообщение, покидает систему.
Событие «конфликт». Если в слоте k передают два и более абонентов, то в этом случае считается, что сообщение не доставлено – произошел конфликт. Абоненты остаются в системе и осуществляют попытки передачи сообщения в следующих слотах.
Событие «пусто». В слоте не передает ни один из абонентов.
На рисунке 1 видно, что в первом слоте сообщение передано успешно, во втором слоте произошел конфликт. В слоте 3 не было абонентов для передачи.
Рисунок 1
Легко записать правило для количества переданных сообщений в одном слоте:
Здесь - количество абонентов, передающих сообщение в слоте с индексом k. Количество абонентов – у которых появляются сообщения для передачи в слоте k распределено по закону Пуассона с параметром .
Таким образом, количество абонентов в слоте k+1 определяется как: где - индикаторная функция.
В данной работе будет рассмотрен следующий алгоритм, на основе которого абоненты принимают решение о передаче сообщений в слоте k:
Вероятность передачи сообщения каждым абонентом в слоте k определяется как: . Таким образом количество передающих абонентов в слоте k распределено по биномиальному закону . Данный алгоритм является стабильным.
Среднее количество абонентов в такой системе определяется как:
где S количество слотов. Тогда среднее количество слотов необходимое для передачи сообщения одним абонентом определяется как:
Количественные и качественные выводы
В лабораторной работе рассматривается элементарная модель системы множественного доступа, где под множественным доступом понимается использование общего канала связи всеми абонентами. В этой модели длительность сообщений от абонентов принимается за единицу времени. Время делится на равные интервалы, называемые слотами, длительность которых равна длине передаваемого сообщения. Предполагается, что абоненты начинают передавать сообщения только в начале слота. Согласно алгоритму, возможны три события: "успех", "конфликт" и "столкновение". Событие "успех" происходит, когда только один абонент передает сообщение в слоте k, и считается, что сообщение успешно доставлено. Абонент, который успешно передал сообщение, покидает систему. Событие "конфликт" происходит, когда два или более абонента передают в слоте k, и сообщение не доставляется. Событие "коллизия" происходит, когда все абоненты передают в одном слоте и все сообщения потеряны.
Листинг программы с комментариями
Код программы представлен в листинге 1.
Листинг 1 – Построение графика зависимости среднего количества абонентов и среднего времени нахождения абонента от лямбды
import random import matplotlib.pyplot as plt import numpy as np
def average_users_def(lam, num_slots): ''' Calculate the average number of users in the system at each slot ''' start_slot = [0] * num_slots # Initialize a list to store the number of users in each start slot end_slot = [0] * num_slots # Initialize a list to store the number of users in each end slot P = np.random.poisson(lam, num_slots) # Generate the Poisson distribution with mean lam for num_slots
for i in range(num_slots): # Loop through each slot I = 0 if start_slot[i] != 0: R = np.random.binomial(start_slot[i], 1 / start_slot[i], 1) # Generate a binomial distribution to simulate the leaving of users I = int(R == 1) # Count the number of users that leave end_slot[i] = start_slot[i] - I + P[i] # Calculate the number of users in the end slot if i < num_slots - 1: # Set the end slot to be the start slot for the next slot start_slot[i + 1] = end_slot[i]
return np.mean(end_slot)
def mean_time(average_users, lam): ''' Calculate the mean time a user spends in the system ''' return average_users / lam
if __name__ == "__main__": num_slots = 10 ** 5 start = 0.05 step = 0.01 end = 0.5
lam_count = int((end - start) / step + 1) lam = np.linspace(start, end, lam_count) average_users = np.zeros(lam_count) t_mean = np.zeros(lam_count)
for i, l in enumerate(lam): average_users[i] = average_users_def(l, num_slots) t_mean[i] = mean_time(average_users[i], l)
plt.figure() plt.plot(lam, average_users, label='Среднее количество абонентов (N^)') plt.plot(lam, t_mean, label='Среднее количество слотов (T^)', color='red') plt.title('График зависимости среднего количества абонентов в системе (N^) \nи\n среднего времени нахождения абонента в системе (T^) от Lam') plt.grid(color='gray') plt.xlabel('Lam') plt.ylabel('Values') plt.ylim(-1, 21) plt.xlim(0.05, 0.4) plt.legend()
plt.show() |
Этот код импортирует модуль 'random', библиотеку 'matplotlib.pyplot' как 'plt' и библиотеку 'numpy' как 'np'.
Затем он определяет две функции:
'average_users_def': вычисляет среднее число пользователей в системе, сначала инициализируя два списка 'start_slot' и 'end_slot' нулями 'num_slots'.
Затем функция генерирует распределение Пуассона со средним значением 'lam' для слотов 'num_slots', используя 'np.random.poisson', и сохраняет его в 'P'.
Затем функция перебирает каждый слот и обновляет количество пользователей в системе, используя биномиальное распределение со средним, равным количеству пользователей в предыдущем слоте.
Обновленное количество пользователей в каждом слоте хранится в списке 'end_slot', а последнее значение 'end_slot' используется для обновления 'start_slot' следующего слота.
В итоге функция возвращает среднее значение списка 'end_slot'.
'mean_time': вычисляет среднее время пользователя в системе путем деления 'average_users' на параметр скорости 'lam'.
Блок 'if name == "main": определяет, что следующий за ним код будет выполняться только в том случае, если скрипт запущен как самостоятельная программа (не импортирован как модуль).
Код определяет несколько переменных для симуляции:
'num_slots' определяет количество временных интервалов для моделирования, установленное на 10^5.
'start', 'step' и 'end' задают начальное и конечное значения для параметра скорости 'lam' и размер шага для его увеличения.
'lam_count' рассчитывает количество значений параметра 'lam' для генерации.
'lam', 'average_users' и 't_mean' - массивы для хранения параметра скорости, среднего количества пользователей и среднего времени для каждого значения 'lam' соответственно.
Затем код перебирает каждое значение 'lam', вызывает функцию 'average_users_def' для получения среднего числа пользователей и сохраняет его в 'average_users', а также вызывает функцию 'mean_time' для получения среднего времени и сохраняет его в 't_mean'.
Наконец, код строит графики массивов 'average_users' и 't_mean' против значений 'lam' с помощью matplotlib, с соответствующими метками и границами оси, и отображает график.
Результат работы кода представлен на рисунке 1.
Рисунок 1 – График зависимости
ЗАКЛЮЧЕНИЕ
В этой лабораторной работе мы смоделировали поведение коммуникационной системы, используя процесс Пуассона и биномиальный процесс. Мы проанализировали связь между средним количеством пользователей в системе, представленным N, и средним временем, которое пользователь проводит в системе, представленным T. Для этого мы использовали функцию average_users_def, которая вычисляет N, и функцию mean_time, которая вычисляет T. Моделирование проводилось для различных значений параметра Lam, который представляет собой среднее количество пользователей, прибывающих в единицу времени. Результаты были представлены в виде графика, показывающего зависимость между N и T, а также между Lam и N/T.
График показал, что с увеличением значения параметра Lam среднее количество пользователей в системе также увеличивается. Кроме того, среднее время, которое пользователь проводит в системе, уменьшается. Эта зависимость соответствует тому, что можно было бы ожидать для коммуникационной системы, где увеличение количества пользователей, приходящих в единицу времени, приводит к увеличению использования системных ресурсов, что приводит к уменьшению среднего времени, которое пользователь проводит в системе.
В целом, данная лабораторная работа дала хорошее понимание поведения коммуникационной системы, смоделированной с использованием процесса Пуассона и биномиального процесса. Результаты моделирования показали, что взаимосвязь между N, T и Lam соответствует тому, что можно было бы ожидать в реальной коммуникационной системе.