is313 … monday, nov. 8 - classes + objects, part 2 monday, nov. 15 - project strategies &...

Post on 04-Jan-2016

218 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

IS313 …

Monday, Nov. 8 - Classes + Objects, part 2

Monday, Nov. 15 - Project strategies & example pres.

Tuesday, Nov. 9 - Date class due

Tuesday, Nov. 16 - Board class due & proj. idea

Monday, Nov. 22 - 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. 13 - no class meeting, but I'll be available...

Thursday, Dec. 17 - Final project due!

Final HW

IS 313 Schedule

Final Project

Tuesday, Nov. 23 - no HW due

Monday, Nov. 29 - no class meeting (conference)

AI: Artificial Intelligence

Monday, Nov. 8 - Classes + Objects, part 2

Monday, Nov. 15 - Project strategies & example pres.

Tuesday, Nov. 9 - Date class due

Tuesday, Nov. 16 - Board class due & proj. idea

"High-level AI"

Game-playingNatural Language

TranslationTask planning

"Low-level AI"

RoboticsSensing and reacting

Computer visionAdapting to human actions

Low-level AI

"Low-level AI"

RoboticsSensing and reacting

Computer visionAdapting 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| |--------------- 0 1 2 3 4 5 6

import antigravity!

Aargh!

Python has no Connect-four datatype…

| | | | | | | || | | | | | | || | | | | | | || | | |X| | | || |X| |X|O| | ||X|O|O|O|X|O| |--------------- 0 1 2 3 4 5 6

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

BoardB

intwidthstr str str

str str str

str str str

datalist str

str

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

Boardb

intwidth

str str str

str str str

str str str

datalist

str

str

str

intheight

| | | | | | | || | | | | | | || | | | | | | || | | |X| | | || |X| |X|O| | ||X|O|O|O|X| |O|--------------- 0 1 2 3 4 5 6

67

X O O O

X X

X

……

printed version

Which rows and columns are these?

which is row 0 ?

The grim task of printing …

Boardb

intwidth

str str str

str str str

str str str

datalist

str

str

str

intheight

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

6

7

X O O O

X X

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|--------------- 0 1 2 3 4 5 6

| | | | | | | || | | | | | | || | | | | | | || | | | | | | || | | | | | | || | | | | | | |--------------- 0 1 2 3 4 5 6

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|--------------- 0 1 2 3 4 5 6

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|--------------- 0 1 2 3 4 5 6

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

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/secDeep Fritz: 2002X3D Fritz: 2003 Hydra: 2006

200,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?

humanscomputers

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 playeremulating a human by

evaluating a board position

ex. credit

Computer Chess…

scoreBoard(self,b) ‘X’‘O’

Assigns a score to any board, b

100.0 50.0 0.0A simple system:for a win for a lossfor anything else

Score for Score for

Score for Score for

Looking further ahead…

scoreBoard looks ahead 0 movesThe "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

score

turn

Difficulty == Branching Factor

Branching Factor Estimatesfor 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 Estimatesfor 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

Games’ Branching Factors

Branching Factor Estimatesfor 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 anytimewell, by the end of the term…

Hwks and Projects

• Homework 8, part 0: final project proposal

Pre-planned projects Ideas Open-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 anytimewell, 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

https://www.cs.hmc.edu/twiki/bin/view/CS5/ISProjectsPage

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/7The 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/10Your 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 B2d 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:

SENSE PLAN

[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:

SENSE PLAN ACT

[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

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…

www.vpython.org

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

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

http://www.cs.hmc.edu/~cs5grad/cs5/textcloud/page1.html

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

http://www.cs.hmc.edu/~cs5grad/cs5/textcloud/page1.html

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

http://www.cs.hmc.edu/~cs5grad/cs5/textcloud/page1.html

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 HTMLfollowing links beyond depth 1avoiding repeated links!

• Make sure that you can process the files appropriately into ordered lists of words…

Text-cloud historyhttp://chir.ag/phernalia/preztags/

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

PlayerpForX

What data does a computer AI player need?

Let's see a demo!

stringox

stringtbt

'X' 'LEFT'intply

0

DATA MEMBERS

tiebreakTypechecker, O or X moves 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

100.0 50.0 0.0A 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 movesThe "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 0 col 1 col 2 col 3 col 4 col 5 col 6

1-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

2-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

3-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 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|--------------- 0 1 2 3 4 5 6

| | | | | | |O|| | | | | | |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 0 col 1 col 2 col 3 col 4 col 5 col 6

It is X’s move. What scores does a 2-ply lookahead for X assign to each move?

col 0 col 1 col 2 col 3 col 4 col 5 col 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|--------------- 0 1 2 3 4 5 6

| | | | | | |O|| | | | | | |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 0 col 1 col 2 col 3 col 4 col 5 col 6

It is X’s move. What scores does a 2-ply lookahead for X assign to each move?

col 0 col 1 col 2 col 3 col 4 col 5 col 6

be careful!

-1 100

50 100

50 100

50

100

0 0 0 50 0 -1

Which change at 2-ply? 0 0

Which change at 3-ply?100

Answers to example lookahead scores

‘X’‘O’new‘X’

Col 6

Col 5

Col 4Col 3Col 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 4Col 3Col 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 ]

scoresForneeds 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 ] [ 0, 0, 0, 0, 0, 0, 0 ] [ 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 4Col 3Col 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 ]

scoresForneeds 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 ] [ 0, 0, 0, 0, 0, 0, 0 ] [ 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 4Col 3Col 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 ]

scoresForneeds 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 ] [ 0, 0, 0, 0, 0, 0, 0 ] [ 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) = 0max(S) = 0

max(S) = 0max(S) = 50

max(S) = 100

What score does self give each?

100

0100

100 10050

0

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

Games’ Branching Factors

Branching Factor Estimatesfor 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.

humanscomputers

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?

humanscomputers

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

PlayerpForX

What data does an AI player need?

Let's see a demo!

stringox

stringtbt

'X' 'LEFT'intply

0

DATA MEMBERS

tiebreakTypechecker, O or X moves 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

100.0 50.0 0.0A simple system:for a win for a lossfor anything else

Score for Score for

Score for Score for

scoreBoard

Assigns a score to any board, b

100.0 50.0 0.0A 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 movesThe "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 movesThe "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

scorep43.scoresFor( b42 ) and p44

Looking further ahead…

scoreBoard looks ahead 0 movesThe "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 0 col 1 col 2 col 3 col 4 col 5 col 6

1-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

2-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

3-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 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|--------------- 0 1 2 3 4 5 6

| | | | | | |O|| | | | | | |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 0 col 1 col 2 col 3 col 4 col 5 col 6

It is X’s move. What scores does a 2-ply lookahead for X assign to each move?

col 0 col 1 col 2 col 3 col 4 col 5 col 6

Which change at 3-ply?

Which change at 2-ply?

Example 1-ply and 2-ply lookahead scoreshttp://www.stanford.edu/~ccecka/research/C4.html

|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|| | | | | | |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 0 col 1 col 2 col 3 col 4 col 5 col 6

It is X’s move. What scores does a 2-ply lookahead for X assign to each move?

col 0 col 1 col 2 col 3 col 4 col 5 col 6

be careful!

-1 100

50 100

50 100

50

100

0 0 0 50 0 -1

Which change at 2-ply? 0 0

Which change at 3-ply?0

Answers to example lookahead scoreshttp://www.stanford.edu/~ccecka/research/C4.html

‘X’‘O’new‘X’

Col 6

Col 5

Col 4Col 3Col 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 4Col 3Col 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?

0.0

50.0

50.0

0.00.0

50.0

0.0

scoresFor each column

self

‘X’‘O’new‘X’

Col 6

Col 5

Col 4Col 3Col 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?

0.0

50.0

0.00.0

50.0

0.0

What, then, should assign for your score?

(self's score)

scoresFor each column

50.0

self

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/secDeep Fritz: 2002X3D Fritz: 2003 Hydra: 2006

200,000,000 moves/sec

first paper: 1950

What is Hydra's chess rating?

Games’ Branching Factors

Branching Factor Estimatesfor 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 Estimatesfor 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

Games’ Branching Factors

Branching Factor Estimatesfor 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 projects Ideas Open-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

https://www.cs.hmc.edu/twiki/bin/view/CS5/ISProjectsPage

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/09The 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/09Your 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|--------------- 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 0 col 1 col 2 col 3 col 4 col 5 col 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| |--------------- 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

‘X’‘O’new‘X’

Col 6

Col 5

Col 4Col 3Col 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

50.0

100.0100.0

50.0

100.0

‘X’‘O’new‘X’

Col 6

Col 5

Col 4Col 3Col 2

Col 1

Col 0

b

Choosing the best move

100.0

50.0

50.0

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

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

Connect Four: the object b

This is true for sufficiently broad definitions of “the creators of Python’s library” ...

Boardb

def addMove(self, col, player)

intNROWS

intNCOLS

def allowsMove(self, col)

char char char

char char char

char char char

datalist char

char

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” ...

Boardb

def addMove(self, col, player)

intNROWS

intNCOLS

def allowsMove(self, col)

char char char

char char char

char char char

datalist char

char

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: Boardclass 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|--------------- 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

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

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

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|--------------- 0 1 2 3 4 5 6

|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 0 col 1 col 2 col 3 col 4 col 5 col 6

Which change at 2-ply?

Example 1-ply and 2-ply lookahead scores

0-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

1-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

2-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

3-ply scores for O:col 0 col 1 col 2 col 3 col 4 col 5 col 6

Solutions

-1

-1

-1

-1

50 50 50 50 50 50

50 50 100

50 50 50

0

0

100

100

0

0

0 0 50

100

00

b ‘X’‘O’

IS313 …

Monday, Nov. 8 - Classes + Objects, part 2

Monday, Nov. 15 - Project strategies & example pres.

Tuesday, Nov. 9 - Date class due

Tuesday, Nov. 16 - Board class due & proj. idea

Monday, Nov. 22 - 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. 13 - no class meeting, but I'll be available...

Thursday, Dec. 17 - Final project due!

Final HW

IS 313 Schedule

Final Project

Tuesday, Nov. 23 - no HW due

Monday, Nov. 29 - no class meeting (conference)

AI: Artificial Intelligence

Monday, Nov. 8 - Classes + Objects, part 2

Monday, Nov. 15 - Project strategies & example pres.

Tuesday, Nov. 9 - Date class due

Tuesday, Nov. 16 - Board class due & proj. idea

"High-level AI"

Game-playingNatural Language

TranslationTask planning

"Low-level AI"

RoboticsSensing and reacting

Computer visionAdapting 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| |--------------- 0 1 2 3 4 5 6

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

BoardB

intwidthstr str str

str str str

str str str

datalist str

str

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

Boardb

intwidth

str str str

str str str

str str str

datalist

str

str

str

intheight

| | | | | | | || | | | | | | || | | | | | | || | | |X| | | || |X| |X|O| | ||X|O|O|O|X| |O|--------------- 0 1 2 3 4 5 6

67

X O O O

X X

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|--------------- 0 1 2 3 4 5 6

| | | | | | | || | | | | | | || | | | | | | || | | | | | | || | | | | | | || | | | | | | |--------------- 0 1 2 3 4 5 6

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|--------------- 0 1 2 3 4 5 6

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|--------------- 0 1 2 3 4 5 6

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

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/secDeep Fritz: 2002X3D Fritz: 2003 Hydra: 2006

200,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

100.0 50.0 0.0A simple system:for a win for a lossfor anything else

Score for Score for

Score for Score for

Looking further ahead…

scoreBoard looks ahead 0 movesThe "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 Estimatesfor 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 projects Ideas Open-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 anytimewell, 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

https://www.cs.hmc.edu/twiki/bin/view/CS5/ISProjectsPage

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/7The 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/10Your 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 B2d Roomba simulator

How do I control this robot !?!

Pt B

Pt A

The pyRobot project

Robot control continuously runs three things:

SENSE PLAN ACT

[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

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

http://www.cs.hmc.edu/~cs5grad/cs5/textcloud/page1.html

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 HTMLfollowing links beyond depth 1avoiding 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

top related