Presentation is loading. Please wait.

Presentation is loading. Please wait.

IS313 Today: two I's AIUI hw9pr1.py an arbitrarily-good Connect 4 player! Player class Hw 10 (project) I wish there were three i's! Hw 9 is due Wed., 12/23.

Similar presentations


Presentation on theme: "IS313 Today: two I's AIUI hw9pr1.py an arbitrarily-good Connect 4 player! Player class Hw 10 (project) I wish there were three i's! Hw 9 is due Wed., 12/23."— Presentation transcript:

1 IS313 Today: two I's AIUI hw9pr1.py an arbitrarily-good Connect 4 player! Player class Hw 10 (project) I wish there were three i's! Hw 9 is due Wed., 12/23 Projects' final due dates are Th. 12/17

2 IS313 Schedule Wednesday, Nov. 18 - Classes + Objects, the AI ! Thursday, Nov. 19 - Board class due & proposal Wednesday, Dec. 2 - Networks and their analysis Thursday, Dec. 3 - progress report due – with code Wednesday, Dec. 9 - In-class project presentations Thursday, Dec. 10 - progress report due – with code Wednesday, Dec. 16 - no class meeting Thursday, Dec. 17 - Final project due! Wednesday, Dec. 23 - Player class due (Hw #9)

3 Epic winsFor ? Python had no Connect-four datatype… | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| --------------- 0 1 2 3 4 5 6 Looking further ahead? … but you're about to correct that!

4 Two-player games have been a key focus of AI as long as computers have been around… Strategic thinking == intelligence ? In 1945, Alan Turing predicted that computers would be better chess players than people in ~ 50 years… and thus would have achieved intelligence. Alan Turing memorial Manchester, England

5 500 1200 2000 2800 Computer Chess early programs ~ 1960’s Computers cut their teeth playing chess… Ranking beginner amateur world ranked world champion MacHack ( 1100 ) ~ 1967 MIT Deep Thought ~ 1989 Carnegie Mellon Slate ( 2070 ) ~ 1970’s Northwestern Deep Blue ~ 1996 IBM Deep Blue rematch ~ 1997 IBM 100’s of moves/sec 10,000’s of moves/sec 1,000,000’s moves/sec 3,500,000 moves/sec Deep Fritz: 2002 X3D Fritz: 2003 Hydra: 2006 200,000,000 moves/sec first paper: 1950 What is Hydra's chess rating?

6 How humans play games… - experts could reconstruct these perfectly - novice players did far worse… An experiment (by A. deGroot) was performed in which chess positions were shown to novice and expert players…

7 How humans play games… - experts could reconstruct these perfectly - novice players did far worse… Random chess positions (not legal ones) were then shown to the two groups - experts and novices did equally well (badly) at reconstructing them! An experiment (by A. deGroot) was performed in which chess positions were shown to novice and expert players…

8 Two-player games have been a key focus of AI as long as computers have been around… Strategic thinking == intelligence ? humans computers good at evaluating the strength of a board for a player good at looking ahead in the game to find winning combinations of moves … humans and computers have different relative strengths in these games. hw9 pr1 building an AI chess player emulating a human by evaluating a board position ex. credit

9 Computer Chess…

10 Player data Player pForX What data does a computer AI player need? Let's see a demo! string ox string tbt 'X' 'LEFT' int ply 0 DATA MEMBERS tiebreakTypechecker, O or Xmoves to look ahead surprisingly little! How about knowledge about its opponent?

11 Player Player methods __init__(self, ox, tbt, ply) __repr__(self) scoreBoard(self, b) scoresFor(self, b) tiebreakMove(self, scores) nextMove(self, b) oppCh(self) Board __init__( self, width, height ) allowsMove( self, col ) __repr__( self ) addMove( self, col, ox ) isFull( self ) winsFor( self, ox ) hostGame( self ) delMove( self, col )

12 scoreBoard(self,b) ‘X’ ‘O’ Assigns a score to any board, b 100.0 50.00.0 A simple system: for a win for a lossfor anything else Score for

13 scoreBoard Assigns a score to any board, b 100.0 50.00.0 A simple system: for a win for a lossfor anything else scoreBoard(self, b) Implementation ideas… What methods that already exist will come in handy? This doesn't seem to be looking very far ahead ! How can there be no 'X' or 'O' input? What class is this method in?

14 Looking further ahead… scoreBoard looks ahead 0 moves The "Zen" approach -- we are excellent at this! If you look one move ahead, how many possibilities are there to consider? 0-ply 1-ply A 1-ply lookahead player will "see" an impending victory. turn A score for each column…? scores p42.scoresFor( b42 ) special case

15 Two moves ahead… ? A 2-ply lookahead player will also "see" an opponent's impending victory. 's What about 3-ply? 2-ply 1-ply score turn

16 scoresFor scoreBoard looks ahead 0 moves The "Zen" approach -- we are excellent at this! If you look one move ahead, how many possibilities are there to consider? 0-ply 1-ply scoresFor( self, b ) returns a LIST of scores, one for each column you might choose to move next… 2-ply

17 b 0-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 1-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 2-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 3-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 "Quiz" 'X' 'O' you - or self - is playing 'O' Name(s): Fill in the N-ply score for a move to each column. The same move is evaluated at each ply! It's just evaluated farther into the future. Looks 0 moves into the future Looks 1 move into the future Looks 2 moves into the future Looks 3 moves into the future

18 |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| --------------- 0 1 2 3 4 5 6 | | | | | | |O| | | | | | | |X| |X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| --------------- 0 1 2 3 4 5 6 It is O’s move. What scores does a 1-ply lookahead for O assign to each move? col 0col 1col 2col 3col 4col 5col 6 It is X’s move. What scores does a 2-ply lookahead for X assign to each move? col 0col 1col 2col 3col 4col 5col 6 Which change at 3-ply? Which change at 2-ply? Example 1-ply and 2-ply lookahead scores

19 |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| --------------- 0 1 2 3 4 5 6 | | | | | | |O| | | | | | | |X| |X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| --------------- 0 1 2 3 4 5 6 It is O’s move. What scores does a 1-ply lookahead for O assign to each move? col 0col 1col 2col 3col 4col 5col 6 It is X’s move. What scores does a 2-ply lookahead for X assign to each move? col 0col 1col 2col 3col 4col 5col 6 be careful! 1005010050 10050 100 00050 0 Which change at 2-ply? 00 Which change at 3-ply? 100 Answers to example lookahead scores

20 ‘X’ ‘O’ new‘X’ Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b scoresFor each column (1) For each possible move (2) Add it to the board

21 (self) 'X' 'O' new 'X' Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b (1) For each possible move (2) Add it to the board (3) Ask OPPONENT its scoresFor each board! At what ply? [50,50,50,50,50,100,50] [ 0, 0, 0, 0, 0, 0, 0 ] scoresFor needs to return a list of 7 numbers for self these are all of the opponent's evaluations of its next move… [ 0, 0, 0, 0, 0, 0, 0 ] [50,50,50,50,50,50,50] [50,50,50,50,50,100,50]

22 (self) 'X' 'O' new 'X' Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b (1) For each possible move (2) Add it to the board (3) Ask OPPONENT its scoresFor each board! At what ply? [50,50,50,50,50,100,50] [ 0, 0, 0, 0, 0, 0, 0 ] scoresFor needs to return a list of 7 numbers for self these are all of the opponent's evaluations of its next move… [ 0, 0, 0, 0, 0, 0, 0 ] [50,50,50,50,50,50,50] [50,50,50,50,50,100,50] What score does the opponent give each?

23 (self) 'X' 'O' new 'X' Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b (1) For each possible move (2) Add it to the board (3) Ask OPPONENT its scoresFor each board! At what ply? [50,50,50,50,50,100,50] [ 0, 0, 0, 0, 0, 0, 0 ] scoresFor needs to return a list of 7 numbers for self these are all of the opponent's evaluations of its next move… [ 0, 0, 0, 0, 0, 0, 0 ] [50,50,50,50,50,50,50] [50,50,50,50,50,100,50] What score does the opponent give each? max(S) = 0 max(S) = 100 max(S) = 0 max(S) = 50 max(S) = 100 What score does self give each? 100 0 50 0

24 def scoresFor(self, b): (1) For each possible move (2) Add it to the board b (3) Ask OPPONENT its scoresFor each b at ply-1 (4) self's score is 100-max! """ MUST return a list of 7 scores!! """

25 Difficulty == Branching Factor Branching Factor Estimates for different two-player games Tic-tac-toe 4 Connect Four 7 Checkers 10 Othello 30 Chess 40 Go 300 On average, there are fewer than 40 possible moves that a chess player can make from any board configuration… 0 Ply 1 Ply 2 Ply Hydra at home in the United Arab Emirates… Hydra looks ahead 18 ply !

26 Games’ Branching Factors Branching Factor Estimates for different two-player games Tic-tac-toe 4 Connect Four 7 Checkers 10 Othello 30 Chess 40 Go 300 1 Ply 2 Ply Boundaries for qualitatively different games… 0 Ply

27 Games’ Branching Factors Branching Factor Estimates for different two-player games Tic-tac-toe 4 Connect Four 7 Checkers 10 Othello 30 Chess 40 Go 300 “solved” games computer-dominated human-dominated 1 Ply 2 Ply 0 Ply Progress

28

29 Write tiebreakMove to return the leftmost best score inside the list scores def tiebreakMove(self, scores): if self.tbt == 'LEFT': How would 'RANDOM' and 'RIGHT' work differently?

30 hw11 this week Extra: scoreBoard4Tourney and a CS 5 C4 round-robin http://www.stanford.edu/~ccecka/research/C4.html Using more scores than 0, 50, and 100 ! Problem 2: A Connect Four Player … don't give this board a 50.0 ! Problem 1: (Lab) Trying out a command-line user interface

31 User Inferfaces No undo! % ls file1.txt file2.txt file3.txt ! % rm *! (long pause…)

32 Design for software and beyond 0. Conceptual models 1. Mapping 2.Visibility 3.Feedback 4.Affordances Don Norman's key principles:

33 Conceptual Models Users always bring something "to the table" these don't work! Images from The Design of Everyday Things

34 Mapping is matching expected (spatial) relationships Where to plug in the keyboard and mouse? ?

35 Visibility is making functionality apparent Shower? Slide projector … From: www.baddesigns.com "I used to have that awful shower controller where you pull down on the nozzle to turn it on. I had to tell every guest how to do it, and when we sold our house, we got a call from the new owners about 5 days later asking how to turn on the shower. They had been taking baths for 5 days! Unbelievable." - BL

36 Feedback providing information back to the user from the UI Hall of Shame Microsoft Access Microsoft Outlook http://homepage.mac.com/bradster/iarchitect/shame.htm But some of us graphics aren't so lazy!

37 Affordances are the functions that form suggests… Opening the XO? Door handles built-in user's manual

38 Where do these go wrong? Mapping How to open this gas cap? VisibilityFeedbackAffordances This handle unfastens the seat from the floor. How to turn on this stove? Set to 5 minutes? Win NT Dialog

39 The designers aren't the users…

40 Lab time… Remember: Board and project theme are due tomorrow evening…

41 Thinking about User Interfaces Command LineTablet / Touch

42 Ambient Information

43 Display Walls

44 Thinking about User Interfaces What other types of human/computer interfaces can you think of? #1 WIMPWIMP indows cons enus ointer GUI

45 Affordances ~ physical and cultural expectations 0. Conceptual models 1. Mapping Matching user expectations e.g., Directory structures Visibility and Feedback Banks of glass doors Slide projector Affordances The functions that form suggests! Phone settings

46 Why is this a better design?

47 Keypad numbers layout A case of external inconsistency 12 3 456 7 89 7 89 12 3 456 0 0 (a) phones, remote controls(b) calculators, computer keypads

48 Affordances: to give a clue Affordances: The perceived and actual properties of an object that signal of the object can be used (from The Design of Everyday Things)

49 Physical Affordances

50 What do the Zune wheel and the door handle have in common?

51 Virtual Affordances Click Me

52 "Quiz" Name(s): Note the perceived affordances in this interface. Are there any that are missing? Misleading?

53 0-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 1-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 2-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 3-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 Solutions 50 10050 0 0 100 0 0 0 050 100 00 b ‘X’ ‘O’

54 |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| --------------- 0 1 2 3 4 5 6 It is O’s move. What scores does a 1-ply lookahead for O assign to each move? col 0col 1col 2col 3col 4col 5col 6 Which change at 2-ply?

55 Looking further ahead … 0 ply: 2 ply:3 ply: Zen choice of move: here and now | | | | |O| | | | | | | |X| | | | | | | |X|O|O| | |X| | |O|X|X|O|X|O| | --------------- 0 1 2 3 4 5 6 | | | | | | | | |X| | | | | | | |O|O| | | |X|X| |X|O| | |O|X|O| |O|X| | --------------- 0 1 2 3 4 5 6 (1) Player will win (2) Player will avoid losing (3) Player will set up a win by forcing the opponent to avoid losing X ’s move X ‘s move 1 ply: | | | | | |O|X| | | | | |O|X|X|X| |O|O| --------------- 0 1 2 3 4 5 6 X ’s move

56 ‘X’ ‘O’ new‘X’ Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b (1) For each possible move (2) Add it to the board (3) Ask OPPONENT to score each board (4) Which score will the opponent choose? 0.0 50.0 0.0 50.0 0.0 What, then, should assign for your score? ( self 's score) scoresFor each column 50.0

57 ‘X’ ‘O’ new‘X’ Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b Choosing the best move (1) For each possible move (2) Add it to the board (3) Ask OPPONENT to score each board - ply? (4) Reverse the scores 100.0 50.0 100.0 50.0 100.0

58 ‘X’ ‘O’ new‘X’ Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 b Choosing the best move 100.0 50.0 100.0 50.0 100.0 (1) For each possible move (2) Add it to the board (3) Ask OPPONENT to score each board - ply? (4) Reverse the scores (5) Find one max - that's it!

59 Connect Four | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| --------------- 0 1 2 3 4 5 6 Suppose our Board class's 2d list of lists is named self.data. What is the name of this single spot? For your convenience, the creators of Python’s library have included a Board class that can represent any size of Connect Four board... !

60 Connect Four: the object b This is true for sufficiently broad definitions of “the creators of Python’s library”... Board b def addMove(self, col, player) int NROWS int NCOLS def allowsMove(self, col) char data list char def winsFor(self, player) data members methods What is player ?

61 Connect Four: the object b This is true for sufficiently broad definitions of “the creators of Python’s library”... Board b def addMove(self, col, player) int NROWS int NCOLS def allowsMove(self, col) char data list char def winsFor(self, player) data members methods Which methods will alter b ? Which leave it alone?

62 Connect Four: Board Starting code for the Board class class Board: def __init__( self, numRows, numCols ): """ our Board's constructor """ self.NROWS = numRows self.NCOLS = numCols self.data = [] for r in range(self.NROWS): onerow = [' ']*self.NCOLS self.data += [onerow] def __repr__(self): """ thoughts? """ look familiar?

63 Connect Four: Board class Board: def __init__( self, numRows, numCols ): """ our Board's constructor """ self.NROWS = numRows self.NCOLS = numCols self.data = [] for r in range(self.NR): onerow = [' ']*self.NC self.data += [onerow] def __repr__(self): """ thoughts? """ s = '\n' for r in range(self.NROWS): s += '|' for c in range(self.NCOLS): s += self.data[r][c] + '|' return s look familiar? a bit more to go !

64 Problem 2 class Board __init__ allowsMove __repr__ addMove isFull winsFor the “constructor” checks if allowed places a checker outputs to screen checks if space left checks if a player has won Hw11 Pr2: Connect Four Board hostGame play! What's trickiest here?

65 Problem 2 class Board __init__ allowsMove __repr__ addMove isFull winsFor the “constructor” checks if allowed places a checker outputs to screen checks if space left checks if a player has won Hw11 Pr2: Connect Four Board hostGame play! What's trickiest here?

66 What's wrong here? | | | | | | | |O|O| | | |X|X| |O|X|X|X| |X|O|O|O|O|X|X| --------------- 0 1 2 3 4 5 6 def winsForHoriz(self, player): inarow = 0 for r in range(self.NROWS): for c in range(self.NCOLS): if self.data[r][c] == player: inarow += 1 else: inarow = 0 if inarow == 4: return True return False

67 Strategies? horizontals verticals diagonals ?? | | | | | | | |O|O| | | |X|X| |O|X|X|X| |X|O|O|O|O|X|X| --------------- 0 1 2 3 4 5 6

68 “Quiz” class Board { # __init__ and __repr__ methods here… # 3 data members: # self.NR == number of rows # self.NC == number of cols # self.data == the 2d list of lists of chars def mysteryMethod(self, col, ox): r = 0 while r < self.NR and self.data[r][col] == ' ': r += 1 self.data[r-1][col] = ox def allowsMove(self, col): } Briefly, what is each line of the mysteryMethod doing? Which method is it? Write allowsMove to return whether the input col is a valid column to move. ( True or False ) 1 2 3 Could it go wrong?

69 Problem 2 class Board __init__ allowsMove __repr__ addMove isFull winsFor the “constructor” checks if allowed places a checker outputs to screen checks if space left checks if a player has won Hw11 Pr2: Connect Four Board hostGame play! What's trickiest here?

70 def scoresFor(self, b): (1) For each possible move (2) Add it to the board (3) Ask OPPONENT to score each board at ply-1 (4) self's score is 100-max

71 Problem 2 class Board __init__ allowsMove __repr__ addMove isFull winsFor the “constructor” checks if allowed places a checker outputs to screen checks if space left checks if a player has won Hw11 Pr2: Connect Four Board hostGame play! What's trickiest here?

72 Strategies? horizontals verticals diagonals ?? | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|O| |O| --------------- 0 1 2 3 4 5 6

73 |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| --------------- 0 1 2 3 4 5 6 It is O’s move. What scores does a 1-ply lookahead for O assign to each move? col 0col 1col 2col 3col 4col 5col 6 Which change at 2-ply? Example 1-ply and 2-ply lookahead scores

74 0-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 1-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 2-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 3-ply scores for O: col 0col 1col 2col 3col 4col 5col 6 Solutions 50 10050 0 0 100 0 0 0 050 100 00 b ‘X’ ‘O’

75 Connect Four: the object b Board b int width str data list str data int height What is the name of the method that will construct this data?

76 Connect Four: constructor class Board: """ a datatype representing a C4 board with an arbitrary number of rows and cols """ def __init__( self, width, height ): """ the constructor for objects of type Board """ self.width = width self.height = height self.data = [] # this will be the board for row in range( 6 ): boardRow = [] for col in range( 7 ): boardRow += [' '] # add a space to this row self.data += [boardRow] Bad magic?

77 Connect Four: the object b Board b int width str data list str int height | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| --------------- 0 1 2 3 4 5 6 What is the name of the method that will print this data?

78 def __repr__(self): """ this method returns a string representation for an object of type Board """ s = '' for row in range( 6 ): s += '|' for col in range( 7 ): s += self.data[row][col] + '|' s += '\n' return s Connect Four: __repr__ To remove? To add? which row is row 0, row 1, and so on?

79 Examples def addMove(self, col, ox): row = self.height-1 while True: if self.data[row][col] == ' ': self.data[row][col] = ox row -= 1 def allowsMove(self, col): Step through this addMove method. How does it work? What's wrong? a C4 board col # 'X' or 'O' allowsMove should return True if col is a valid move; False otherwise.

80 C4 Board class: methods __init__( self, width, height ) allowsMove( self, col ) __repr__( self ) addMove( self, col, ox ) isFull( self ) winsFor( self, ox ) the “constructor” checks if allowed places a checker outputs a string checks if any space is left checks if a player has won hostGame( self ) play! delMove( self, col ) removes a checker Which is trickiest… ?

81 Checking wins… ? Thoughts? X O b corner cases?

82 A whole new class of programming CS 5 today Mon., 11/26 Wed., 11/28 Mon., 12/3 Software EngineeringFinal projectsTheoComp ! Exam review Python's Date class Wed., 12/5 Mon., 12/10 Lab and HW #11 Hey! How did you get a body? Choose your side…

83 Exam 2

84 Problem 1bProblem 2 def zerospan( L, hi, low ): for i in range(len(L)): if low <= L[i] <= hi: L[i] = 0.0 def zerospan( L, hi, low ): for x in L: if low <= x <= hi: x = 0.0 def ROOKnotcastle( B, r, c ): for row in range(len(B)): for col in range(len(B[0])): if row == r or col == c: B[row][col] = 1 This does not change L!

85 def zerospan( L, hi, low ): for x in L: if low <= x <= hi: x = 0.0 CAUTION: This does not change L! Sets values between low and hi to 0.0.

86 Exam 2 Problem 3 00 read r1 # input to r1 01 add r2 r2 r1 # add into r2 02 jnez r1 00 # if r1 != 0: goto 00 03 write r2 # else: write the sum using the stack -- Aargh! adding in place :-)

87 Exam 2 Problem 5 ruler( 1 ) ruler( 2 ) '1' '212' ruler( 3 ) '3231323' ruler( 4 ) '434243414342434' s s i def ruler( n ): s = '' for i in range(n,0,-1): s += str(i) + s return s

88 Exam 2

89

90 A whole new class of programming CS 5 today Mon., 11/26 Wed., 11/28 Mon., 12/3 Software EngineeringFinal projectsTheoComp ! Exam review Python's Date class Wed., 12/5 Mon., 12/10 Lab and HW #11 Hey! How did you get a body? Choose your side…

91 Exam 2

92

93

94

95 Two-player games have been a key focus of AI as long as computers have been around… Strategic thinking == intelligence ? … humans and computers have different relative strengths in these games. humans computers good at evaluating the strength of a board for a player good at looking ahead in the game to find winning combinations of moves


Download ppt "IS313 Today: two I's AIUI hw9pr1.py an arbitrarily-good Connect 4 player! Player class Hw 10 (project) I wish there were three i's! Hw 9 is due Wed., 12/23."

Similar presentations


Ads by Google