• Keine Ergebnisse gefunden

MAX MINMAX

N/A
N/A
Protected

Academic year: 2021

Aktie "MAX MINMAX"

Copied!
78
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungsbeispiel α-β-Algorithmus

20. April 2011 | Vorlesung 9

a

Dr. Silvia Santini

Departement Informatik, ETH Zürich

(2)

Übungsbeispiel α-β-Algorithmus

 Illustriert auf 75 Folien Schritt für Schritt den Ablauf des α-β-Algorithmus

int maxValue(Gamestate g, int α, int β) { if cutofftest(g) return eval(g);

for (GameState s=g.firstsucc; s!=g.lastsucc; s=s.nextsucc) { α = max(α, minValue(s, α, β) );

if (α >= β) break; // β-Schnitt }

return α;

}

int minValue(Gamestate g, int α, int β) { if cutofftest(g) return eval(g);

for (GameState s=g.firstsucc; s!=g.lastsucc; s=s.nextsucc) { β = min(β, maxValue(s, α, β) );

if (β <= α) break; // α-Schnitt }

return β;

(3)

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for(GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if( α ≥ +∞) break;

}

returnα;

5

(-∞, +∞) g

10 20 3 8 4 35 1 17 22

MAX MIN MAX

(4)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞));

if ( β ≤ -∞) break;

}

return β;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

MAX MIN MAX

(5)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , minValue(s, -∞, +∞));

if ( α ≥ +∞) break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞));

if ( β ≤ -∞) break;

}

return β;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(-∞, +∞)

g2

MAX MIN MAX

(6)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , minValue(s, -∞, +∞));

if ( α ≥ +∞) break;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞));

if ( β ≤ -∞) break;

}

return β;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g3, -∞, +∞)

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(-∞, +∞)

(-∞, +∞)

g2 g3

MAX MIN MAX

(7)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , minValue(s, -∞, +∞));

if ( α ≥ +∞) break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞));

if ( β ≤ -∞) break;

}

return β;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g3, -∞, +∞) cutofftest(g3))  true!!

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(-∞, +∞)

(-∞, +∞)

g2 g3

MAX MIN MAX

(8)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , minValue(s, -∞, +∞));

if ( α ≥ +∞) break;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞));

if ( β ≤ -∞) break;

}

return β;

minValue(g3, -∞, +∞) cutofftest(g3))  true!!

eval(g3) = 5

return 5

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(-∞, +∞)

(-∞, +∞)

g2 g3

MAX MIN MAX

(9)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞) break;

}

return β;

minValue(g3, -∞, +∞) cutofftest(g3))  true!!

eval(g3) = 5

return 5

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(-∞, +∞)

(-∞, +∞)

g2 g3

MAX MIN MAX

(10)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , 5 );

if ( α ≥ +∞) break;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞) break;

}

return β;

minValue(g3, -∞, +∞) cutofftest(g3))  true!!

eval(g3) = 5

return 5

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(-∞, +∞)

g2 g3

MAX MIN MAX

(-∞, +∞)

(11)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( -∞ , 5 );

if ( α ≥ +∞) break;

}

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞) break;

}

return β;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

g2

MAX MIN MAX

(-∞, +∞)

(12)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 5;

if ( α ≥ +∞) break;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞) break;

}

return β;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

g2

MAX MIN MAX

(5, +∞)

(13)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 5;

if ( α ≥ +∞ )break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(5, +∞)

g2

false!

MAX MIN MAX

(14)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ +∞) break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(5, +∞)

g2

MAX MIN MAX

next successor

(15)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ +∞) break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(5, +∞)

g2

minValue(g4, 5 , +∞)

( 5, +∞)

g4

MAX MIN MAX

(16)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ +∞) break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(5, +∞)

g2

minValue(g4, 5 , +∞) cutofftest(g4))  true!!

( 5, +∞)

g4

MAX MIN MAX

(17)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ β ) break; // β-Schnitt }

minValue(g4, 5 , +∞) cutofftest(g4))  true!!

eval(g4) = 10

return 10 maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ +∞) break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(5, +∞)

g2

( 5, +∞)

g4

MAX MIN MAX

(18)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ β ) break; // β-Schnitt

minValue(g4, 5 , +∞) cutofftest(g4))  true!!

eval(g4) = 10

return 10 maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , minValue(s, 5 , +∞) );

if ( α ≥ +∞) break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

(5, +∞)

g2

( 5, +∞)

g4

MAX MIN MAX

(19)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = max( 5 , 10 );

if ( α ≥ +∞) break;

}

minValue(g4, 5 , +∞) cutofftest(g4))  true!!

eval(g4) = 10

return 10 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 5, +∞)

g2

( 5, +∞)

g4

MAX MIN MAX

(20)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( α ≥ +∞) break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

MAX MIN MAX

(21)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞ )break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞ , maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

false!

MAX MIN MAX

(22)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞ )break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

g2 has no more successors!

MAX MIN MAX

(23)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞ )break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

g2 has no more successors!

MAX MIN MAX

(24)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞ )break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

g2 has no more successors!

MAX MIN MAX

(25)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞ )break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞ , maxValue(s, -∞, +∞) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

g2 has no more successors!

MAX MIN MAX

(26)

maxValue(g2,-∞, +∞)

cutofftest(g2) false

for (GameState s = g2.firstsucc; s != g2.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞ )break;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞ , 10 );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

( 10, +∞)

g2

MAX MIN MAX

(27)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞ , 10 );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, +∞)

MAX MIN MAX

(28)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return β;

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

maxValue(g, -

∞, + ∞)

(-∞, 10)

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

MAX MIN MAX

(29)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return β;

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

maxValue(g, -

∞, + ∞)

(-∞, 10)

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

false!

MAX MIN MAX

(30)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

maxValue(g, -

∞, + ∞)

(-∞, 10)

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

MAX MIN MAX

next successor

(31)

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞ , 10) );

if ( α ≥ 10) break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(-∞, 10)

MAX MIN MAX

(32)

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞ , 10) );

if ( α ≥ 10) break;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

minValue(g6, -∞, 10)

(-∞, 10)

(-∞, 10)

g6

MAX MIN MAX

(33)

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞ , 10) );

if ( α ≥ 10) break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

minValue(g6, -∞, 10) cutofftest(g6))  true!!

(-∞, 10)

(-∞, 10)

g6

MAX MIN MAX

(34)

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞ , 10) );

if ( α ≥ 10) break;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

minValue(g6, -∞, 10) cutofftest(g6))  true!!

eval(g6) = 20

return 20

(-∞, 10)

(-∞, 10)

g6

MAX MIN MAX

(35)

minValue(g6, -∞, 10) cutofftest(g6))  true!!

eval(g6) = 20

return 20 maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = max(-∞, minValue(s, -∞ , 10) );

if ( α ≥ 10) break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(-∞, 10)

(-∞, 10)

g6

MAX MIN MAX

(36)

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = max(-∞ , 20 );

if ( α ≥ 10) break;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

minValue(g6, -∞, 10) cutofftest(g6))  true!!

eval(g6) = 20

return 20

(-∞, 10)

(-∞, 10)

g6

MAX MIN MAX

(37)

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = 20;

if ( α ≥ 10) break;

}

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(20, 10)

MAX MIN MAX

(38)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = 20 ;

if ( 20 ≥ 10 )break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(20, 10)

MAX MIN MAX

(39)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10 , maxValue(s, -∞, 10));

if ( β ≤ -∞ ) break;

}

return β;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = 20 ;

if ( 20 ≥ 10 )break; // β Schnitt!!

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(20, 10)

β

MAX MIN MAX

(40)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10, maxValue(s, -∞, 10) );

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = 20 ;

if ( 20 ≥ 10 )break; // β Schnitt!!

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(20, 10)

β

MAX MIN MAX

(41)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(10 , 20);

if ( β ≤ -∞ ) break;

}

return β;

maxValue(g5, -∞, 10)

cutofftest(g5) false

for (GameState s = g5.firstsucc; s != g5.lastsucc; s = s.nextsucc) { α = 20 ;

if ( 20 ≥ 10 )break; // β Schnitt!!

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

g5

(20, 10)

β

MAX MIN MAX

(42)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

β

MAX MIN MAX

(43)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

β

false!

MAX MIN MAX

(44)

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return 10;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return β;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

β

g1 has no more successors!

MAX MIN MAX

(45)

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , minValue(s, -∞, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return 10;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

β

g1 has no more successors!

MAX MIN MAX

(46)

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(-∞ , 10 );

if ( α ≥ +∞) break;

}

return α;

minValue(g1, -∞, +∞)

cutofftest(g1)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = 10;

if ( 10 ≤ -∞ )break;

}

return 10;

5

(-∞, +∞) g g1

10 20 3 8 4 35 1 17 22

(-∞, 10)

β

MAX MIN MAX

(47)

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

MAX MIN MAX

(48)

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

false!

MAX MIN MAX

(49)

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

MAX MIN MAX

(50)

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g9, 10, +∞)

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g7.firstsucc; s != g7.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

(10, +∞)

g8

(10, +∞)

g9

MAX MIN MAX

(51)

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

minValue(g9, 10, +∞) cutofftest(g9))  true!!

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g7.firstsucc; s != g7.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

}

(10, +∞)

g8

(10, +∞)

g9

MAX MIN MAX

(52)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

minValue(g9, 10, +∞) cutofftest(g9))  true!!

eval(g9) = 8

return 8 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

(10, +∞)

g9

MAX MIN MAX

(53)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

}

minValue(g9, 10, +∞) cutofftest(g9))  true!!

eval(g9) = 8

return 8 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

(10, +∞)

g9

MAX MIN MAX

(54)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , 8);

if ( α ≥ +∞) break;

minValue(g9, 10, +∞) cutofftest(g9))  true!!

eval(g9) = 8

return 8 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

(10, +∞)

g9

MAX MIN MAX

(55)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = 10;

if ( α ≥ +∞) break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

MAX MIN MAX

(56)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = 10

if ( 10 ≥ +∞ )break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

MAX MIN MAX

(57)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

MAX MIN MAX

next successor

(58)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

( 10, +∞)

g10

minValue(g10, 10, +∞)

MAX MIN MAX

(59)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

}

maxValue(g, -

∞, + ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

( 10, +∞)

g10

minValue(g10, 10, +∞) cutofftest(g10))  true!!

MAX MIN MAX

(60)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

minValue(g10, 10, +∞) cutofftest(g10))  true!!

eval(g10) = 4 return 4 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

( 10, +∞)

g10

MAX MIN MAX

(61)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , minValue(s, 10, +∞));

if ( α ≥ +∞) break;

}

minValue(g10, 10, +∞) cutofftest(g10))  true!!

eval(g10) = 4 return 4 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

( 10, +∞)

g10

MAX MIN MAX

(62)

maxValue(g8, 10, +∞)

cutofftest(g8) false

for (GameState s = g8.firstsucc; s != g8.lastsucc; s = s.nextsucc) { α = max( 10 , 4 );

if ( α ≥ +∞) break;

minValue(g10, 10, +∞) cutofftest(g10))  true!!

eval(g10) = 4 return 4 maxValue(g, -

∞, + ∞)

cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = 10;

if ( 10 ≥ +∞)break;

}

return α;

maxValue(g, -

∞,+ ∞) cutofftest(g) false

for (GameState s = g.firstsucc; s != g.lastsucc; s = s.nextsucc) { α = max(10 , minValue(s, 10, +∞) );

if ( α ≥ +∞) break;

}

return α;

5

(10, +∞) g

10 20 3 8 4 35 1 17 22

β

(10, +∞) g7

minValue(g7, 10, +∞)

cutofftest(g7)) false

for (GameState s = g1.firstsucc; s != g1.lastsucc; s = s.nextsucc) { β = min(+∞, maxValue(s, 10, +∞));

if ( β ≤ 10 ) break;

}

return β;

(10, +∞)

g8

(10, +∞)

g10

MAX MIN MAX

Referenzen

ÄHNLICHE DOKUMENTE

Dezember 2009 war Barbara Schmidt, eine Praktikantin, beschäftigt, die in Zusammenarbeit mit der Archivleiterin den Aufbau einer Bild- datenbank online eingeleitet hat.. Der

Selbstständig arbeitenden Chiropraktoren und Chi- ropraktorinnen in der Schweiz ist es trotzdem möglich, solche Studienabgängerinnen und Studienabgänger anzustellen, wobei in

- Aufwertung der Gesundheitssprengel, Dienste näher am Bürger, - durch den vermehrten Kontakt können Themen der Prävention und Lebensstil sowie der Eigenverantwortung

Wird der Vertrag nach Ablauf der ersten 6 Monate, aber vor Ablauf von 12 Monaten gekündigt, werden 75% der Studiengebühren in Rechnung gestellt, danach erfolgt eine Verrechnung

Mitglieder Berger Georg, Direktor BBZ Olten, Olten, von Amtes wegen; Berset Nicole, Kauffrau, Niedergösgen; Froidevaux Thomas, Rektor Kaufmännische Berufsfachschule

Departement für Bildung und

Amt für Gesellschaft und Soziales Sandro Müller.. Migrationsamt

Brouwer entdeckte, dass man jeder stetigen Abbil- dung zwischen zwei geschlossenen Mannigfaltigkeiten eine homotopieinvariante ganze Zahl zuordnen kann, und nannte sie den Grad