找鑰匙問題
阿新 • • 發佈:2019-01-06
小明把鑰匙丟了,只知道鑰匙肯定丟在家裡或者學校裡。如果丟在了家裡,在家裡找一次能夠找到的概率為a;如果丟在了學校裡,在學校裡找一次能夠找到的概率為b。最初小明認為鑰匙丟在家裡的概率為p。問:小明應該採取什麼策略來找鑰匙才能夠最快找到鑰匙(尋找次數儘量少)?期望尋找次數是多少?
a = 0.8 # 在家找到的概率 b = 0.4 # 在學校找到的概率 def solve(p, c): # 鑰匙在家的概率為p,返回最優決策、期望找到鑰匙所花費的步數 if c == 0: return max(1 / a, 1 / b) # 如果最後沒有找到 if p > b / (a + b): step = solve(p * (1 - a) / (1 - p * a), c - 1) ifhome = 1 + step * (1 - p * a) # 如果去家裡找,期望找到的步數 return ifhome else: step = solve(p / (1 - (1 - p) * b), c - 1) ifschool = 1 + step * (1 - (1 - p) * b) # 選取兩個兒子中期望步數較小者 return ifschool import pylab as plt import numpy as np print(solve(0.3, 200)) xs = np.linspace(0, 1, 1000) ps = [solve(i, 200) for i in xs] plt.plot(xs, ps) plt.xlabel("p") plt.ylabel("step") print(b/(a+b)) plt.plot([b/(a+b)] * 100, np.linspace(0, max(ps), 100), c='r') plt.show()