与阿尔法狗这些人工智能玩石头剪刀布——有意思的脑洞

引子

人工智能领域突飞猛进,有人真的脑洞大开,想要在剪刀石头布方面赢人类。人类们,颤抖吧~

人工智能实例

别说阿尔法狗,先试试你能赢你自己的浏览器多少局,

链接在此

从概率来讲,如果你能够随机出,那么差不多每三局赢一局。

我自己亲自用鼠标试了一下,结果如下

 

我的胜率明显小于1/3,很惭愧

算法采用极大似然估计猜测你会出什么,具体可以看代码。
这段的代码你在浏览器上能够查到,这里贴出来,供参考

$(function(){
    // scissors == 0, rock == 1, paper == 2
    var count = [ [0, 0, 0], 
    [0, 0, 0], 
    [0, 0, 0] ];

    $('#btnS').click(function(){
        run(0);
    });

    $('#btnR').click(function(){
        run(1);
    });

    $('#btnP').click(function(){
        run(2);
    });

    var guess = 0;  // our guess for the next play
    var last = 0;   // user's input for the last play
    var total = 0;
    var win = 0;
    // process for every input
    function run(input) // input is for current play
    {
        total++;

        // judge and prompt result
        var resultText = '';
        if (guess == 0 && input == 1 || guess == 1 && input == 2 || guess == 2 && input == 0)
        {
            resultText = 'You win!';
            win++;
        }
        if (guess == 0 && input == 2 || guess == 1 && input == 0 || guess == 2 && input == 1)
        resultText = 'You lose!';
        if (guess == input)
        resultText = 'Tie!';
        resultText += ' You have won ' + win + '/' + total + '.';
        $('#result').html(resultText);

        // update our model
        count[last][input]++;
        last = input;

        // update guess
        // arg max_i count[last][i]
        var m = 0;
        for (var i = 1; i < 3; i++)
        if (count[last][i] > count[last][m])
        m = i;
        if (m == 0) guess = 1;
        if (m == 1) guess = 2;
        if (m == 2) guess = 0;
        $('#guess').html('Next guess: ' + (guess == 1 ? 'Rock' : guess == 2 ? 'Paper' : 'Scissors'));

        // visualize the state tranfer matrix
        for (var i = 0; i < 3; i++)
        for (var j = 0; j < 3; j++)
        $('#t' + i.toString() + j.toString()).html(count[i][j]);
    }
});

 

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据