【问题标题】:How to correctly run this simulation?如何正确运行此模拟?
【发布时间】:2021-12-16 08:23:36
【问题描述】:

我正在尝试创建模拟,但由于某种原因,我收到“列表索引超出范围”错误。我不确定我到底做错了什么。

import numpy as np
import math

roomPrice = 280
dayAvailable = [1, 2, 3, 4, 5]
dayDemand = [[1], [2], [3], [4], [5], [1,2], [2,3], [3,4], [4,5], [1,2,3]]
customers = np.random.poisson(lam=250, size=1000)
deny = 0
customersDenied = []
bookings = []
customersHelped = 0
capacityFull = 0

def priceAccept(p): 
    value = 1/(1+math.exp(0.025*p-7.5))
    return value

for c in customers:
    capacity = [50, 50, 50, 50, 50]
    probability = np.random.choice([0,1,2,3,4,5,6,7,8,9,], 
                                   size = c, 
                                   p = [0.15,0.05,0.1,
                                        0.05,0.1,0.2,
                                        0.1,0.1,0.05,0.1])
    for prob in probability:
        for i in dayDemand[prob]:
            if capacity[i] == 0:
                capacityFull += 1
                deny += 1
        if capacityFull == 0:
            priceAcceptCustomer = np.random.choice([1,0], size = 1, p=[priceAccept(roomPrice),1-priceAccept(roomPrice)])
            if priceAcceptCustomer == 1:
                for d in dayDemand[prob]:
                    if capacity[d-1] > 0:
                        capacity[d-1] -= 1
                        customersHelped += 1
    bookings.append(customersHelped)
    customersDenied.append(deny)

它不断在if capacity[i] == 0:返回以下内容

IndexError: 列表索引超出范围

如何修复此模拟以使其正常运行?

【问题讨论】:

  • 容量有五个元素,因此有效索引为 0 到 4。索引 5 超出范围。

标签: python


【解决方案1】:

数组索引以0 开头。所以,i 的容量最大值是4。因此,IndexError: list index out of range 将在 i 等于 5 时引发。

【讨论】:

    【解决方案2】:

    因为dayDemand的大小是10,所以capacity是5:

    print(len(dayDemand))   # 10
    print(len(capacity))    # 5
    

    如果 i > 4 在下面的循环中,你会得到这个错误,因为 capacity 不是数组的 6thcapacity[5] 元素

    for i in dayDemand[prob]:
        if capacity[i] == 0:
            capacityFull += 1
    

    【讨论】:

    • 嗯,好的。因此,如果我将 dayDemand 更改为从 0 开始并一直到 4(基本上将其全部向下移动 1),那么它应该可以工作吗?
    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2021-08-30
    • 2018-04-12
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多