Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МСРР_ЛР1_Иванова_4117.docx
Скачиваний:
0
Добавлен:
29.04.2025
Размер:
325.47 Кб
Скачать

Приложение б «Построение графиков распределения аб»

# построение гистограммы и эмпирической функции распределения положения абонентов

def plot_ab_histogram(subs):

# углы расположения АБ

angles = [s['angle'] for s in subs]

# построение гистограммы распределения

plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)

plt.hist(angles, bins=30, range=(0, 2 * np.pi), edgecolor='black')

plt.title('Гистограмма распределения абонентов')

plt.xlabel('Угол (радианы)')

plt.ylabel('Плотность вероятности')

# построение эмпирической функции распределения

plt.subplot(1, 2, 2)

sorted_angles = np.sort(angles)

y_vals = np.arange(1, len(angles) + 1) / len(angles)

plt.step(sorted_angles, y_vals, where='post', color='b')

plt.title('Эмпирическая функция распределения')

plt.xlabel('Угол (радианы)')

plt.tight_layout()

plt.show()

Приложение в «Реализация алгоритмов распределения ресурсов»

# равные скорости

def equal_blind(CC_list):

D = 1 / sum(1 / c for c in CC_list)

return {'algorithm': 'Equal Blind', 'minD': D, 'meanD': D, 'sumD': D * len(CC_list)}

# максимальная суммарная скорость

def maximum_throughput(CC_list):

max_CC = max(CC_list)

active_count = CC_list.count(max_CC)

D_list = [(c if c == max_CC else 0) / active_count for c in CC_list]

return {'algorithm': 'Maximum Throughput', 'minD': min(D_list), 'meanD': sum(D_list) / len(D_list), 'sumD': sum(D_list)}

# равные нагрузки

def proportion_fair(CC_list):

D_list = [c / len(CC_list) for c in CC_list]

return {'algorithm': 'Proportion Fair', 'minD': min(D_list), 'meanD': sum(D_list) / len(D_list), 'sumD': sum(D_list)}

Приложение г «Вычисление оценок работы для каждого алгоритма»

# прогон алгоритмов

def modulate(n_ab, tests):

results = {}

# перебор N АБ

for n in n_ab:

calculations = {'Equal Blind': [], 'Maximum Throughput': [], 'Proportion Fair': []}

# 100 прогонов

for _ in range(tests):

subs = generate_ab(n) # генерация n АБ

CC_list = [s['CC'] for s in subs] # получение пропускных спос. для АБ

# перебор алгоритмов

for algo_func in [equal_blind, maximum_throughput, proportion_fair]:

# вычисление оценок

result = algo_func(CC_list)

calculations[result['algorithm']].append(result) # под именем алг. записаны результаты

# вычисление средних оценок для 100 прогонов

for algo_name in calculations:

avg = average_val(calculations[algo_name])

# пустой массив для результатов ср. оценок для каждого алгоритма

if algo_name not in results:

results[algo_name] = {'count': [], 'minD': [], 'meanD': [], 'sumD': []}

# запись результатов

results[algo_name]['count'].append(n)

results[algo_name]['minD'].append(avg['minD'])

results[algo_name]['meanD'].append(avg['meanD'])

results[algo_name]['sumD'].append(avg['sumD'])

return results

# вычисление средних значений

def average_val(list_of_dicts):

keys = ['minD', 'meanD', 'sumD']

result = {}

# перебор оценок

for key in keys:

total = 0

# перебор вычислений

for d in list_of_dicts:

# суммирование

total += d[key]

# вычисление ср. значения

result[key] = total / len(list_of_dicts)

return result

Соседние файлы в предмете Моделирование систем распределения ресурсов