Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТПР_109.docx
Скачиваний:
10
Добавлен:
28.12.2024
Размер:
392 Кб
Скачать
☆

3.3. Решение задачи

Код выглядит следующим образом:

import numpy as np

 

# Параметры задачи

T = 5000

P_ch = 0.2

P_trans_succ_good = 0.99

P_trans_succ_bad = 0.6

P_good_to_bad = 0.3

P_bad_to_good = 0.3

max_energy = 20

 

# Функция перехода состояния среды

def next_state(current_state):

if current_state == 1:

return np.random.choice([1, 0], p=[1 - P_good_to_bad, P_good_to_bad])

else:

return np.random.choice([1, 0], p=[P_bad_to_good, 1 - P_bad_to_good])

 

# Функция моделирования процесса

def simulate(T, P_ch, P_trans_succ_good, P_trans_succ_bad):

energy = max_energy

state = np.random.choice([0, 1], p=[0.5, 0.5])

packets_transmitted = 0

 

for t in range(T):

if energy > 0:

if state == 1:

success_prob = P_trans_succ_good

else:

success_prob = P_trans_succ_bad

 

action = 1 if np.random.rand() < success_prob else 0

if action == 1:

packets_transmitted += 1

energy -= 1

else:

action = 0

 

energy = min(max_energy, energy + (1 if np.random.rand() < P_ch else 0))

state = next_state(state)

 

return packets_transmitted

 

# Запуск моделирования

n_simulations = 100

results = [simulate(T, P_ch, P_trans_succ_good, P_trans_succ_bad) for _ in range(n_simulations)]

expected_packets = np.mean(results)

print(f"Ожидаемое количество переданных пакетов за {T} временных слотов: {expected_packets}")

 

# Моделирование для 1000 временных слотов

T_1000 = 1000

results_1000 = [simulate(T_1000, P_ch, P_trans_succ_good, P_trans_succ_bad) for _ in range(n_simulations)]

expected_packets_1000 = np.mean(results_1000)

print(f"Ожидаемое количество переданных пакетов за {T_1000} временных слотов: {expected_packets_1000}")

 

# Сравнение результатов

print(f"Разница в ожидаемом количестве переданных пакетов между {T_1000} и {T}: {expected_packets - expected_packets_1000}")

 

# Реализация случайного процесса

def simulate_process(T, P_ch, P_trans_succ_good, P_trans_succ_bad):

energy = max_energy

state = np.random.choice([0, 1], p=[0.5, 0.5])

history = []

 

for t in range(T):

if energy > 0:

if state == 1:

success_prob = P_trans_succ_good

else:

success_prob = P_trans_succ_bad

 

action = 1 if np.random.rand() < success_prob else 0

if action == 1:

energy -= 1

else:

action = 0

 

energy = min(max_energy, energy + (1 if np.random.rand() < P_ch else 0))

state = next_state(state)

history.append((t, energy, state, action))

 

return history

 

# Построение процесса для 100 временных слотов для наглядности

process_history = simulate_process(100, P_ch, P_trans_succ_good, P_trans_succ_bad)

for entry in process_history:

print(entry)

 

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

P_ch_values = np.linspace(0, 1, 11)

expected_packets_per_P_ch = []

 

for P_ch_val in P_ch_values:

results = [simulate(T, P_ch_val, P_trans_succ_good, P_trans_succ_bad) for _ in range(n_simulations)]

expected_packets_per_P_ch.append(np.mean(results))

 

for P_ch_val, expected_packets_val in zip(P_ch_values, expected_packets_per_P_ch):

print(f"Вероятность получения единицы энергии: {P_ch_val}, Ожидаемое количество переданных пакетов: {expected_packets_val}")

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

На длинных временных промежутках сенсор передает больше пакетов, что свидетельствует о накопительном эффекте подзарядки и изменения состояния среды передачи данных.

Построение реализации случайного процесса, порождаемого оптимальной стратегией:

Здесь приведена часть вывода, показывающая динамику работы сенсора. В программе было выбрано 100 итераций.

Влияние вероятности получения единицы энергии на математическое ожидание количества переданных пакетов:

Результаты показали, что с увеличением вероятности получения энергии, количество переданных пакетов увеличивается. При вероятности получения энергии 0.0 сенсор передал всего 20 пакетов, тогда как при вероятности 1.0 — около 3975 пакетов.

Выявлено, что с увеличением вероятности получения единицы энергии, ожидаемое количество переданных пакетов возрастает. Это очевидно, так как больше энергии позволяет сенсору чаще передавать данные.