Help us understand the problem. What is going on with this article?

誰でも勝てる三目並べAIで遊ぼう

はじめに

先に,Canvas を用いた三目並べの作成について報告した1。このとき,cpu が選択する一手は,乱数を用いる方法であった。これは簡単な方法であるだけに,試行してみると,非常に弱いことが分かる。三目並べ AI を強くする方法として,ミニマックス法が知られている2 3 4。参考記事2 を参照しながら,Python をJavaScript に書き直すことによって,Canvas を用いた三目並べのプログラムに組み込んだ5

ゲームの面白さは,勝ったときに,より強く感じられる。そこで,初心者でも勝てるような三目並べ AI の開発を考えた。その結果,誰でも勝てる三目並べAIが完成した6。やってみると判るように,誰でも勝てるだけでなく,負けようとしても勝ってしまう。引き分けに持ち込もうとしても,勝ってしまう。なぜ,そうなるのか,考えてみるのも面白いだろう。プログラム(最弱ミニマックス法)も置いてあるので,見ていただきたい7

ミニマックス法の実装

JavaScript に書き直したミニマックス法の実装部分を,下記に示す。

function minimax(depth) {
    // ミニマックス法で探索して,着手を返す
    if (state != GAME) { return evaluate(depth);}

    var best_value = 0;
    var value = 0;
    if (my_turn) { value = 10000;}
    else         { value = -10000;}

    for (var i = 0; i < 9; i++) {
        if (board[i] == 0) {
            put_value(i);
            var child_value = minimax(depth+1);
            if (my_turn) {
                if (child_value > value) {
                    value = child_value;
                    best_value = i;
                }
            }
            else {
                if (child_value < value) {
                    value = child_value;
                    best_value = i;
                }
            }
            undo_value(i);
        }
    }
    if (depth == 0) { return best_value;}
    else            { return value;}
}

最弱ミニマックス法の実装

誰でも勝てる三目並べAI(最弱ミニマックス法)の実装部分を,下記に示す。

function minimaxmin(depth) {
    // ミニマックスミニ法で探索して,着手を返す
    if (state != GAME) { return evaluate(depth);}

    var best_value = 0;
    var value = 0;
    if (my_turn) { value = -10000;}
    else         { value = 10000;}

    for (var i = 0; i < 9; i++) {
        if (board[i] == 0) {
            put_value(i);
            var child_value = minimaxmin(depth+1);
            if (my_turn) {
                if (child_value < value) {
                    value = child_value;
                    best_value = i;
                }
            }
            else {
                if (child_value > value) {
                    value = child_value;
                    best_value = i;
                }
            }
            undo_value(i);
        }
    }
    if (depth == 0) { return best_value;}
    else            { return value;}
}

おわりに

Canvas を用いた三目並べのプログラムに,ミニマックス法を組み込んだ。また,この最強ミニマックス法のアルゴリズムを逆にすることによって,誰でも勝てる三目並べAI(最弱ミニマックス法)のプログラムを作成した。ゲームの初心者に,興味を持ってもらうのに役立つと思われる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした