我是python新手,我正在努力为学校解决这个问题
航空公司发现,每个预订座位的乘客都无法独立于其他乘客以概率q出现。所以A航空公司总是为他们的n个航班出售n张机票−一个座位的飞机,而航空公司B总是为他们的n销售2n张机票− 2座飞机。哪一个更经常被超额预订
这是我的代码:
import random
arrive = [True, False]
def airline_a(q, n, sims):
sim_counter = 0
reserved_seats = []
overbooked = 0
for x in range(n):
reserved_seats.append(x)
while sim_counter != sims:
passengers = 0
for x in range(len(reserved_seats)):
success = random.choices(arrive, weights=(100 - (q * 100), q * 100), k=1)
if success == True:
passengers += 1
if passengers > n - 1:
overbooked += 1
sim_counter += 1
print("Results: ")
print(f"Probability that Airline A is overbooked: ", overbooked / sims)
airline_a(.7, 100, 1000)
我应该为航空公司B做一个类似的函数并比较两个值,但是我遇到了一个问题 问题是输出总是0。我不太明白我做错了什么
代码的主要问题是,您试图将列表与布尔值进行比较,因为
random.choice()
函数返回一个列表因此,首先您必须获取
success
列表的第一个元素:或
第二件要记住的事,也许是最重要的一件事,就是你总是会得到0%的回报,这是因为逻辑发展的方式,统计上几乎不可能没有人不出现,只有一个人不出现,在案例a中,在超售中不会有人
示例
我做了一些测试,修改了一个人不出现的概率百分比
我想提到的是{}是一种{}概率,在这种情况下非常高,这意味着在100人中,每次模拟的平均结果是30人,这就是为什么从来没有超额预订的人
除了
0.0%
之外,我得到的第一个结果是设置q = 0.05
,因此我收到了0.007
的超售概率(即0.7%
)平面B
我不会给你写模拟B公司案例的解决方案,它是修改一行代码,你最好这样做,因为这是一个任务。然而,我也为第二个案例做了一些测试,这里的情况在统计学上变得更加有趣
通过设置一个
q = 0.4
,我们得到的平均超售概率为0.97
(97%
),平均超售概率为q = 0.5
(0.45
)代码的问题是这一行:
if success == True:
。如果您尝试打印success
,它将输出[True]
或[False]
。您可以通过在if
语句中取success
的第一个值来解决此问题,如下所示:为了简化代码:
将代码更改为以下内容以修复错误,但是变量
passengers
的计数将保持在变量n
之下,仍然会产生0,因此请尝试减小n的值或减小q
的值:有关
random.choices()
的说明,请访问以下链接random.choices()
正在返回一个列表,因此它永远不会像返回success == ['True']
那样返回success == True
。尝试修复以下问题:其次,你可能需要稍微调整一下你的功能。您的最大座位数为100…然后在100个座位中选择.30真、.70假。要超额预订,您需要所有的Pasanger返回为True(这样您将有乘客>;n-1(即100名乘客>;99名乘客)
你必须把你的q改为一个很小的概率(即,一个乘客确实表现出的高概率,这样你就可以得到所有100人都出现的情况)
这样想吧,如果你把一枚硬币掷100次,你需要100个硬币的正面大于100-1。如果硬币的重量是0.30个正面和0.70个反面……理论上这是可能发生的(你可以计算出概率),你将“永远不会”实验/模拟得到100个头部。你需要一个重量为.999个头部和.001个尾巴的物体,这样你才有机会在100次投掷中得到100个头部
给了我一个输出:
你可以通过数学方法来解决这个问题,而不是通过模拟
相关问题 更多 >
编程相关推荐