先由一个经典的问题引入
有 n 个奖陆续出台,每一个奖可以选择选或者不选,每个奖只能在出台的时候选,并且只能选一个奖,每出台一个可以和前面的比较价值大小,问想得到价值最大的奖的最优策略。
这是经典的秘书问题。
赔率算法
将其抽象为个一个数学问题:
有 n 个 0/1 独立随机变量 a1,a2,...,an,E[ai]=pi,可以从前向后观测每个 ai 的取值,并选择是否停止,求策略使得停止位置是最后一个 1 的概率最大。
上面那个问题相当于是 pi=i1,表示第 i 个奖是前缀最大值。
由于变量独立,所以前面的结果不会影响后面的,也就是如果 [1,i−1] 都没有停,那么 i 开始的决策将与前面无关。
设 fi 表示从 i 开始进行决策,能得到的最大概率。
可以得到:
fi=(1−pi)fi+1+pimax(fi+1,j=i+1∏n(1−pj))=max(fi+1,(1−pi)fi+1+pij=i+1∏n(1−pj))
左边转移表示不停,右边表示能停就停,答案就是 f1。
从左边部分可以发现 fi 一定单调不增,而如果从右边转移说明 j=i+1∏n(1−pj)>fi,而 j=i+1∏n(1−pj) 显然单调增,所以说肯定可以找到一个断点 T,满足 ≥T 的都从右边转移,然后 f1=fT。
那么直接全部由右边转移,然后找到最后一个 fi<fi+1 的位置即可。
fi=(1−pi)fi+1+pij=i+1∏n(1−pj)
暴力展开,得到:
fi=j=i∑npjk=i∏n[j=k](1−pk)
在前面加入一项得到 fi−1,令 pi−1=p′
fi−1=(1−p′)fi+p′j=i∏n(1−pj)fi−fi−1=p′fi−p′j=i∏n(1−pj)=p′j=i∑npjk=i∏n[j=k](1−pk)−p′j=i∏n(1−pj)=p′j=i∏n(1−pj)k=i∑n1−pkpk−p′j=i∏n(1−pj)
因此 T 是满足 ∑i=Tn1−pipi≥1 的最大的 T。
由于后面的转移全部都是选右边的转移,所以用语言可以表示为前面 T 个全部放弃,后面遇到一个 1 就直接选,
该算法称为赔率算法(odds algorithm)。
回到最开始的问题,我们现在解决它。
设 ri=1−pipi=i−11 。
我们求解 limn→∞ 的策略。
i=T∑ni1≥∫Tnx1dx∫Tnx1dx=lnn−lnT=1
轻松解得 T=n/e,这就是最优策略。
算一下得到最大值的概率,由于 ∑i=Tn1−pipi=1。
所以
fT=i=T∏nii−1=nT−1=e1
其他问题
未完待续。