- •1. Задача о найме персонала 4
- •Введение
- •Задача о найме персонала
- •Условие задачи
- •1.2 Формализация задачи
- •1.3 Решение задачи
- •2.3 Решение задачи
- •2. Задача о покрытии
- •2.1 Условие задачи
- •2.2 Формализация задачи
- •3. Задача о сенсоре
- •3.1. Условие задачи
- •3.2. Формализация задачи
- •3.3. Решение задачи
- •Заключение
- •Список использованных источников
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 пакетов.
Выявлено, что с увеличением вероятности получения единицы энергии, ожидаемое количество переданных пакетов возрастает. Это очевидно, так как больше энергии позволяет сенсору чаще передавать данные.
