17
1 • Decisions in games • Minimax algorithm α-β algorithm • Tic-Tac-Toe game

• Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

1

• Decisions in games

• Minimax algorithm

• α-β algorithm

• Tic-Tac-Toe game

Page 2: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

Games

2

Othello Chess TicTacToe ……

Page 3: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

3

Games as search problems

ゲームはAIにおける、最も古くから力を入れられている分野の1つです。限られた時間の中で答えを見つけることはとても難しい

チェスゲームでは

35通りの置き方があり、レイヤーは50回移動することができる。

つまり、探索木には合わせると35100もの葉が存在することになります。

このような複雑なゲームにはある程度の場所で妥協する必要があります。これは情報がないのではなく、いかなる動きに対する正確な結果を計算する時間がないからです。

この点で、ゲームは標準的な検索問題よりも現実の世界に似ています。

まずはじめに三目並べを例に、理論上最高の手を見つける方法を分析することから始めましょう。

Page 4: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

4

Perfect two players game

問題は以下の要素から構成されます: • 初期状態: ボードの場所、それぞれの動きの指標 • オペレータ: 定められた動き • 終了状態: ゲームが終了する状態 • 効用関数: +1, -1, または 0のように数値(評価値)を与えます.

コンピュータは相手が取りうる動き(手)の中で正しい動き(手)を含む戦略を見つけなければなりません。そして、最終状態の勝者を導き出し、その流れの最初の一手を選びます。 重要: 効用関数 はどの動きが最高の動きであるかを決定するじゅうような構成要素です。

Page 5: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

5

Minimax

5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する. • この評価値を探索木の1つ上のレベルのノードの評価値を得るために使う(どちらの手番かによってどのノードの評価値を選ぶかは変わる). • これを末端から根まで繰り返す. • コンピュータは最も評価値の高いものを選ぶ.

L2 (minimum in L3)

L3

L1 (maximum in L2)

A2

A31

A1 A3

A11 A12 A13 A22 A23 A21 A32 A33

5 2 2 4 6 14 8 12 3

2 3

3

2

ゲームは、自分にとっては最も有利な手を自分が打ち(max)、次に相手が自分にとって最も不利な手を打ち(min)、それらが交互に繰り返されることによって成り立ちます。

Page 6: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

MinMax - Searching tree

- Ex: Tic-Tac-Toe (symmetrical positions removed)

Page 7: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

- Min-Max 探索における評価値の動きの例

Page 8: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

8

MinMax (GamePosition game) {

return MaxMove (game);

}

MinMove (GamePosition game) {

best_move <- {};

moves <- GenerateMoves(game);

ForEach moves {

move <- MaxMove(ApplyMove(game));

if (Value(move) < Value(best_move)) {

best_move <- move;

}

}

return best_move;

}

MaxMove (GamePosition game) {

if (GameEnded(game)) {

return EvalGameState(game);

} else {

best_move <- {};

moves <- GenerateMoves(game);

ForEach moves {

move <- MinMove(ApplyMove(game));

if (Value(move) > Value(best_move)) {

best_move <- move;

}

}

return best_move;

}

}

A2

A31

A1 A3

A11 A12 A13 A22 A23 A21 A32 A33

5 2 2 4 6 14 8 12 3

2 3

3

2 CPの動き

相手の動き

Page 9: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

9

http://fuktommy.com/java/

Page 10: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

10

MinMax (GamePosition game) {

return MaxMove (game);

}

MinMove (GamePosition game) {

best_move <- {};

moves <- GenerateMoves(game);

ForEach moves {

move <- MaxMove(ApplyMove(game));

if (Value(move) < Value(best_move)) {

best_move <- move;

}

}

return best_move;

}

MaxMove (GamePosition game) {

if (GameEnded(game)) {

return EvalGameState(game);

} else {

best_move <- {};

moves <- GenerateMoves(game);

ForEach moves {

move <- MinMove(ApplyMove(game));

if (Value(move) > Value(best_move)) {

best_move <- move;

}

}

return best_move;

}

}

A2

A31

A1 A3

A11 A12 A13 A22 A23 A21 A32 A33

5 2 2 4 6 14 8 12 3

2 3

3

2

Page 11: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

11

まとめると:

コンピュータは最後に一番高い評価値を選ぶ. しかし相手プレイヤーもまた自分にとって良い手を選びます。したがって相手プレイヤーはコンピュータの評価値の最小を選びます。(コンピュータにとって評価値が低いということは自分にとって有利であるから)

<Minimax 法>

想定される最大の損害が最小になるように決断を行う戦略。将棋やチェスなどコンピュー

タに思考させるためのアルゴリズムの一つ。

実行例1

Page 12: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

12

A2

A31

A1 A3

A11 A12 A13 A22 A23 A21 A32 A33

5 2 4 6 14 8

α= 12

α=-999 β=3

β=999

初期値

β =2

α=3

3

2

L3 (maximum in L4)

L2 (minimum in L3)

L1 (maximum in L2)

探索のスピードを早めるためにこの分岐をカットする。 2 3 1

5 9

A121 A122 A123

α=12 β=3 α > β

α=3 β=2 α >= β

α-β pruning (Alpha-Beta法)

実行例2

A121の評価値が12と決定したとき、A12の評価値は12以上だと確定する。(A121,A122,A123の最大値がA12の評価値になる)よってA12の評価値がA1に選ばれることはなくなった。( A1の評価値はA11,A12,A13の最小値が選ばれる。)ので、A122,A123の評価値を計算する必要がないの

でカットする。

Page 13: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

13

MinMove (GamePosition game, Integer alpha, Integer beta) {

if (GameEnded(game) || DepthLimitReached()) {

return EvalGameState(game, MIN);

}

else {

best_move <- {};

moves <- GenerateMoves(game);

ForEach moves {

move <- MaxMove(ApplyMove(game), alpha, beta);

if (Value(move) < Value(best_move)) {

best_move <- move;

beta <- Value(move);

}

// Ignore remaining moves

if (beta < = alpha)

return best_move;

}

return best_move;

}

}

MaxMove (GamePosition game, Integer alpha, Integer beta) {

if (GameEnded(game) || DepthLimitReached()) {

return EvalGameState(game, MAX);

}

else {

best_move <- {};

moves <- GenerateMoves(game);

ForEach moves {

move <- MinMove(ApplyMove(game), alpha, beta);

if (Value(move) > Value(best_move)) {

best_move <- move;

alpha <- Value(move);

}

// Ignore remaining moves

if (alpha >= beta)

return best_move;

}

return best_move;

}

}

α=12 β=3 α >= β

α=3 β=2 α >= β

Page 14: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

14 14

まとめ

<α-β 法(刈)>

Minimaxを改良したもの。枝刈りを行うことでMinimaxより評価するノードを抑えている

ゲームは、自分にとっては最も有利な手を自分が打ち(max)、次に相手が自分にとって最も不利な手を打ち(min)、それらが交互に繰り返されることによって成り立ちます。

<Minimax algorithmとα-β algorithmの違い>

Minimax法ではすべてを探索し最良の手を選択するのに対して、α-β法は、minimax法で採用さ

れないと判断された手については、そこから先を探索しないことで無駄な探索に費やす時間を

カットしている。また、α-β法による結果はminimax法での結果と同じになる。

枝刈りを行うことにより探索がminimax法より早く終わるのでα-β法のほうが効率的である。

Page 15: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

15

Tic Tac Toe game // 評価する.

public int evaluate(int depth, int level, int refValue) {

int e = evaluateMyself();

if ((depth==0)||(e==99)||(e==-99)||((e==0)&&(Judge.finished(this)))) {

return e;

} else if (level == MAX) {

int maxValue = -999;

Vector v_child = this.children(usingChar);

for (int i=0; i<v_child.size(); i++) {

SymTic st = (SymTic)v_child.elementAt(i); //st is a move

int value = st.evaluate(depth, MIN, maxValue);

if (value > maxValue ) {

maxChild = st;

maxValue = value; //maxValue = α

}

if (value > = refValue) { //refValue = β

return value;

}

}

return maxValue;

}

else {

int minValue = 999;

Vector v_child = this.children('o');

for (int i=0; i<v_child.size(); i++) {

SymTic st = (SymTic)v_child.elementAt(i);

int value = st.evaluate(depth-1, MAX, minValue);

if (value < minValue) {

minValue = value; // minValue = β

}

if (value <= refValue) { // refValue = α

return value;

} }

return minValue;

}}

private int evaluateMyself() {

char c = Judge.winner(this);

if (c == usingChar) { //win the game

return 99;

} else if (c != ' ') { //lose the game

return -99;

} else if (Judge.finished(this)) { //draw the game

return 0;

}

In SymTic.java

Page 16: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

16

Work in class:Take a look of two web sites and make your own example search tree.

Othello Game (Min-Max): http://uguisu.skr.jp/othello/minimax.html α-β http://hp.vector.co.jp/authors/VA015468/platina/algo/2_3.html

Page 17: • Decisions in games • Minimax algorithm • Tic-Tac-Toe game...5 Minimax 5つのステップから構成されます: • ゲーム木の全体を生成する. • 木の末端ノードに評価値を得るために効用関数を適用する

17

Home work for practice: 課題をするにあたってやってほしいこと: (1) TicTacToe game Java プログラムをダウンロードする (2) 実行する (3) ソースコードを読み理解する (4) “ゲームAI"をキーワードにして検索し、出てきた記事を読む 課題: 自分の言葉で以下のアルゴリズムを説明しなさい (1) MinMax (2) α-β