Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Zadaniye2.2_used

.py
Скачиваний:
0
Добавлен:
24.10.2023
Размер:
2.25 Кб
Скачать
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()
Соседние файлы в предмете Вычислительные системы, сети и телекоммуникации