数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT

上传人:博****1 文档编号:588743421 上传时间:2024-09-09 格式:PPT 页数:29 大小:646KB
返回 下载 相关 举报
数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT_第1页
第1页 / 共29页
数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT_第2页
第2页 / 共29页
数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT_第3页
第3页 / 共29页
数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT_第4页
第4页 / 共29页
数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT》由会员分享,可在线阅读,更多相关《数学建模纸牌游戏21点(蒙特卡罗法)-课件PPT(29页珍藏版)》请在金锄头文库上搜索。

1、数学建模 纸牌游戏21点2021/8/261一.21点的蒙特卡罗算法第1步 初始化:COUNTER=0.第2步 得到1,13内的随机数x1,x2,y1,y2 计算x1,x2的和SUM1(玩家总点数 ), 的和SUM2(庄家总点数);同时庄家现出自己的第一张牌 .第3步 判断x1的值,若10,则将其值改为10,并重新计算SUM1.第4步 判断x2的值,若10,则将其值改为10,并重新计算SUM1.2021/8/262第5步 判断y1的值,若10,则将其值改为10,并重新计算SUM2.第6步 判断y2的值,若10,则将其值改为10,并重新计算SUM2.第7步 判断x1的值是否为1,若等于1将其值改

2、为11,重新计算SUM1,并判断SUM1是否大于21,若大于21则将x1改为1,并重新计算SUM1,若没有大于21则继续第9步;若x1不为1,直接进行第9步.2021/8/263第8步 判断x2的值是否为1,若等于1将其值改为11,重新计算SUM1,并判断SUM1是否大于21,若大于21则将x2改为1,并重新计算SUM1,若没有大于21则继续第10步;若x2不为1,直接进行第10步.第9步 判断y1的值是否为1,若等于1将其值改为11,重新计算SUM2,并判断SUM2是否大于21,若大于21则将y1改为1,并重新计算SUM2,若没有大于21则继续第11步;若y1不为1,直接进行第11步.202

3、1/8/264第10步 判断y2的值是否为1,若等于1将其值改为11,重新计算SUM2,并判断SUM2是否大于21,若大于21则将y2改为1,并重新计算SUM2,若没有大于21则继续第12步;若y2不为1,直接进行第12步.第11步 玩家判断SUM1是否大于等于18或大于庄家第一张牌y1的两倍,若是则玩家停止取牌,跳到第14步;若没有则继续取牌,得到1,13内的随机数xi,进行第13步.2021/8/265第12步 同第4步和第8步,判断xi的值,若10,则将其值改为10,并将其值加到SUM1;接着判断xi的值是否为1,若等于1将其值改为11,重新计算SUM1,并判断SUM1是否大于21,若大

4、于21则将xi改为1,并重新计算SUM1,若没有大于21则回到第12步;若xi不为1,直接进行第12步.第13步 庄家判断SUM2是否大于16,若是则庄家不取牌,则跳到第16步;否则庄家取牌,得到1,13内的随机数yi,进行第15步.2021/8/266第14步 同第6步和第10步,判断yi的值,若10,则将其值改为10,并将其值加到SUM2;接着判断yi的值是否为1,若等于1将其值改为11,重新计算SUM1,并判断SUM2是否大于21,若大于21则将yi改为1,并重新计算SUM2,若没有大于21则回到第14步;若yi不为1,直接回到第14步.第15步 比较SUM1和SUM2的大小, If (

5、 SUM121&SUM221) or (SUM1=21&SUM2=21),则为平局,得分SCORE=0;2021/8/267 If SUM1=21&UM221,则玩家赢,得分SCORE=3; If (SUM2=21&SUM221) or (21SUM2SUM1),则庄家赢,得分SCORE=-2; If 21SUM1SUM2 则玩家赢,得分SCORE=2; If 21SUM1=SUM2 则为平局,SCORE =0.第16步 输出得分SCORE. 停止.2021/8/268二Matlab程序function y=dian21() a=ones(8,13); %产生8*13的矩阵numz=0;num

6、w=0;pz=;pw=;totz=0; %庄家总点数totw=0; %玩家总点数numz,pz,a=choose(numz,pz,a);2021/8/269totz=totz+pz(numz);numz,pz,a=choose(numz,pz,a);totz=totz+pz(numz);numw,pw,a=choose(numw,pw,a);totw=totw+pw(numw);numw,pw,a=choose(numw,pw,a);totw=totw+pw(numw);while 1 if (totw18)|(totw (2*pz(1) ) break; else numw,pw,a=cho

7、ose(numw,pw,a); totw=totw+pw(numw);2021/8/2610 endendwhile 1 if (totz=17)&(totz=21) break; end if totz21 & totz21) | (totz=21&totw=21) SCORE=0;else if (totw=21 & totz=21) SCORE=3; else if (totz=21&totw=21) | (21totz & totztotw) SCORE=-2; else if 21totw & totwtotz SCORE=2;2021/8/2613 else if 21totw &

8、 totw=totz SCORE=0; end end end endendfprintf(玩家得分SCORE=%dn,SCORE);保存为dian21.m2021/8/2614function num,p,a=choose(num,p,a) while 1 m=fix(rand(1)*8)+1; n=fix(rand(1)*13)+1; if a(m,n)=1 a(m,n)=0; num=num+1; if n=1 if num10 n=10; end p=p n; break; endend保存为choose.m 然后在然后在matlab中输入中输入dian21,就可以得到如,就可以得到如

9、下数据下数据2021/8/2616 dian21玩家总点数SUM1=20玩家总点数SUM1=17玩家得分SCORE=2 dian21玩家总点数SUM1=20玩家总点数SUM1=22玩家得分SCORE=0 dian21玩家总点数SUM1=20玩家总点数SUM1=19玩家得分SCORE=2 dian21玩家总点数SUM1=15玩家总点数SUM1=22玩家得分SCORE=0 dian21玩家总点数SUM1=19玩家总点数SUM1=19玩家得分SCORE=0 dian21玩家总点数SUM1=14玩家总点数SUM1=18玩家得分SCORE=-2这些数据都是随机出现的。这些数据都是随机出现的。这种方法并不

10、是很好,下面对上述游戏策略进这种方法并不是很好,下面对上述游戏策略进行该进。行该进。2021/8/2617function y=dian21() n=input(请输入局数:);SUM=0;flag=input(请输入决策数:); %这是一个决策数,我们可以改变其值,测试哪一个值最优for i=1:na=ones(8,13); %产生8*13的矩阵numz=0;numw=0;pz=;pw=;totz=0; %庄家总点数totw=0; %玩家总点数2021/8/2618numz,pz,a=choose(numz,pz,a);totz=totz+pz(numz);numz,pz,a=choose(

11、numz,pz,a);totz=totz+pz(numz);numw,pw,a=choose(numw,pw,a);totw=totw+pw(numw);numw,pw,a=choose(numw,pw,a);totw=totw+pw(numw);while 1 if (totwflag)%|(totw (2*pz(1) ) break;else numw,pw,a=choose(numw,pw,a);2021/8/2619totw=totw+pw(numw); endendwhile 1 if (totz=17)&(totz=21) break; end if totz21 & totz21

12、) | (totz=21&totw=21) SCORE=0;else if (totw=21 & totz=21) SCORE=3; else if (totz=21&totw=21) | (21totz & totztotw) |(totw21 & totztotw & totwtotz) |(totz21 & totwtotw & totw=totz SCORE=0;end end end endendSUM=SUM+SCORE;%fprintf(玩家得分SCORE=%dn,SCORE);end fprintf(玩家得分平均值SCORE=%dn,SUM/n);保存为dian21.m2021

13、/8/2623function num,p,a=choose(num,p,a) while 1 m=fix(rand(1)*8)+1; n=fix(rand(1)*13)+1; if a(m,n)=1 a(m,n)=0; num=num+1; if n=1 if num10 n=10; end p=p n; break; endend 保存为保存为choose.m 然后在然后在matlab中输入中输入dian212021/8/2625 dian21请输入局数:100000请输入决策数:21玩家得分平均值SCORE=-1.351880e+00 dian21请输入局数:100000请输入决策数:2

14、0玩家得分平均值SCORE=-9.434000e-01 dian21请输入局数:100000请输入决策数:19玩家得分平均值SCORE=-3.226500e-01 dian21请输入局数:100000请输入决策数:18玩家得分平均值SCORE=-1.038300e-01 dian21请输入局数:100000请输入决策数:17玩家得分平均值SCORE=3.641000e-02 dian21请输入局数:100000请输入决策数:16玩家得分平均值SCORE=5.810000e-02 dian21请输入局数:100000请输入决策数:15玩家得分平均值SCORE=3.657000e-02 dian21请输入局数:100000请输入决策数:14玩家得分平均值SCORE=2.397000e-022021/8/2626 dian21请输入局数:100000请输入决策数:13玩家得分平均值SCORE=-1.116000e-02 dian21请输入局数:100000请输入决策数:12玩家得分平均值SCORE=-3.628000e-02 可见,在决策数可见,在决策数16时玩家的平均得分最高。时玩家的平均得分最高。 所以最终决策是:玩家的总点数大于所以最终决策是:玩家的总点数大于16就就停止取牌停止取牌2021/8/26272021/8/2628部分资料从网络收集整理而来,供大家参考,感谢您的关注!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号