誰でも勝てる三目並べ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(最弱ミニマックス法)のプログラムを作成した。ゲームの初心者に,興味を持ってもらうのに役立つと思われる。
Author And Source
この問題について(誰でも勝てる三目並べAIで遊ぼう), 我々は、より多くの情報をここで見つけました https://qiita.com/Sakurai_San/items/c99ee5cf84bc05bf1431著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .