kako računalnik naučimo igrati “4 v vrsto”

52
Kako računalnik naučimo igrati “4 v vrsto” Branko Kavšek Poletni tabor: Matematika je kul Koper, Avgust 2013

Upload: rafal

Post on 12-Jan-2016

40 views

Category:

Documents


2 download

DESCRIPTION

Kako računalnik naučimo igrati “4 v vrsto”. Branko Kavšek Poletni tabor: Matematika je kul. Koper, Avgust 2013. Kako igramo? = pravila igre. Kako zmagamo?. Strategije zapišemo kot program. Program se sam uči novih strategij. Kaj bomo danes slišali?. Kaj je “4 v vrsto”? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Kako računalnik naučimo igrati “4 v vrsto”

Kako računalnik naučimo igrati “4 v vrsto”

Branko Kavšek

Poletni tabor: Matematika je kul

Koper, Avgust 2013

Page 2: Kako računalnik naučimo igrati “4 v vrsto”

Kaj bomo danes slišali?

•Kaj je “4 v vrsto”?

•Strategije igranja:

– z upoštevanjem trenutne in naslednje

poteze

– z upoštevanjem vseh potez

•Kaj pa računalnik?

•Kje je tu umetna inteligenca?

•Primer računalniške igrice “4 v vrsto”

Kako igramo? = pravila igre

Kako zmagamo?

Strategije zapišemo kot program

Program se sam uči novih strategij

Page 3: Kako računalnik naučimo igrati “4 v vrsto”

Kaj je “4 v vrsto”?

• Igra za 2 igralca

• Igralca se pri igranju izmenjujeta (1. igralec na potezi, 2. igralec na potezi, 1. igralec, 2. igralec …)

– potezna igra

•Za igranje potrebujemo:

– “mrežo” velikosti 7 x 6

– 42 žetonov dveh barv (po 21 vsake barve)

Angleško ime = Connect 4

Page 4: Kako računalnik naučimo igrati “4 v vrsto”

Iz zgodovine

• Igro je igral že kapitan James Cook s

svojimi oficirji na potovanjih po svetu

•Od tu je tudi dobila nadimek

“Captain’s Mistress” – “Kapitanova

ljubica”

•Današnjo različico je uvedel Milton

Bradley leta 1974 (Connect 4)

Page 5: Kako računalnik naučimo igrati “4 v vrsto”

Igralne potrebščine

a b c d e f g

1

2

3

4

5

6

Page 6: Kako računalnik naučimo igrati “4 v vrsto”

Pravila igre

• Začetek igre:

– Igralca izbereta vsak svojo barvo žetonov

– V prazno mrežo prvi igralec vrže žeton

• različica: začne igralec z rumenimi žetoni

• Potek igre:

– Igralca izmenično “mečeta” žetone v mrežo (poteza)

– Žeton vedno “pade”:

• na dno mreže

• na drugi žeton, ki je že v mreži

Page 7: Kako računalnik naučimo igrati “4 v vrsto”

Konec (cilj) igre

• Igra se konča, ko:1. Eden od igralcev “poveže” 4 žetone svoje

barve v vrsto (vodoravno, navpično ali diagonalno)

2. Oba igralca porabita vse svoje žetone

• Možni izidi:– Zmaga (točka 1.)

– Poraz (točka 1.)

– Neodločeno (točka 2.)

• Cilj igre?– povezati 4 žetone svoje barve v vrsto

Page 8: Kako računalnik naučimo igrati “4 v vrsto”

Primer igre

a b c d e f g

1

2

3

4

5

6

Page 9: Kako računalnik naučimo igrati “4 v vrsto”

Kako zmagati igro? (1)

• Z upoštevanjem trenutne in naslednje

poteze (strategije):

1. Število možnih četvork

2. Trenutno število žetonov v vrsti

3. Ali zaprem nasprotnikovo “dobro” potezo?

4. Ali prostor “zgoraj” prinese nasprotniku

prednost?

Page 10: Kako računalnik naučimo igrati “4 v vrsto”

1. Število možnih četvork

a b c d e f g

1

2

3

4

5

6

(3)

Page 11: Kako računalnik naučimo igrati “4 v vrsto”

1. Število možnih četvork

a b c d e f g

1

2

3

4

5

6

(3)

(4)

(4)

(3)

Page 12: Kako računalnik naučimo igrati “4 v vrsto”

1. Število možnih četvork

a b c d e f g

1

2

3

4

5

6

(3)

(4)

(4)

(3)

(5)

(5)

Page 13: Kako računalnik naučimo igrati “4 v vrsto”

1. Število možnih četvork

a b c d e f g

1

2

3

4

5

6

(3)

(4)

(4)

(3)

(5)

(5)

(7)

Več kot jih je, boljše je !!!

Page 14: Kako računalnik naučimo igrati “4 v vrsto”

2. Trenutno žetonov v vrsti

a b c d e f g

1

2

3

4

5

6

(2)

Page 15: Kako računalnik naučimo igrati “4 v vrsto”

2. Trenutno žetonov v vrsti

a b c d e f g

1

2

3

4

5

6

(3)

Page 16: Kako računalnik naučimo igrati “4 v vrsto”

2. Trenutno žetonov v vrsti

a b c d e f g

1

2

3

4

5

6

(3)

Page 17: Kako računalnik naučimo igrati “4 v vrsto”

2. Trenutno žetonov v vrsti

a b c d e f g

1

2

3

4

5

6

(3)

Več kot jih je, boljše je !!!

Page 18: Kako računalnik naučimo igrati “4 v vrsto”

3. Zapiranje nasprotnikove dobre poteze

a b c d e f g

1

2

3

4

5

6

NeDa

Page 19: Kako računalnik naučimo igrati “4 v vrsto”

3. Zapiranje nasprotnikove dobre poteze

a b c d e f g

1

2

3

4

5

6

Da

Da je boljše kot Ne !!!

Page 20: Kako računalnik naučimo igrati “4 v vrsto”

4. Prostor zgoraj = prednost

a b c d e f g

1

2

3

4

5

6

Da

Page 21: Kako računalnik naučimo igrati “4 v vrsto”

4. Prostor zgoraj = prednost

a b c d e f g

1

2

3

4

5

6

Ne

Ne je boljše kot Da !!!

Page 22: Kako računalnik naučimo igrati “4 v vrsto”

Kako torej zmagamo?

• Če upoštevamo prej opisane 4 strategije

1. Število možnih četvork ( > je boljše)

2. Trenutno število žetonov v vrsti ( > je boljše)

3. Ali zaprem nasprotnikovo “dobro” potezo?

(Da je boljše)

4. Ali prostor “zgoraj” prinese nasprotniku

prednost? (Ne je boljše)

• Seštejemo vrednosti pod 1., 2., 3. in 4. in

izberemo največji seštevek

Page 23: Kako računalnik naučimo igrati “4 v vrsto”

Primer uporabe strategij

1. igralec

3 + 1 + 0 + 1 4 + 1 + 0 + 1 5 + 1 + 0 + 1 7 + 1 + 0 + 1

Ali zaprem nasprotnikovo dobro potezo?

Ne = 0

Da = 1

Ali prostor “zgoraj prinese nasprotniku prednost?

Ne = 1

Da = 0

5 6 7 9

...

Page 24: Kako računalnik naučimo igrati “4 v vrsto”

Primer uporabe strategij

6 + 1 + 0 + 1 6 + 1 + 0 + 1 7 + 2 + 0 + 1 9 + 2 + 0 + 1 6 + 2 + 0 + 1

8 8 10 12 9

...

Page 25: Kako računalnik naučimo igrati “4 v vrsto”

Primer uporabe strategij

... ... ... ... ... ...

Page 26: Kako računalnik naučimo igrati “4 v vrsto”

Kako pa igramo ljudje?

•Spet strategija:1. Vedno začni na sredini

2. Sredinska polja so „več vredna“

3. „Obkrožuj“ svojega nasprotnika

4. Poskusi narediti „dvojno finto“ ter to nasprotniku

preprečiti

5. Poskusi graditi 3-v-vrsto vertikalno

6. Poskusi „napadati“

7. Proti koncu igre štej poteze do konca

Page 27: Kako računalnik naučimo igrati “4 v vrsto”

Vloga računalnika

•Omenjene 4 strategije prepišemo v

računalniški program

(“sprogramiramo”)

•Računalnik lahko namesto “nas” igra

“4 v vrsto”

•Strategije ne zagotavljajo zmage v

vsakem primeru

Page 28: Kako računalnik naučimo igrati “4 v vrsto”

Kako zmagati igro? (2)

• Z upoštevanjem vseh potez:

– V trenutni situaciji poskušamo (v mislih / z računalnikom) odigrati vse možne kombinacije potez

– Za vsako možno potezo izračunamo verjetnost, da bomo zmagali

– Izberemo tisto potezo, ki ima najvišjo verjetnost za zmago

– Kako to naredimo?

Page 29: Kako računalnik naučimo igrati “4 v vrsto”

29

Pogled naprej (look ahead)

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

Igralec 1

Igralec 2

Igralec 1

Igralec 2

Page 30: Kako računalnik naučimo igrati “4 v vrsto”

30

Min-Max

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

Max

Max

Igralec 1 pogleda kaj bi lahko bila izbira Igralca 2

Označi vozlišče s to vrednostjo

Igralec 2 bo izbral vedno minimalno vrednost

Min

Min 2 6 7 2 1 4 3 5

Page 31: Kako računalnik naučimo igrati “4 v vrsto”

31

Min-Max

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

2 6 7 2 1 4 3 5

6 7 4 5

Max

Max

Min

Min

Igralec 1 izbere želeno vrednost

Igralec 1 bo izbral vedno maksimalno vrednost

Page 32: Kako računalnik naučimo igrati “4 v vrsto”

32

Min-Max

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

Upoštevajoč izbiro Igralca 2, Igralec 1 izbere najboljšo možnost = 6 (premik levo)

Predpostavka: oba igralca igrata „racionalno“

2 6 7 2 1 4 3 5

6 7 4 5

6 4

Max

Max

Min

Min

Page 33: Kako računalnik naučimo igrati “4 v vrsto”

33

Min-Max// Node is current board position

// Depth is number of levels in our look-ahead tree

function minimax(node, depth)

if node is a terminal node or depth = 0

return the heuristic value of node

if the adversary is to play at node

let α := +∞

foreach child of node

α := min(α, minimax(child, depth-1))

else // we are to play at node

let α := -∞

foreach child of node

α := max(α, minimax(child, depth-1))

return α

Page 34: Kako računalnik naučimo igrati “4 v vrsto”

Min-Max

•Problem:

Zamudno preiskovanje celotnega

drevesa možnih rešitev

• Ideja:

Preiskovanje v globino z α-β

rezanjem drevesa možnih rešitev

Page 35: Kako računalnik naučimo igrati “4 v vrsto”

35

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

Igralec 1 hoče maksimum (10)Igralec 2 hoče minimum (1)Igralec 1 je na potezi

Max

Max

Min

Min

Page 36: Kako računalnik naučimo igrati “4 v vrsto”

36

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

Igralec 1 je preiskal 2 izidaVe, da bo Igralec 2 izbral 2Zato označi vozlišče z 2

2

Max

Max

Min

Min

Page 37: Kako računalnik naučimo igrati “4 v vrsto”

37

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

2 6

6

Max

Max

Min

Min

Igralec 1 je preiskal 4 izideVe, da bo Igralec 2 izbral 6

(raje kot 8)Zato ustrezno označi vozlišča

Page 38: Kako računalnik naučimo igrati “4 v vrsto”

38

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

2 6

6

7

Max

Max

Min

Min

Igralec 1 je preiskal 6 izidovVe, da mu Igralec 2 ne bo

dovolil izbrati 7Zato mu preostalih 2 vozlišč

ni potrebno preiskati

Page 39: Kako računalnik naučimo igrati “4 v vrsto”

39

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

2 6

6

7

Max

Max

Min

Min

Odrežemo vejo drevesaVemo, da bo Igralec 2 izbral 6,

raje kot da bi dovolil Igralcu 1 izbrati 7

Igralec 1 ne ve kaj se nahaja v „odrezani“ veji

Page 40: Kako računalnik naučimo igrati “4 v vrsto”

40

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

2 6

6

6

6

7

7

1

4

4

4

Max

Max

Min

Min

Igralec 1 sedaj pogleda levo vejo desnega poddrevesa

Ve, da mu bo Igralec 2 dovolil dobiti kvečjemu 4

Raje izbere 6

Page 41: Kako računalnik naučimo igrati “4 v vrsto”

41

α-β rezanje

10 2 8 6 7 8 2 3 10 1 4 5 10 3 5 7

2 6

6

6

6

7

7

1

4

4

4

Max

Max

Min

Min

Igralec 1 bo raje izbral 6 kot 4Odrežemo lahko desno vejo

desnega poddrevesaIgralca 1 ne zanima kaj se

nahaja v tej veji

Page 42: Kako računalnik naučimo igrati “4 v vrsto”

42

α-β rezanje

// node = Starting point. Depth = how far to lookfunction minimax(node, depth)

return alphabeta(node, depth, -∞, +∞)

// Node, depth, value to player, value to opponentfunction alphabeta(node, depth, α, β)

if node is a terminal node or depth = 0return the heuristic value of node

foreach child of nodeα := max(α, -alphabeta(child, depth-1, -β, -α))if α ≥ β

return αreturn α

Page 43: Kako računalnik naučimo igrati “4 v vrsto”

Koliko je vseh možnosti?

•Zahtevnost problema:

– Ideja: vsako polje se lahko nahaja v 3

možnih stanjih:

•Zasedeno z rdečim žetonom

•Zasedeno z rumenim žetonom

•Prazno

– Niso pa vse kombinacije dopustne

Page 44: Kako računalnik naučimo igrati “4 v vrsto”

Koliko je vseh možnosti?

0 1 11 5038572 22 ... 33 5611156155990

1 7 12 14164920 23 ... 34 6893472773880

2 56 13 35459424 24 ... 35 7754703113850

3 252 14 91871208 25 ... 36 8385425017200

4 1260 15 214864650 26 ... 37 8164755937800

5 4620 16 516936420 27 ... 38 7422505398000

6 18480 17 1134183050 28 ... 39 5789554210440

7 59815 18 2546423880 29 ... 40 3859702806960

8 206780 19 5252058812 30 ... 41 1883902560540

9 605934 20 11031780760 31 ... 42 538257874440

10 1869840 21 21400686756 32 ...Skupaj

70728639995483

Page 45: Kako računalnik naučimo igrati “4 v vrsto”

Vloga računalnika

• Pomoč pri preiskovanju ogromnega števila

možnosti

– Računalnik lahko najde vse možnosti, a bodisi:

• Naredi to igranje zelo počasno, bodisi

• Ne zagotavlja zmage v vsakem primeru (???)

• Pomoč pri oblikovanju boljših strategij igre

– Računalnik se uči igrati na podlagi že odigranih

iger = umetna inteligenca

Page 46: Kako računalnik naučimo igrati “4 v vrsto”

Predstavitev v računalniku

a b c d e f g

1

2

3

4

5

6a1, a2, a3, a4, a5, a6,

b1, b2, b3, b4, b5, b6,

C1, c2, c3, c4, c5, c6,

d1, d2, d3, d4, d5, d6,

e1, e2, e3, e4, e5, e6,

f1, f2, f3, f4, f5, f6,

g1, g2, g3, g4, g5, g6

= x

= o

= _

Page 47: Kako računalnik naučimo igrati “4 v vrsto”

Predstavitev v računalniku

a b c d e f g

1

2

3

4

5

6

_,_,_,_,_,_,_,_,_,_,_,_,o,x,o,_,_,_,o,x,o,_,_,_,x,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_

Page 48: Kako računalnik naučimo igrati “4 v vrsto”

Kako naučimo računalnik igrati?

1. Odigrane igre zberemo v bazo podatkov_,_,_,_,_,_,_,_,_,_,_,_,x,o,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

_,_,_,_,_,_,_,_,_,_,_,_,x,_,_,_,_,_,x,o,x,o,x,o,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

_,_,_,_,_,_,o,_,_,_,_,_,x,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

_,_,_,_,_,_,_,_,_,_,_,_,x,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,o,_,_,_,_,_,_,_,_,_,_,_,zmaga

o,_,_,_,_,_,_,_,_,_,_,_,x,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

_,_,_,_,_,_,_,_,_,_,_,_,x,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,o,_,_,_,_,_,zmaga

_,_,_,_,_,_,x,_,_,_,_,_,o,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,izenaceno

_,_,_,_,_,_,x,_,_,_,_,_,_,_,_,_,_,_,x,o,x,o,x,o,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

o,_,_,_,_,_,x,_,_,_,_,_,_,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

_,_,_,_,_,_,x,_,_,_,_,_,_,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,o,_,_,_,_,_,zmaga

x,_,_,_,_,_,_,_,_,_,_,_,o,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

x,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x,o,x,o,x,o,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,zmaga

x,_,_,_,_,_,o,_,_,_,_,_,_,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,poraz

x,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x,o,x,o,x,o,_,_,_,_,_,_,o,_,_,_,_,_,_,_,_,_,_,_,zmaga

...

Page 49: Kako računalnik naučimo igrati “4 v vrsto”

Kako naučimo računalnik igrati?

2. Bazo analiziramo s pomočjo algoritmov

strojnega učenja

Page 50: Kako računalnik naučimo igrati “4 v vrsto”

Kako naučimo računalnik igrati?

3. Rezultate algoritmov strojnega učenja

oblikujemo v strategije

Page 51: Kako računalnik naučimo igrati “4 v vrsto”

Kako naučimo računalnik igrati?

•Učimo ga kot bi se sami učili:

– Učenje z ojačanjem (nagrade in kazni)

•Dobre poteze so nagrajene

•Slabe poteze so kaznovane

Page 52: Kako računalnik naučimo igrati “4 v vrsto”

Primeri računalniške igrice“4 v vrsto”

• Igrica na spletu (on-line):– http://playc4.com/?game=ef1e0f437e821b80ae

731845c4792386# (ANG)

– http://www.joyonline.si/index.php?id=igra (SLO)

• V Javi napisan program za “4 v vrsto”:– http://www.ccs.neu.edu/home/eclip5e/classes/cs

u520/ (ANG)

• “4 v vrsto” na Wikipediji:– http://en.wikipedia.org/wiki/Connect_Four (ANG)