我目前正在尝试模拟一个日程安排问题。每天都有许多人打电话到医院要求预约。每天结束时,到达的人都会被分配一个时间段。最初,我构造了一个包含每天到达的数组和一个表示每天的时隙数量的数组。循环通过每天的到达,到达被分配到最近的时间段。然而,当到达的数量相对较高时,代码将尝试将到达分配给服务器数组末尾之外的时隙,即它引用的索引比服务器数组大。有没有办法在模型尝试将到达分配给服务器数组当前包含的将来的某个时隙时,自动追加数组?
到目前为止,我首先生成了一个到达数组(a),并将服务器数组设置为到达速率的两倍大小。虽然只要没有选择极值(高labda或低µ值)就可以工作,但我希望有一个更健壮的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超出了大小为20的轴0的边界“。所以我想在sj还不存在的时候附加s。
https://stackoverflow.com/questions/56545390
复制相似问题