加载中…
个人资料
ylyyjjlh
ylyyjjlh
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,668
  • 关注人气:12
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一道有趣决策题-赌徒的下注策略

(2017-04-02 09:22:01)
标签:

赌徒

神仙

下注

策略

对策论

网上看到一道数学题,是这样的:
有一个赌徒,去赌场玩猜单双,猜中所押翻倍,猜错全赔。他带100元,进赌场后遇到神仙,神仙可提前告诉他结果,包赢。如果神仙一共告诉他10次结果,其中9次真,1次假(并不知道第几次告诉是假,但可以确定有且只有一次是假)。请问,赌徒最后最少能赢多少钱?


这问题很有趣,所以记在这里。
这大概是一道决策论或博弈论方面的问题,而我没玩过这些,一开始还没有认识到问题的复杂性,猜想大概以百分之50%,可以获得高收益,结果发现不对,就尝试用两种方法,4中策略来下注:
1.以固定比率10%下注
2.以固定比率50%下注
3.以固定比率90%下注
4.以可变比率9/10、 8/9 、7/8 、6/7、 5/6、 4/5、 3/4 、2/3、 1/2 、 0

获得结果如下(含本金):

                             最小收益                最大收益
固定比率10%        9196/39                46080      
 固定比率50%       23066/9                25600      
 固定比率90%       23777/7                129075/4     
  可变比率             5120                      126298/7   

至此发现问题比我想象的要复杂,它是要求最坏情况下的最好结果,即求max(min(f)),先考虑简单情况:
1.共下注两次的策略(这是一个随机性问题,下注一次时,应该无意义)
设下注比率为r,收益为s
1.1 第一次为假,第二次为真 ,则
    第一次收益    s11=100-100*r1
    次收益    s12=2*s11=2*(100-100*r1)
1.2 第一次为 ,第二次为,则
     第一次收益    s21=100-100*r1+2*100*r1
      次收益   s22=s21
当 s22=s12时,得到问题答案,经过计算得r1=1/3

2.共下注3次的策略设下注比率为r,收益为s
2.1 第一次为假,第二次为真,第三次为真,
    第一次收益    s11=100-100*r1
    次收益    s12=2*s11
   次收益     s13=2*s12
2.2 第一次为 ,第二次为第三次为真,
     第一次收益    s21=100-100*r1+2*100*r1
     次收益    s22=s21-s21*r2
     次收益     s23=2*s22
2.3 第一次为 ,第二次为第三次为
     第一次收益    s31=100-100*r1+2*100*r1
     次收益    s32=s31-s31*r2+2*s31*r2
     次收益     s33=s32
当 s33=s23=s13时,得到问题答案,经过计算得r1=1/3,r2=1/2


将以上原理推广至10次下注,经过蛮力计算,则可得:
下注比率:9/11,  4/5,  7/9,  3/4,  5/7,  2/3,  3/5,  1/2,  1/3,    0  其实,最后一个0没意义,用不着。
至少收益:102400/11

这时我们可以获得一个通式,设总共下注次数为n,则
至少收益:100*2^n/(n+1)
下注比率依次为:(n-1)/(n+1)、(n-2)/n、(n-3)/(n-1)、......

由于没玩对策论之类的数学,这可能不是一个好办法,但至少可以解决问题。

最后我将解此问题M代码附在下面。
clc;close all;clear all;
tic;
%n=9;
syms u1 u2 u3 u4 u5 u6 u7 u8 u9 u10  a0
u(1,1)=u1;
u(1,2)=u2;
u(1,3)=u3;
u(1,4)=u4;
u(1,5)=u5;
u(1,6)=u6;
u(1,7)=u7;
u(1,8)=u8;
u(1,9)=u9;
u(1,10)=u10;

t1=ones(10,10);
t2=eye(10);
y=t1-t2;
%x=zeros(1,10);

z0=100;
for i=1:11
    z(1,i)=a0;
end
%z(1,1)=a0
z(1,1)=subs(z(1,1),a0,z0);
%z=zeros(1,10)
for m=1:10
    for i=1:10
        if i<=m
            x(1,i)=u(1,i)*z(1,i);
            %xx(i)=u(1,i)*z(1,i)
        else
            x(1,i)=z(1,i);
        end
        if m==10 && i==m
                x(1,i)=0;
        end
        z(1,i+1)=z(1,i)-x(1,i)+2*x(1,i)*y(m,i);    
    end 
    w(1,m)=z(1,i+1);
    %w(1,m)
end

for m=1:10
    for i=1:10
        if i>m
            w(1,m)=subs(w(1,m),u(1,i),1);
        end
    end
    %w(1,m)
end
            
A=solve(w(1,1)-w(1,2),w(1,1)-w(1,3),w(1,1)-w(1,4),w(1,1)-w(1,5),w(1,1)-w(1,6),w(1,1)-w(1,7),w(1,1)-w(1,8),w(1,1)-w(1,9),w(1,1)-w(1,10));
u(1,1)=A.u1;
u(1,2)=A.u2;
u(1,3)=A.u3;
u(1,4)=A.u4;
u(1,5)=A.u5;
u(1,6)=A.u6;
u(1,7)=A.u7;
u(1,8)=A.u8;
u(1,9)=A.u9;
u(1,10)=subs(u(1,10),0/2);
r=u

sum=subs(w(1,1),u1,u(1,1))
toc;
    




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有