题目如下:
现提供50分白球、50个红球及两个容量为100个球的空桶,请设计一种100个球分桶方案,依次从两个桶中各拿一个球,使得拿到两个红球的概率最大。
答:设两桶分别为A桶与B桶,A桶中有红球x个,白球y个,那么B桶中有红球50-x个,白球50-y个。又根据题目可知,能依次从两个桶中各拿一个球,则原问题可转化为如下约束优化问题:
maxz=x(50−x)(x+y)(100−x−y)
s.t.=x+y⩾1且x+y⩽99
也就是说,原问题变成了一个在最大化取到两个红球概率下,求解每个桶中被分配到的红球数量的问题。
此题可以利用R进行作图回答:
如下图,利用R构建z的三维坐标图
如上图所示,x轴表示A桶中红球的数量,y轴表示A桶中白球的数量,z轴表示拿到两个红球的概率。由上图可知, z的最大取值应是约为0.5(当x=0,y=0时取得,但x,y不能同时为零),又为了保证每个桶里至少有一个红球,所以当x=1,y=0时可取得最大概率。另一解x=49,y=50(因为x+y≤99)与上述答案无差别,因为A,B桶同质。
结论:一个桶应放1个红球,0个白球,另一桶里放置49个红球,50个白球,最终概率为49/99 。
附R代码如下:
>install.packages("rgl")
>>install.packages("evd")
>>install.packages("MASS")
>library(rgl)
>library(evd)
>library(MASS)
> x<-0:50
> y<-0:50
> f<-function(x,y){x*(50-x)/((x+y)*(100-x-y))}
> z<-outer(x,y,f)#x,y use as parameter of f
> open3d()
> bg3d("white")
> material3d(col="black")
> persp3d(x,y,z,xlab ="x-redball",ylab="y-whiteball",zlab="z-probability",col="grey")