CS 4700: Foundations of Artificial Intelligence

CS 4700: Foundations of Artificial Intelligence

CS 4700: Foundations of Artificial Intelligence Spring 2020 Prof. Haym Hirsh Lecture 9 February 12, 2020 Reminder: Technology Policy No technology except for first four rows of left and right sides Jupyter Notebooks Postponed “Primer”: Friday 5pm in Gates G01 Friday Feb 14 5pm Gates G01 Covers: Jupyter Notebooks and .ipynb files Google Colab (online Jupyter Notebook environment) Useful Python features Bring your laptop This Friday’s Lecture Preponed To be given Today 3:30-4:20 Gates G01 Will be recorded and available on course website (must watch between Wed and following Mon) (Please come to the live version!) 1948/1951/1953 Alan Turing Turochamp Two-move lookahead Evaluation function One level “minimax” Game tree “minimax” search Game tree “minimax” search Alpha-Beta Pruning: Implementation My Turn f(s) = Max of successors My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Alpha-Beta Pruning: Implementation My Turn f(s) = Max of successors My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Alpha-Beta Pruning: Implementation (α, β) My Turn f(s) = Max of successors My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (α, β) (- , + ) My Turn f(s) = Max of successors My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Alpha-Beta Pruning: Implementation (best I can force thus far, worst my opponent can force thus far) (α, β) (- , + ) My Turn f(s) = Max of successors My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , + ) My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , + ) My Opponent’s Turn f(s) = Min of successors (- , + ) - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , + ) My Opponent’s Turn f(s) = Min of successors (- , + ) - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , + ) My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , -5) My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , -5) My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , -5) My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors (- , -5) My Opponent’s Turn f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation (- , + ) My Turn f(s) = Max of successors My Opponent’s Turn (- , -5) - 5 f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta Pruning: Implementation b (- , + ) My Turn f(s) = Max of successors My Opponent’s Turn (- , -5) - 5 f(s) = Min of successors - 5 +4 + 1 - 6 - 4 - 2 + 6 - 3 - 6 Minimax Algorithm with Alpha-Beta Pruning maxturn(s,ops,a,b): {my turn} minturn(s,ops,a,b): {opponent’s turn} if cutoff(s,depth) then return f(s) if cutoff(s,depth) then return f(s) else else val -; val +; foreach o ops foreach o ops val’ minturn(apply(s,o),ops,a,b); val’ maxturn(apply(s,o),ops,a,b); if val’ > val then if val’ < val then val val’; val val’; bestop o; bestop o; if val ≥ b then return val; if val ≤ a then return val; a max(a,val) b min(b,val) return val return val Initial call: • If I go first: maxturn(initial-state,ops,-,+) • If opponent goes first: minturn(initial-state,ops,-,+) Alpha-Beta

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    81 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us