Untitled

 avatar
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