IS313 … Monday, Nov. 8 - Classes + Objects, part 2 Monday, Nov. 15 - Project strategies & example pres. Tuesday, Nov. 9 - Date class due Tuesday, Nov.

Slides:



Advertisements
Similar presentations
KompoZer. This is what KompoZer will look like with a blank document open. As you can see, there are a lot of icons for beginning users. But don't be.
Advertisements

EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University
"Intelligent" CS 5 An object is structured data that is alive, responsible, and intelligent. Sound too friendly? This week’s objects and classes will be.
CS 4700: Foundations of Artificial Intelligence Bart Selman Reinforcement Learning R&N – Chapter 21 Note: in the next two parts of RL, some of the figure/section.
Adversarial Search Chapter 5.
Announcements Assignment #4 is due tonight. Last lab program is going to be assigned this Wednesday. ◦ A backtracking problem.
CS 61B Data Structures and Programming Methodology July 31, 2008 David Sun.
HW 6: Problems 2&3 Simulating Connect 4.
Intelligent CS 5 ? HW 11 (1 problem !) M/T sections W/Th sections due Sunday, 11/14 at midnight due Monday, 11/15 at midnight Recitation for HW11 -- Friday.
Representing a Game Board In a game, we represent the action taking place using an array – In a very simple game, we use individual variables to represent.
EECS 110: Lec 16: Projects Aleksandar Kuzmanovic Northwestern University
CIS101 Introduction to Computing Week 11. Agenda Your questions Copy and Paste Assignment Practice Test JavaScript: Functions and Selection Lesson 06,
Online Chess Project 3 Due date: April 17 th. Introduction Third in series of three projects This project focuses on adding online support –2 players.
Maze Running Robots EGR106 Project Spring Project Goal Computer control (through a Matlab program) of a Lego robot to: 1.Explore a maze (start to.
CIS 310: Visual Programming, Spring 2006 Western State College 310: Visual Programming Othello.
1 CSE1301 Computer Programming: Lecture 25 Software Engineering 2.
Every week: Sign in at the door If you are new: Fill in Registration Form Ask a Mentor how to get started Make sure you are on the Athenry Parents/Kids.
CSCI 101 Introduction to Software Development and Design.
CS 5 Today: two I's AIUI hw11pr2.py an arbitrarily-good Connect 4 player! Player class Extra: scoreBoard4Tourney an intuitive Connect 4 player: hw11pr1.html.
M1G Introduction to Programming 2 4. Enhancing a class:Room.
Abstraction IS 101Y/CMSC 101 Computational Thinking and Design Tuesday, September 17, 2013 Carolyn Seaman University of Maryland, Baltimore County.
Lecture 5 Note: Some slides and/or pictures are adapted from Lecture slides / Books of Dr Zafar Alvi. Text Book - Aritificial Intelligence Illuminated.
Adversarial Search CS30 David Kauchak Spring 2015 Some material borrowed from : Sara Owsley Sood and others.
A whole new class of programming CS 5 today HW10: Due Sun, Nov 15 Pr0: Ariane 5 Reading Pr1/Lab:the Date class Pr2 Connect4Board Pr3 Connect4Player (extra.
IS 313 Today Schedule Week 0: Classes Objects You're saying that Python's got class ? Dictionaries and Classes Week 1: Week 2: Where.
Def tomorrow(self): """Changes the calling object so that it represents one calendar day after the date it originally represented. """ if self.month in.
Adversarial Search CS311 David Kauchak Spring 2013 Some material borrowed from : Sara Owsley Sood and others.
Instructor: Vincent Conitzer
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.
Homework 11 Due ( MT sections ) ( WTh sections ) at midnight Sun., 11/14 Mon., 11/15 Problems
Game Playing. Towards Intelligence? Many researchers attacked “intelligent behavior” by looking to strategy games involving deep thought. Many researchers.
Games. Adversaries Consider the process of reasoning when an adversary is trying to defeat our efforts In game playing situations one searches down the.
W 2 L 1 sh 1 C lessons LessonSubjectBook Week 1 lesson 1Objects, names Week 1 lesson 2Statements, layout Week 2 lesson 1Functions, decomposition Week 2.
Intermediate 2 Software Development Process. Software You should already know that any computer system is made up of hardware and software. The term hardware.
Announcements This Wednesday, Class and Labs are cancelled! The last lab is due this Wednesday … how many people are planning on doing it? Finally posted.
Senior Project Poster Day 2007, CIS Dept. University of Pennsylvania Reversi Meng Tran Faculty Advisor: Dr. Barry Silverman Strategies: l Corners t Corners.
More on Logic Today we look at the for loop and then put all of this together to look at some more complex forms of logic that a program will need The.
Making Python Pretty!. How to Use This Presentation… Download a copy of this presentation to your ‘Computing’ folder. Follow the code examples, and put.
EECS 110 Projects 1&2 Juan Li – Project 1 Ning Xia – Project 2.
Backtracking and Games Eric Roberts CS 106B January 28, 2013.
HW 6: Problems 2 & 3 Simulating Connect 4. HW 6: Overview Connect 4: Variation of Tic-Tac-Toe – Board: Vertical 7x6 – Two players take alternating move.
Today’s Topics Playing Deterministic (no Dice, etc) Games –Mini-max –  -  pruning –ML and games? 1997: Computer Chess Player (IBM’s Deep Blue) Beat Human.
Intermediate 2 Computing Unit 2 - Software Development.
Chomp. How is the game played Human player goes first choose a square, all to the right and down are “eaten” computer takes a turn whoever is forced to.
Efficiently Solving Computer Programming Problems Doncho Minkov Telerik Corporation Technical Trainer.
Checkers A Matlab Project by Spenser Davison, Edward Dyakiw, Justin Pezzi, and Scott Wu.
More on Logic Today we look at the for loop and then put all of this together to look at some more complex forms of logic that a program will need The.
February 25, 2016Introduction to Artificial Intelligence Lecture 10: Two-Player Games II 1 The Alpha-Beta Procedure Can we estimate the efficiency benefit.
Strings Robin Burke IT 130. Outline Objects Strings methods properties Basic methods Form validation.
Homework 10 Due ( MT sections ) ( WTh sections ) at midnight Sun., 11/10 Mon., 11/11 Problems
Understanding AI of 2 Player Games. Motivation Not much experience in AI (first AI project) and no specific interests/passion that I wanted to explore.
IS313 Tomorrow… Wednesday, Nov Classes + Objects, part 2 Wednesday, Nov Classes + Objects, part 3 Thursday, Nov Date class due Thursday,
EECS 110: Lec 15: Classes and Objects (2)
Adversarial Environments/ Game Playing
CS Fall 2016 (Shavlik©), Lecture 11, Week 6
Introduction to Programmng in Python
Intelligent CS 5 ? This week's objects will be more adversarial…
This week's classes Connect 4 aiMove
This week's classes Connect 4 Player

Topic 1: Problem Solving
HW 6: Problems 2 & 3 Simulating Connect 4.
The Alpha-Beta Procedure
Minimax strategies, alpha beta pruning
HW 6: Problems 2 & 3 Simulating Connect 4.
EECS 110: Lec 15: Classes and Objects (2)
Minimax strategies, alpha beta pruning
Announcements Assignment #4 is due tonight. Last lab program is going to be assigned this Wednesday. ◦ A backtracking problem.
Year 8 Computer Science Digital Portfolio
Unit II Game Playing.
Presentation transcript:

IS313 … Monday, Nov. 8 - Classes + Objects, part 2 Monday, Nov Project strategies & example pres. Tuesday, Nov. 9 - Date class due Tuesday, Nov Board class due & proj. idea Monday, Nov UIs & another example presentation Wed., Dec. 1 - preliminary report due – with code Monday, Dec. 6 - In-class project presentations Tuesday, Dec. 7 - intermediate report – with code Monday, Dec no class meeting, but I'll be available... Thursday, Dec Final project due! Final HW IS 313 Schedule Final Project Tuesday, Nov no HW due Monday, Nov no class meeting (conference)

AI: Artificial Intelligence Monday, Nov. 8 - Classes + Objects, part 2 Monday, Nov Project strategies & example pres. Tuesday, Nov. 9 - Date class due Tuesday, Nov Board class due & proj. idea "High-level AI" Game-playing Natural Language Translation Task planning "Low-level AI" Robotics Sensing and reacting Computer vision Adapting to human actions

Low-level AI "Low-level AI" Robotics Sensing and reacting Computer vision Adapting to human actions What's difficult/ easy here?

IS313: software intelligence An object is structured data that is alive, responsible, and intelligent. Sound too friendly? This week’s objects and classes will be just the opposite... X to move. Is there a way to win? | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X|O| | import antigravity!

Aargh! Python has no Connect-four datatype… | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X|O| | Can I see a demo? … but we can correct that!

Designing classes 1) What data? (Data Members) 2) What are the key capabilities? (Methods) Not limited to 7x6!

Connect Four: the object b Board B int width str data list str ? int height What is the name of the method that will construct this data? Starting from B, how would you examine the string marked by the ? 3 4

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 self.data = [ [' ']*self.width ] * self.height Doesn't work! Not much of a game…

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( self.width ): boardRow = [] for col in range( self.height ): boardRow += [' '] # add a space to this row self.data += [boardRow] Better! Same idea as in Life

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 self.data = [ [' ']*self.width for row in range(self.height) ] Even shorter! What was this called again… ?

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| X O O O XX X … … … … printed version Which rows and columns are these? which is row 0 ? …

The grim task of printing … Board b int width str data list str int height | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| What is the name of the method that will print this data? 6 7 X O O O XX X … … … … Which rows and columns are these?

def __repr__(self): """ this method returns a string representation for an object of type Board """ s = '' for row in range( self.height ): s += '|' for col in range( self.width ): s += self.data[row][col] + '|' s += '\n' return s Connect Four: __repr__ What else?

>>> b = Board( 7, 6 ) >>> print b >>> LoS = [ ' ', ' ', 'OXO ', 'XXOO ', 'XOXXOX ', 'XOOXXOO' ] >>> b.set_board( LoS ) >>> print b Connect Four: set_board | | | | |O|X|O| | | | | |X|X|O|O| | | | |X|O|X|X|O|X| | |X|O|O|X|X|O|O| | | | | What is this a list of?

def set_board(self, LoS): """ this method sets the board to the list_of_strings that is input """ for row in range( ): for col in range( ): self.data[row][col] = LoS[row][col] Connect Four: set_board What goes in the blanks?

Try it! def addMove(self, col, ox): row = self.height-1 while True: if self.data[row][col] == ' ': self.data[row][col] = ox row -= 1 Step through this addMove method. How does it work? What's wrong? Try to fix it… ! a C4 board col # 'O' or 'X' | | | | |O|X|O| | | | | |X|X|O|O| | | | |X|O|X|X|O|X| | |X|O|O|X|X|O|O|

Try it! def allowsMove(self, col): a C4 board col # allowsMove should return True if col has enough space to allow a move; it should return False otherwise. | |X| | | | | | | |O| | | | | | |O|X|O| | | | | |X|X|O|O| | | | |X|O|X|X|O|X| | |X|O|O|X|X|O|O| b b.allowsMove(0) b.allowsMove(1) True False

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 What will require the most thought? set_board( self, LoS ) sets the board arbitrarily

Checking wins… ? Thoughts? X O self corner cases?

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

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: ,000,000 moves/sec first paper: 1950 What is Hydra's chess rating?

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…

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…

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

Computer Chess…

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

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

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

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 !

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 Ply 2 Ply Boundaries for qualitatively different games… 0 Ply

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

Hwks and Projects Extra: A Connect Four Player … Homework 8: A Connect Four Board … due 11/16/10 ok anytime well, by the end of the term…

Hwks and Projects Homework 8, part 0: final project proposal Pre-planned projectsIdeasOpen-ended 4) robot navigation: pyRobot 2) 3d simulation game: vPool 1) Web-based Text Clouds 3) implementing Picobot! Flash Cards ? pySQL ? Image processing using pyGame: "snake" others welcome! Extra: A Connect Four Player … Homework 8: A Connect Four Board … due 11/16/10 ok anytime well, by the end of the term… Low-level computation?

Project Deliverables Proposal due 11/16/10 Preliminary milestone due 12/1/10 one-page ( proposal.txt ) that includes your project choice and a first description of the project-specific ideas - also, what libraries you'll use Working code ( preliminary.zip ) that uses your libraries and shows access to the data you need (sound, graphics, etc.) Also, a plan for the next steps to take – initial functions and/or classes you plan to build. Presentation / intermediate milestone due 12/6 & 12/7 The presentation is ~10 minutes of your vision, the technical details, and a demo of what you have so far. The intermediate.zip milestone should have the presentation, demo, and a final plan, including classes. Project due 12/17/10 Your final project ( project.zip ), with documentation and "future work."

Project ideas: sales pitches from well-defined to open-ended... may help fill in existing ideas...

Hey! Watch where you're going! The pyRobot project Goal: get from Pt A to Pt B 2d Roomba simulator How do I control this robot !?! Pt B Pt A

The pyRobot project Robot control continuously runs three things: SENSE [x,y,thd], bump = self.getData() while True:

The pyRobot project Robot control continuously runs three things: SENSEPLAN [x,y,thd], bump = self.getData() if bump[0] == True or bump[1] == True: print 'BUMP!', print ' [Left bump sensor:', bump[0], '] ', print ' [Right bump sensor:', bump[1], '] ' robotTask = STOP STOP is one of the robot's states. Every 40th of a second, the robot runs through this loop, sets the robot's state and sets the velocities accordingly. Don't sleep ! while True:

The pyRobot project Robot control continuously runs three things: SENSEPLANACT [x,y,thd], bump = self.getData() if bump[0] == True or bump[1] == True: print 'BUMP!', print ' [Left bump sensor:', bump[0], '] ', print ' [Right bump sensor:', bump[1], '] ' robotTask = STOP STOP is one of the robot's states. Every 40th of a second, the robot runs through this loop, sets the robot's state and sets the velocities accordingly. Don't sleep ! if robotTask == STOP: self.setVels(0,0) robotTask = KBD while True:

Maps are set at the very bottom of the main.py file: Required Extra

PicoRoomba! The pyRobot project ~ additions Goal: get from Pt A to Pt B Start in an unknown location on the map… Optional Use only the bump sensors… (no range sensing) Implement a niftier interface… Use noisy (realistic) data Main vPython Roomba? ASCII Roomba?

PicoRoomba! The pyRobot project ~ additions Goal: get from Pt A to Pt B Start in an unknown location on the map… vPython Roomba? ASCII Roomba? Use only the bump sensors… (no range sensing) Implement a niftier interface… Try it out on a Roomba… Use noisy (realistic) data Optional Main

Let’s play! I’ll take your cue. 3d simulator, VPython The vPool project

VPython? Easily installable for windows… Also installable on the Mac… - it is on the Macs in the CS lab… A simple example: from visual import * c = cylinder() What's visual? What's c? at least it's not Visual C… - Not really installable under Linux

The vPool project from visual import * floor = box( pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue) ball = sphere( pos=(0,4,0), radius=1, color=color.red) ball.velocity = vector(0,-1,0) dt = 0.01 while True: rate(100) ball.pos = ball.pos + ball.velocity*dt if ball.y < ball.radius: ball.velocity.y = -ball.velocity.y else: ball.velocity.y = ball.velocity.y - 9.8*dt How many classes? How many objects? data members? What's the if/else doing?

The vPool project Phunky Fisicks is welcome! Collisions with walls? Collisions with other pool balls? Pockets? A few examples to get you thinking… Linux users are welcome! But they should use another OS…

Picobot returns!

Picobot is a finite-state machine! Basic idea: implement Picobot (the homework problem from Week 1) Requirements: The Picobot project Text and graphical output Read Picobot program from a file Read maze description from a file Track visited/unvisited squares Prohibit illegal moves

Current State: 1 Current Rule: 1 N*W* -> X o++o+o+++ +oooooo o++ + +oooo o + +oooo o Rooo The Picobot project First, prototype it as ASCII-bot Picobot started here… and is now here…

Text and graphical output Read Picobot program from a file Read maze description from a file Track visited/unvisited squares Prohibit illegal moves Stop when maze completely visited The Picobot project Required capabilities:

The Picobot project Choice of graphical packages vpython turtle csplot/csgrid (Game-of-Life) Start/stop/step feature Maze editing Pebble dropping Be inventive! csplot or csgrid version… Graphical picobot: Lots of options…

Hey! Picobot in 3d…Mine's going to be in 5d! The Picobot project

Text Clouds project tag cloud '07 ?

Text Clouds project text cloud Summary of the words in a body of text, sized and painted according to their frequency. this doesn't look nearly colorful enough…

Text Clouds project From text… … to cloud 1.Start with entered webpage (URL) 2.Read in text 3.Create list of words out of text 4."Clean" the words 5."Stem" the words 6.Count the words 7.Return a string with frequencies 8.Add advanced features… Huh?

Text Clouds project Spamming spammers spammed spam. Spam spam spam! I love spam! ['spamming', 'spammers', spammed', 'spam.', 'spam', 'spam', 'spam!', 'I', 'love', 'spam!', 'page', '2'] Page 2

Text Clouds project Spamming spammers spammed spam. Spam spam spam! I love spam! ['spamming', 'spammers', spammed', 'spam', 'spam', 'spam', 'spam', 'love', 'spam', 'page', '2'] ['spamming', 'spammers', spammed', 'spam.', 'spam', 'spam', 'spam!', 'I', 'love', 'spam!', 'page', '2'] Page 2 What changed here?

Text Clouds project Spamming spammers spammed spam. Spam spam spam! I love spam! ['spamming', 'spammers', spammed', 'spam', 'spam', 'spam', 'spam', 'love', 'spam', 'page', '2'] ['spamming', 'spammers', spammed', 'spam.', 'spam', 'spam', 'spam!', 'I', 'love', 'spam!', 'page', '2'] ['spam', 'spam', spam', 'spam', 'spam', 'spam', 'spam', 'love', 'spam', 'page', '2'] Page 2 What changed here? What next?

Text Clouds project Suggested Approach: Develop the basic application the usual way, using IDLE. Once you have everything working, transfer your files to your webspace. set up the HTML wrapper files & go… Hypertext Markup Language Use the provided code to read HTML Personalize - There are lots of ways to do this! Once you have things working, move on to writing HTML following links beyond depth 1 avoiding repeated links! Make sure that you can process the files appropriately into ordered lists of words…

Text-cloud history

Other ideas... Low-level computation ~ circuits ? Javascript? ~ flash cards ? maps ? Images? ~ online salon ? illusions ?

Let me know! Hw8 part 1: A Connect Four Board Hw8 part 0: project idea and proposal

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?

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 )

scoreBoard Assigns a score to any board, b 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?

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

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

|O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| | | | | | | |O| | | | | | | |X| |X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| 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

|O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| | | | | | | |O| | | | | | | |X| |X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| 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! Which change at 2-ply? 00 Which change at 3-ply? 100 Answers to example lookahead scores

‘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

(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]

(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?

(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?

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!! """

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 !

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 Ply 2 Ply Boundaries for qualitatively different games… 0 Ply

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

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

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…

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…

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

Player class Player pForX What data does an 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?

Player Board and 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 ) set_board( self, LoS ) Board's data also includes data! All of Player's data

scoreBoard ‘X’ ‘O’ Assigns a score to any board, b A simple system: for a win for a lossfor anything else Score for

scoreBoard Assigns a score to any board, b 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?

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. to move… A score for each column…? scores p42.scoresFor( b42 ) special case

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 A 2-ply lookahead player will also "see" an opponent's impending victory. to move… What about 3-ply? 2-ply 1-ply score p43.scoresFor( b42 ) and p44

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 scoresFor( self, b ) returns a LIST of scores, one for each column you can choose to move next… 2-ply

self 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 Score! ‘X’ ‘O’

|O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| | | | | | | |O| | | | | | | |X| |X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| 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

|O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| | | | | | | |O| | | | | | | |X| |X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| 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! Which change at 2-ply? 00 Which change at 3-ply? 0 Answers to example lookahead scores

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

‘X’ ‘O’ new‘X’ Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 (1) For each possible move (2) Add it to the board (3) Ask OPPONENT to score each board At what ply? scoresFor each column self

‘X’ ‘O’ new‘X’ Col 6 Col 5 Col 4 Col 3 Col 2 Col 1 Col 0 (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? What, then, should assign for your score? ( self 's score) scoresFor each column 50.0 self

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: ,000,000 moves/sec first paper: 1950 What is Hydra's chess rating?

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 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 !

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 Ply 2 Ply Boundaries for qualitatively different games… 0 Ply

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

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

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?

Hwks and Projects Homework 9: A Connect Four Player … Homework 8: A Connect Four Board … due 11/19/09 due 12/23/09 ! by the end of the term…

Hwks and Projects Homework 9: A Connect Four Player … Homework 8: A Connect Four Board … due 11/19/09 due 12/23/09 ! by the end of the term… Homework 8, part 2: final project proposal Pre-planned projectsIdeasOpen-ended 4) robot navigation: pyRobot 2) 3d simulation game: vPool 1) Web-based Text Clouds 3) implementing Picobot! Flash Cards ? pySQL ? Image processing using pyGame: "snake" others welcome!

Project Deliverables Proposal due 11/19/09 Preliminary milestone due 12/3/09 one-page ( proposal.txt ) that includes your project choice and a first description of the project-specific ideas - also, what libraries you'll use Working code ( preliminary.zip ) that uses your libraries and shows access to the data you need (sound, graphics, etc.) Also, a plan for the next steps to take -- this may include classes you'll build. Presentation / intermediate milestone due 12/9-10/09 The presentation is ~10 minutes of your vision, the technical details, and a demo of what you have so far. The intermediate.zip milestone should have the presentation, demo, and a final plan, including classes. Project due 12/17/09 Your final project ( project.zip ), with documentation and "future work."

Examples?! Date, due Date(11,11,09).tomorrow()

|O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| 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?

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| | | | | | | | | | |X| | | | | | | |O|O| | | |X|X| |X|O| | |O|X|O| |O|X| | (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| X ’s move

‘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

‘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 (5) Find one max - that's it!

Connect Four | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| 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... !

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 ?

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?

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?

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 !

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?

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?

What's wrong here? | | | | | | | |O|O| | | |X|X| |O|X|X|X| |X|O|O|O|O|X|X| 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

Strategies? horizontals verticals diagonals ?? | | | | | | | |O|O| | | |X|X| |O|X|X|X| |X|O|O|O|O|X|X|

“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 ) Could it go wrong?

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?

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?

Strategies? horizontals verticals diagonals ?? | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|O| |O|

|O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| 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

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 b ‘X’ ‘O’

IS313 … Monday, Nov. 8 - Classes + Objects, part 2 Monday, Nov Project strategies & example pres. Tuesday, Nov. 9 - Date class due Tuesday, Nov Board class due & proj. idea Monday, Nov UIs & another example presentation Wed., Dec. 1 - preliminary report due – with code Monday, Dec. 6 - In-class project presentations Tuesday, Dec. 7 - intermediate report – with code Monday, Dec no class meeting, but I'll be available... Thursday, Dec Final project due! Final HW IS 313 Schedule Final Project Tuesday, Nov no HW due Monday, Nov no class meeting (conference)

AI: Artificial Intelligence Monday, Nov. 8 - Classes + Objects, part 2 Monday, Nov Project strategies & example pres. Tuesday, Nov. 9 - Date class due Tuesday, Nov Board class due & proj. idea "High-level AI" Game-playing Natural Language Translation Task planning "Low-level AI" Robotics Sensing and reacting Computer vision Adapting to human actions

IS313: software intelligence An object is structured data that is alive, responsible, and intelligent. Sound too friendly? This week’s objects and classes will be just the opposite... X to move. Is there a way to win? | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X|O| | import antigravity!

Designing classes 1) What data? (Data Members) 2) What are the key capabilities? (Methods) Not limited to 7x6!

Connect Four: the object b Board B int width str data list str ? int height What is the name of the method that will construct this data? Starting from B, how would you examine the string marked by the ? 3 4

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( self.width ): boardRow = [] for col in range( self.height ): boardRow += [' '] # add a space to this row self.data += [boardRow] Better! Same idea as in Life

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 self.data = [ [' ']*self.width for row in range(self.height) ] Even shorter! What was this called again… ?

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| X O O O XX X … … … … printed version Which rows and columns are these? which is row 0 ? …

def __repr__(self): """ this method returns a string representation for an object of type Board """ s = '' for row in range( self.height ): s += '|' for col in range( self.width ): s += self.data[row][col] + '|' s += '\n' return s Connect Four: __repr__ What else?

>>> b = Board( 7, 6 ) >>> print b >>> LoS = [ ' ', ' ', 'OXO ', 'XXOO ', 'XOXXOX ', 'XOOXXOO' ] >>> b.set_board( LoS ) >>> print b Connect Four: set_board | | | | |O|X|O| | | | | |X|X|O|O| | | | |X|O|X|X|O|X| | |X|O|O|X|X|O|O| | | | | What is this a list of?

def set_board(self, LoS): """ this method sets the board to the list_of_strings that is input """ for row in range( ): for col in range( ): self.data[row][col] = LoS[row][col] Connect Four: set_board What goes in the blanks?

Try it! def addMove(self, col, ox): row = self.height-1 while True: if self.data[row][col] == ' ': self.data[row][col] = ox row -= 1 Step through this addMove method. How does it work? What's wrong? Try to fix it… ! a C4 board col # 'O' or 'X' | | | | |O|X|O| | | | | |X|X|O|O| | | | |X|O|X|X|O|X| | |X|O|O|X|X|O|O|

Try it! def allowsMove(self, col): a C4 board col # allowsMove should return True if col has enough space to allow a move; it should return False otherwise. | |X| | | | | | | |O| | | | | | |O|X|O| | | | | |X|X|O|O| | | | |X|O|X|X|O|X| | |X|O|O|X|X|O|O| b b.allowsMove(0) b.allowsMove(1) True False

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 What will require the most thought? set_board( self, LoS ) sets the board arbitrarily

Checking wins… ? Thoughts? X O self corner cases?

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

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: ,000,000 moves/sec first paper: 1950 What is Hydra's chess rating?

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…

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

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

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 !

Hwks and Projects Homework 8, part 0: final project proposal Pre-planned projectsIdeasOpen-ended 4) robot navigation: pyRobot 2) 3d simulation game: vPool 1) Web-based Text Clouds 3) implementing Picobot! Flash Cards ? pySQL ? Image processing using pyGame: "snake" others welcome! Extra: A Connect Four Player … Homework 8: A Connect Four Board … due 11/16/10 ok anytime well, by the end of the term… Low-level computation?

Project Deliverables Proposal due 11/16/10 Preliminary milestone due 12/1/10 one-page ( proposal.txt ) that includes your project choice and a first description of the project-specific ideas - also, what libraries you'll use Working code ( preliminary.zip ) that uses your libraries and shows access to the data you need (sound, graphics, etc.) Also, a plan for the next steps to take – initial functions and/or classes you plan to build. Presentation / intermediate milestone due 12/6 & 12/7 The presentation is ~10 minutes of your vision, the technical details, and a demo of what you have so far. The intermediate.zip milestone should have the presentation, demo, and a final plan, including classes. Project due 12/17/10 Your final project ( project.zip ), with documentation and "future work."

Hey! Watch where you're going! The pyRobot project Goal: get from Pt A to Pt B 2d Roomba simulator How do I control this robot !?! Pt B Pt A

The pyRobot project Robot control continuously runs three things: SENSEPLANACT [x,y,thd], bump = self.getData() if bump[0] == True or bump[1] == True: print 'BUMP!', print ' [Left bump sensor:', bump[0], '] ', print ' [Right bump sensor:', bump[1], '] ' robotTask = STOP STOP is one of the robot's states. Every 40th of a second, the robot runs through this loop, sets the robot's state and sets the velocities accordingly. Don't sleep ! if robotTask == STOP: self.setVels(0,0) robotTask = KBD while True:

PicoRoomba! The pyRobot project ~ additions Goal: get from Pt A to Pt B Start in an unknown location on the map… vPython Roomba? ASCII Roomba? Use only the bump sensors… (no range sensing) Implement a niftier interface… Try it out on a Roomba… Use noisy (realistic) data Optional Main

Let’s play! I’ll take your cue. 3d simulator, VPython The vPool project

from visual import * floor = box( pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue) ball = sphere( pos=(0,4,0), radius=1, color=color.red) ball.velocity = vector(0,-1,0) dt = 0.01 while True: rate(100) ball.pos = ball.pos + ball.velocity*dt if ball.y < ball.radius: ball.velocity.y = -ball.velocity.y else: ball.velocity.y = ball.velocity.y - 9.8*dt How many classes? How many objects? data members? What's the if/else doing?

Text and graphical output Read Picobot program from a file Read maze description from a file Track visited/unvisited squares Prohibit illegal moves Stop when maze completely visited The Picobot project Required capabilities:

The Picobot project Choice of graphical packages vpython turtle csplot/csgrid (Game-of-Life) Start/stop/step feature Maze editing Pebble dropping Be inventive! csplot or csgrid version… Graphical picobot: Lots of options…

Text Clouds project tag cloud '07 ?

Text Clouds project From text… … to cloud 1.Start with entered webpage (URL) 2.Read in text 3.Create list of words out of text 4."Clean" the words 5."Stem" the words 6.Count the words 7.Return a string with frequencies 8.Add advanced features… Huh?

Text Clouds project Spamming spammers spammed spam. Spam spam spam! I love spam! ['spamming', 'spammers', spammed', 'spam', 'spam', 'spam', 'spam', 'love', 'spam', 'page', '2'] ['spamming', 'spammers', spammed', 'spam.', 'spam', 'spam', 'spam!', 'I', 'love', 'spam!', 'page', '2'] ['spam', 'spam', spam', 'spam', 'spam', 'spam', 'spam', 'love', 'spam', 'page', '2'] Page 2 What changed here? What next?

Text Clouds project Suggested Approach: Develop the basic application the usual way, using IDLE. Once you have everything working, transfer your files to your webspace. set up the HTML wrapper files & go… Hypertext Markup Language Use the provided code to read HTML Personalize - There are lots of ways to do this! Once you have things working, move on to writing HTML following links beyond depth 1 avoiding repeated links! Make sure that you can process the files appropriately into ordered lists of words…

Other ideas... Low-level computation ~ circuits ? Javascript? ~ flash cards ? maps ? Images? ~ online salon ? illusions ?

Let me know! Hw8 part 1: A Connect Four Board Hw8 part 0: project idea and proposal