Untitled
unknown
python
2 years ago
3.2 kB
6
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