对策论的蒙特卡洛求解方法

下给出一种算法,针对两人有限零和博弈——其实这种问题本质上是有一般性方程解法的,这里不做赘述——从另一个角度来看,蒙特卡洛解法似乎是将双方的同时博弈转化为一个一前一后的迭代过程。

下看一个田忌赛马的问题

田忌赛马是一个一般性 的 没有鞍点 的 两人有限零和博弈。

赢得矩阵如下:

下面给出matlab代码:

可以自己输入迭代的次数试一下

Win=[3 1 1 1 1 -1;
    1 3 1 1 -1 1;
    1 -1 3 1 1 1;
    -1 1 1 3 1 1;
    1 1 -1 1 3 1;
    1 1 1 -1 1 3]

indexNext=randi([1,6]);%首先任取一个值初始化田忌的策略
suanzi=-1;
k=input('需要计算的次数为:');
n=2*k;
result=[zeros(2,7);
    indexNext Win(indexNext,:);zeros(n-1,7)];
%下面进行循环,i中每次生成17个元素的一行
for i=3:n+2
    if suanzi==-1
        [Y,I] = sort(result(i,[2:7]),2,"ascend");
        if Y(1) ~= Y(2)
           indexNext=I(1,1);
        elseif Y(1) == Y(2) 
            temp=Y(1);
            a=length(find(Y==temp));
            indexNext=I(randi([1,a]));
        end        
        nextrow=[indexNext (Win(:,indexNext))'+result(i-1,[2:7])]; 
        result(i+1,:)=nextrow;
    else
        [Y,I] = sort(result(i,[2:7])',1,"descend");
        if Y(1) ~= Y(2)
           indexNext=I(1,1);
        elseif Y(1) == Y(2) 
            temp=Y(1);
            a=length(find(Y==temp));
            indexNext=I(randi([1,a]));
        end
        nextrow=[indexNext (Win(indexNext,:))+result(i-1,[2:7])];
        result(i+1,:)=nextrow;
    end
    suanzi=suanzi*(-1);
end

result=result([3:n+2],:);
resultFinal=zeros(k,14);
for l=1:k
    resultFinal(l,:)=[result(2*l-1,:) result(2*l,:)];
end
下面我们计算最后的三行 v
rCumulate=[0 0 0 0 0 0];
cCumulate=[0 0 0 0 0 0];
%首先我们进行田忌的策略累计
vTj=zeros(k,1);
for i=1:k
    for g=1:6
        if resultFinal(i,1)==g
            rCumulate(g)=rCumulate(g)+1;
        end
    end
    tjM=Win.*(rCumulate/i)';
    tj=min(sum(tjM,1));
    vTj(i)=tj;
end
%首先我们进行齐王的策略累计
vQw=zeros(k,1);
for i=1:k
    for g=1:6
        if resultFinal(i,8)==g
            cCumulate(g)=cCumulate(g)+1;
        end
    end
    qwM=Win.*(cCumulate/i);
    qw=max(sum(qwM,2));
    vQw(i)=qw;
end
v=(vQw+vTj)/2;
output=[resultFinal vTj vQw v];

前三十次模拟结果如下

 可以看到收敛结果符合我们的预期值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
计算机博弈理论的研究希望计算机能够像人一样、思维、判断和推理,并能够做出理性的决策。棋类博弈由于规则明确、竞技性高,且人类选手往往胜于计算机等原因,在计算机博弈理论的研究过程中一直受到重要关注和深入的探讨,并促进了计算机博弈理论的发展。传统的基于博弈树搜索和静态评估的博弈方法在国际象棋、中国象棋等棋类项目中获得了明显的成功,该类项目的盘面估计与博弈树搜索过程相对独立,棋子在盘面中的作用相对明确,且棋局中的专家规则相对较为容易概括和总结。 然而传统的博弈理论在计算机围棋博弈中遇到了明显的困难:围棋具有巨大的搜索空间;盘面评估与博弈树搜索紧密相关,只能通过对将来落子的可能性进行分析才能准确地确定棋子之间的关系;与此同时,高层次的围棋知识也很难归纳,归纳之后常有例外,并且在手工构建围棋知识和规则的过程中常会出现矛盾而导致不一致性。这些独特的因素为围棋及拥有类似性质的计算机博弈问题研究带来了新的挑战。 从2006年开始,计算机围棋博弈的相关研究有了跨越式的发展,基于蒙特卡罗模拟的博弈树搜索算法获得了重要的成功,并开始逐步引领计算机博弈理论研究的方向。在本章,我们将介绍蒙特卡罗博弈理论及其在围棋等棋类博弈中的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃花同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值