Untitled
unknown
python
a year ago
3.2 kB
5
Indexable
import numpy as np import matplotlib.pyplot as plt # Функция для моделирования процесса распространения повреждений def simulate_damage_process(num_steps, num_stages, damage_probs, initial_requests): # Инициализация массивов для отслеживания состояния системы states = np.zeros((num_steps, num_stages), dtype=int) # Массив для отслеживания числа заявок на каждой стадии states[0, 0] = initial_requests # Установка начального числа заявок на первой стадии # Моделирование процесса for step in range(1, num_steps): # Проверка вероятности повреждения на каждой стадии for stage in range(num_stages): if np.random.rand() < damage_probs[stage]: # Если на текущей стадии произошло повреждение, # переносим часть заявок на следующую стадию if stage < num_stages - 1: states[step, stage + 1] += states[step - 1, stage] * 0.5 # Переносим половину заявок на следующую стадию else: states[step, stage] += states[step - 1, stage] # Если последняя стадия, заявки остаются на месте else: # Если на текущей стадии нет повреждений, заявки остаются на этой стадии states[step, stage] = states[step - 1, stage] return states # Параметры модели num_steps = 20 # Общее количество шагов моделирования num_stages = 5 # Количество стадий обработки damage_probs = np.random.rand(num_stages) # Случайные вероятности повреждений для каждой стадии initial_requests = 10 # Начальное количество заявок на первой стадии # Вывод вероятностей повреждения для каждой стадии print("Вероятности повреждения для каждой стадии:") for stage, prob in enumerate(damage_probs): print(f"Стадия {stage + 1}: {prob:.2f}") # Моделирование процесса states = simulate_damage_process(num_steps, num_stages, damage_probs, initial_requests) # Построение графика plt.figure(figsize=(10, 6)) for stage in range(num_stages): plt.plot(range(num_steps), states[:, stage], marker='o', linestyle='-', label=f'Стадия {stage + 1}') plt.title('Распространение повреждений в многостадийной СМО') plt.xlabel('Шаги моделирования') plt.ylabel('Количество заявок') plt.xticks(range(num_steps)) plt.grid(True) plt.legend() plt.show()
Editor is loading...
Leave a Comment