gpt4 book ai didi

r - 在 R 中模拟翻转炸薯条

转载 作者:行者123 更新时间:2023-12-02 18:12:06 26 4
gpt4 key购买 nike

我从小就有这样的疑问:

  • 假设您将 100 条炸薯条放在炉子上的平底锅上
  • 对于这个问题,我们假设每个炸薯条只能有 2 个“状态”:“面朝上”或“面朝下”
  • 每个炸薯条的每一面都需要煮 1 分钟 - 如果炸薯条的任何一面煮超过 1 分钟,就会被视为烧焦
  • 将炸薯条放在锅上,一分钟后摇动锅 - 一些炸薯条在空中翻转并“面朝上”或“面朝下”落在锅上,但有些炸薯条在空中翻转并“面朝上”或“面朝下”落在锅上。炸薯条根本没有翻过。
  • 又过了一分钟,你再次摇动锅。
  • 对于这个问题,我们假设每次摇动锅时,每个炸薯条都有 50% 的几率在空中翻转,而在空中翻转的炸薯条有 50% 的几率“面朝下”或“面朝上”落地的几率。

问题是:

  • 2 分钟后,100 条炸薯条中有多少条完全煮熟,有多少条炸焦了?
  • 需要多少分钟才​​能确保所有炸薯条两面都煮熟(即使其中许多会被烧焦)?

使用 R,我尝试为这种情况编写一个模拟:

original_data = data.frame(id = 1:100, state = "start")

number_fries_selected_in_first_flip = sample(1:100, 1, replace=F)

fries_selected_in_first_flip = sample(1:100, number_fries_selected_in_first_flip, replace=F)

这就是我陷入困境的地方 - 如果我能以某种方式“标记”所选的炸薯条,我就可以以 50% 的概率为这些炸薯条指定“烧焦/完全煮熟”状态:

status <- c("perfectly cooked","burnt")

original_data$tagged_fries_status <- sample(status, number_fries_selected_in_first_flip, replace=TRUE, prob=c(0.5, 0.5))

如果我能完成模拟,我可以将模拟扩展到第二次翻转、第三次翻转等。在模拟结束时(例如,5 次翻转后),我可以制作一个图表,显示炸薯条的数量烧焦了还是完全煮熟了。然后,我可以多次重复模拟(例如 1000 次),并找出炸薯条烧焦/完全煮熟的平均数量。

有人可以告诉我如何编写这个模拟吗?

谢谢!

最佳答案

制作包含 100 条薯条和第一面累积时间的数据框。由于第二侧的时间只是总时间 - 第一侧的时间,因此您可以将任何您想要的测试应用于最终的“时间状态”。

dfrm <- data.frame(id=1:100, time=0)
set.seed(123) # good practice in simulation
#start

dfrm$time <- sample(c(0,60), 100, repl=TRUE)
# next minute
dfrm$time <- sample(c(0,60), 100, repl=TRUE)

sum(dfrm$time == 60)

# 54

随着时间==,薯条的比例会呈指数衰减到零或总时间,这将是“未完成”的组。由于模拟是“离散的”,因此有时剩余未完成的概率会小于任何指定的量,但很难保证时间。

关于r - 在 R 中模拟翻转炸薯条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72163297/

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