1

免责声明:不确定问题的标题是否准确......

假设我需要在接下来的 100 分钟内洗碗。我知道我必须在最迟 100 分钟后这样做。我每 2 分钟问自己一次“我应该做还是不做?” (所以我一共问了自己50次)。每次我问自己该不该做的时候,我都想计算我做这件事的概率,然后决定我现在做不做。概率应该是这样的,如果我重复实验一百万次,那么在 2 分钟、4 分钟、6 分钟等之后我会得到几乎均匀的可能性 - 或者换句话说,做到这一点的概率。

我做了一个实验,我将个人概率设置为check_number / total_number_of_checks但是这似乎没有给出正确的结果。有任何想法吗?

# gem install ascii_charts
require 'ascii_charts'

time_frame = 100
check_frequenzy = 2
number_of_checks = time_frame / check_frequenzy

checks = (1..number_of_checks)

result = {}
checks.each do |i|
  result[i] = 0
end

10_000.times do |t|
  checks.each do |check_number|
    probability = check_number/number_of_checks.to_f
    if rand() <= probability
      # Oh no! I need to do the dishes now :-(
      result[check_number] += 1
      break
    end
  end
end

puts AsciiCharts::Cartesian.new(result.to_a).draw

#=>

950|                                                                                                                                                      
900|                *  *  *                                                                                                                               
850|                         *                                                                                                                            
800|             *                                                                                                                                        
750|                            *                                                                                                                         
700|          *                                                                                                                                           
650|                               *                                                                                                                      
600|       *                          *                                                                                                                   
550|                                                                                                                                                      
500|                                     *                                                                                                                
450|                                                                                                                                                      
400|    *                                                                                                                                                 
350|                                        *                                                                                                             
300|                                           *                                                                                                          
250|                                                                                                                                                      
200| *                                            *                                                                                                       
150|                                                 *                                                                                                    
100|                                                    *                                                                                                 
 50|                                                       *  *  *                                                                                        
  0+----------------------------------------------------------------*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 
4

2 回答 2

3

您可以使用贝叶斯定理计算这些条件概率。

T是一个随机变量,等于洗碗的时间(以分钟为单位)。

我假设概率是“线性的”(在 0 到 100 分钟之间),你的意思是,对于任何随机变量t

P[T <= t] = .01*t, 0 <= t <= 100

如果在时间 没有洗过t0碗碟,那么在接下来的两分钟内洗碗碟的(有条件的)概率由下式给出:

P[T <= t+2| T > t] = P[T <= t+2 and T > t] / P[T > t]
                   = (P[T <= t+2] - P[T <= t]) / (1-P[T <= t])
                   = (.01*(t+2) - .01t) / (1-.01t)
                   = 2/(100-t)

P[T <= t+2| T > t]读取,“概率(值)T小于或等于t+2,假设(值)T大于t”。

所以:

P[T <=   2 | T >  0] = 2/98
P[T <=   4 | T >  2] = 2/96
...
P[T <=  98 | T > 96] = 2/4
P[T <= 100 | T > 98] = 2/2

如果你放弃线性要求,对我来说,如果我们在谈论菜:

P[T <= 98] #=> 0
于 2015-03-19T21:10:02.447 回答
2

给定N完成任务的机会,每个机会的概率相等1/N,您可以使用以下算法即时选择一个随机机会。(我不了解 Ruby,所以我使用了伪代码。)

for i from 1 to N
    r = random integer from 0 to N-i inclusive
    if r == 0
        return 2*i  // wash dishes now, at the ith opportunity (2*i minutes)
                    // otherwise continue the loop

对于 的情况N=50,这意味着第一次机会的概率为p(1) = 1/50。之后,第二次机会就有概率了p(2) = 1/49。在此之后,p(3) = 1/48,以此类推,直到p(50) = 1/1,这意味着如果我们还没有完成任务,我们必须在最后机会完成任务。


我们可以通过将单个概率乘以直到给定点来确认这为每个机会提供了统一的概率。例如,抓住第四次机会的机会……

  • 在第一次机会不做任务概率是49/50
  • 在第二次机会不做任务概率是48/49
  • 在第三次机会不做任务概率是47/48
  • 在第 4 次机会完成任务概率是1/47

该产品将49/50 * 48/49 * 47/48 * 1/47 = 1/50根据需要。


换句话说:probability = check_number/number_of_checks.to_f需要改为:probability = 1.0/(number_of_checks - check_number)

这将呈现:

260|                                                                                                                *                                     
240|                                           *                                                                       *                                  
220|             *                                *  *              *              *     *              *     *  *        *  *  *              *  *       
200| *  *  *  *           *  *              *           *  *  *  *     *  *  *  *           *        *     *                       *  *              *    
180|                *  *        *  *  *  *                                            *        *  *                                      *  *             
160|                                                                                                                                                      
140|                                                                                                                                                      
120|                                                                                                                                                      
100|                                                                                                                                                      
 80|                                                                                                                                                      
 60|                                                                                                                                                      
 40|                                                                                                                                                      
 20|                                                                                                                                                      
  0+----------------------------------------------------------------------------------------------------------------------------------------------------*-
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 

如果您特别好奇,即使您不N提前知道机会的数量,您实际上也可以生成均匀分布。有关如何执行此操作的信息,请参见水库采样。

于 2015-03-19T21:12:14.180 回答