数学建模纸牌游戏21点(蒙特卡罗法).ppt

上传人:牧羊曲112 文档编号:6295647 上传时间:2023-10-14 格式:PPT 页数:28 大小:579.50KB
返回 下载 相关 举报
数学建模纸牌游戏21点(蒙特卡罗法).ppt_第1页
第1页 / 共28页
数学建模纸牌游戏21点(蒙特卡罗法).ppt_第2页
第2页 / 共28页
数学建模纸牌游戏21点(蒙特卡罗法).ppt_第3页
第3页 / 共28页
数学建模纸牌游戏21点(蒙特卡罗法).ppt_第4页
第4页 / 共28页
数学建模纸牌游戏21点(蒙特卡罗法).ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《数学建模纸牌游戏21点(蒙特卡罗法).ppt》由会员分享,可在线阅读,更多相关《数学建模纸牌游戏21点(蒙特卡罗法).ppt(28页珍藏版)》请在三一办公上搜索。

1、数学建模,纸牌游戏21点,一.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.,第5步 判断y1的值,若10,则将其值改为10,并重新计算SUM2.第6步 判断y2的值,若10,则将其值改为10,并重新计算SUM2.第7步 判断x1的值是否为1,若等于1将其值改为11,重新计算SUM1,并判断SUM1

2、是否大于21,若大于21则将x1改为1,并重新计算SUM1,若没有大于21则继续第9步;若x1不为1,直接进行第9步.,第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步.,第10步 判断y2的值是否为1,若等于1将其值改为11,重新计

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

4、第12步.第13步 庄家判断SUM2是否大于16,若是则庄家不取牌,则跳到第16步;否则庄家取牌,得到1,13内的随机数yi,进行第15步.,第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(SUM121&SUM221)or(SUM1=21&SUM2=21),则为平局,得分SCORE=0;,If SUM1=

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

6、z,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=choose(numw,pw,a);totw=totw+pw(numw);,endendwhile 1 if(totz=17)for i=1:numz,if pz(i)=11 pz(i)=1;totz=totz-10;

7、b=1;break;end end if b=0 break;end endend,fprintf(玩家总点数SUM1=%dn,totw);fprintf(玩家总点数SUM1=%dn,totz);SCORE=0;if(totw21,else if 21totw 保存为dian21.m,function 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 num21 n=11;end end,if n10 n=10;end p=

8、p n;break;endend保存为choose.m 然后在matlab中输入dian21,就可以得到如下数据,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玩家得

9、分SCORE=-2,这些数据都是随机出现的。这种方法并不是很好,下面对上述游戏策略进行该进。,function 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;%玩家总点数,numz,pz,a=choose(numz,pz,a);totz=totz+pz(numz);numz,pz,a=choose(numz,pz,a);totz=totz+

10、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);,totw=totw+pw(numw);endendwhile 1 if(totz=17)for i=1:numz,if pz(i)=11 pz(i)=1;totz=totz-10;b=1;break;end end if b=0 break;e

11、nd endend,%fprintf(玩家总点数=%d,,totw);%fprintf(庄家总点数=%dn,totz);SCORE=0;if(totw21,else if 21totw 保存为dian21.m,function 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 num21 n=11;end end,if n10 n=10;end p=p n;break;endend 保存为choose.m 然后在matlab

12、中输入dian21,dian21请输入局数:100000请输入决策数:21玩家得分平均值SCORE=-1.351880e+00 dian21请输入局数:100000请输入决策数:20玩家得分平均值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-02,dian21请输入局数:100000请输入决策数:13玩家得分平均值SCORE=-1.116000e-02 dian21请输入局数:100000请输入决策数:12玩家得分平均值SCORE=-3.628000e-02,可见,在决策数16时玩家的平均得分最高。所以最终决策是:玩家的总点数大于16就停止取牌,谢谢,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号