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

Приложение в «Вычисление средней скорости передачи двумя способами»

def get_avg_R(slot_resource_blocks, subs, sub_idx, slot_idx):

packs_sum = 0

for i in range(max(0, slot_idx - 1 - y_slot), slot_idx):

sub_slot_res_block_cnt = slot_resource_blocks[i].count(sub_idx)

packs_sum += subs[sub_idx][i] * sub_slot_res_block_cnt

return packs_sum / y_slot

def get_avg_R_smooth(slot_resource_blocks, subs, sub_idx, slot_idx, sub_R_mean_list):

betta = 1 / y_slot

return (1 - betta) * sub_R_mean_list[sub_idx] + betta * sum(

[subs[sub_idx][slot_idx] for res_sub_idx in slot_resource_blocks[-1] if res_sub_idx == sub_idx]) / T_rb

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

# сортировка аб по приоритетам

def filter_and_sort(priorities, sub_with_full_buffer):

sorted_indices = np.argsort(priorities)

return [idx for idx in sorted_indices if idx in sub_with_full_buffer]

# Equal blind

def equal_blind(sub_R_mean_list, sub_with_full_buffer):

priorities = [1 / r if r > 0 else 1 for r in sub_R_mean_list]

return filter_and_sort(priorities, sub_with_full_buffer)

# Maximum throughput

def maximum_throughput(subs_slot_CC, sub_with_full_buffer):

return filter_and_sort(subs_slot_CC, sub_with_full_buffer)

# Proportional fair

def proportional_fair(subs_slot_CC, sub_R_mean_list, sub_with_full_buffer):

priorities = [cc / (rm if rm > 0 else 1) for cc, rm in zip(subs_slot_CC, sub_R_mean_list)]

return filter_and_sort(priorities, sub_with_full_buffer)

# получаем индекс абонента, котором передаем данные в зависимости от алгоритма распределения

def get_sub_index(subs_slot_CC, algorithm, sub_with_full_buffer, sub_R_mean_list):

match algorithm:

case 'Equal Blind':

return equal_blind(sub_R_mean_list, sub_with_full_buffer)

case 'Maximum Throughput':

return maximum_throughput(subs_slot_CC, sub_with_full_buffer)

case 'Proportional fair':

return proportional_fair(subs_slot_CC, sub_R_mean_list, sub_with_full_buffer)

return 0

Приложение д «Запуск программы, построение графика»

def modeling():

plt.figure(figsize=(12, 6))

for subs_cnt in subs_list:

for lambd in lambd_list:

subs, packs = generate_ab(subs_cnt, lambd)

for alg in algoritm_list:

score = get_avg_score(subs, packs, alg)

key = f'{subs_cnt} {alg}'

if lambd == lambd_list[0]:

buffer_scores_by_alg[key] = []

buffer_scores_by_alg[key].append(score)

print(f'lam : {lambd}, метод :{alg}, абонентов : {subs_cnt}, V : {score}')

# Отрисовка графиков

for key, buffer_scores in buffer_scores_by_alg.items():

plt.plot(lambd_list, buffer_scores, marker='o', label=key)

plt.title(f"Зависимость среднего объёма данных в буферах от интенсивности потока (SLOTS={SLOTS})")

plt.xlabel("Интенсивность входного потока (λ)")

plt.ylabel("Средний суммарный объём в буферах")

plt.legend()

plt.grid()

plt.show()

modeling()

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