gpt4 book ai didi

python - 蒙蒂霍尔模拟出了问题(python)

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:38 25 4
gpt4 key购买 nike

#
# Monty Hall Problem Simulation
# Author: Ryan Sturmer
#

import random

def play_round(doors, switch):

# Choose the location of the car
car = random.randint(1, doors)

# Contestant chooses a door
initial_choice = random.randint(1, doors)

# Monty opens ALL the other doors except one
if initial_choice != car:
monty_leaves = car # If the car wasn't chosen, Monty is forced to reveal its location
else:
while True:
monty_leaves = random.randint(1, doors)
if monty_leaves != initial_choice:
break

# monty_leaves is now the door that Monty DIDN'T open
if switch:
final_choice = monty_leaves
else:
final_choice = initial_choice

victory = (final_choice == car)

return victory, initial_choice, final_choice, car

def simulation(iterations, doors=3):
games_won_switch = 0
games_won_noswitch = 0
for i in range(iterations):
won_game, intial_choice, final_choice, car = play_round(doors, False)
if(won_game):
games_won_noswitch += 1
won_game, intial_choice, final_choice, car = play_round(doors, True)
if(won_game):
games_won_switch += 1

print ""
print " Monty Hall Simulation"
print "---------------------------------------------"
print " Iterations: %d" % iterations
print " Games won when switching doors: %d (%g%%)" % (games_won_switch, 100*float(games_won_switch)/float(iterations))
print "Games won when NOT switching doors: %d (%g%%)" % (games_won_noswitch, 100*float(games_won_noswitch)/float(iterations))

================================================== =============================

我从github上找到了这段代码。当我运行此代码时,games_won_switch 和 games_won_noswitch 的总和不等于迭代。(例如,如果我设置迭代 1,000 -> 它会显示 996、1,001、1,008,而不是精确的 1,000)

我该如何解决这个问题?

最佳答案

代码没有错误;它运行模拟两次:

一次是玩家选择每次换门,另一次是玩家选择从不换门。然后它会打印两次模拟的结果。

结果来自独立模拟。

for i in range(iterations):

# Sim with player choose to open the door each time
won_game, intial_choice, final_choice, car = play_round(doors, False)
if(won_game):
games_won_noswitch += 1

# Sim with player choose NEVER to open the door
won_game, intial_choice, final_choice, car = play_round(doors, True)
if(won_game):
games_won_switch += 1

因此,由于 sim(open=True) 不是 (1 - sim(open=False)),而是两组模拟的结果,因此加法结果的总和可能无法精确地等于试验次数。

关于python - 蒙蒂霍尔模拟出了问题(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com