Как добавить массив, чтобы избежать выхода за пределы индекса? - PullRequest
0 голосов
/ 11 июня 2019

В настоящее время я пытаюсь смоделировать проблему с расписанием. Каждый день несколько прибывающих звонят в больницу, чтобы попросить о встрече. В конце каждого дня прибывающим назначается временной интервал. Первоначально я построил массив с поступлением каждый день и массив, представляющий количество временных интервалов в день. Зацикливаясь на прибытии каждого дня, прибытия назначаются на ближайший временной интервал. Однако, когда число поступлений относительно велико, код попытается назначить поступление временному интервалу за пределами конца массива сервера, то есть он ссылается на индекс, превышающий массив сервера. Есть ли способ автоматически добавить массив всякий раз, когда модель пытается назначить прибытие на временной интервал, который в будущем будет дальше, чем массив серверов в настоящее время содержит?

До сих пор я сначала сгенерировал массив (a) поступления и установил массив (ы) сервера, равный удвоенному значению скорости поступления. Хотя это работает нормально, пока не выбраны экстремальные значения (высокая лабда или низкая мю), но я хотел бы иметь немного более надежное создание s. Лично я думаю, что проще всего было бы добавить s.

def simple_model_test():

    labda, mu, Days = 10, 4, 10
    a = poisson(labda).rvs(Days)            # Generate array with number of arrivals each day
    s = np.ones_like(a) * mu                # Generate equal sizes array with time slots
    s = np.append(s, np.ones_like(a) * mu)  # Add some additional days at the end of time horizon

    for i in range(0, len(a)):              # Cycle through all days of time horizon
        j = i + 1                           # Patients cannot be served at day of arrival
        # if s[j] is empty:                   # I was trying to do something like this, but this does not work
           # s = np.append(s, mu)
        while a[i] > 0:                     # Assign all patients that arrived to a time slot
            if s[j] > 0:                    # Check if time slots are available at day j
                a[i] -= 1                   # To indicate that a patient is assigned
                s[j] -= 1                   # To indicate that a time slot is filled at day j
            else:
                j += 1                      # Check for free time slots next day
    print(s)

simple_model_test()

Таким образом, в настоящее время выдается ошибка: «IndexError: индекс 20 выходит за пределы оси 0 с размером 20». Поэтому я хотел бы добавлять s всякий раз, когда s [j] еще не существовало.

1 Ответ

0 голосов
/ 11 июня 2019

Я нашел себе простое решение (не знаю, почему я не подумал об этом раньше):

while len(s) < j + 1:
    s = np.append(s, mu)

Я поместил этот код в цикл while.

...