9
I NSTITUTO S UPERIOR T ÉCNICO Licenciatura em Engenharia Informática e de Computadores Inteligência Artificial Projecto 2 o ¯ Semestre de 1999/2000 O objectivo deste projecto é desenvolver um programa (em ANSI Common Lisp) que jogue uma variante do jogo TETRIS—o GIATETRIS. Para isso, devem ser utilizados os algoritmos de procura estudados na cadeira, e desenvolvidas heurísticas e estratégias de limitação de sucessores que in- corporem conhecimento sobre este tipo de problemas que permita resolvê-los de uma forma mais eficaz. Descrição do problema OTETRIS é um jogo para um jogador, inventado na Rússia na década de 80, que se tornou num dos jogos de computador mais populares do mundo. Desde então foram criadas inúmeras variantes deste jogo. O GIATETRIS é a mais recente destas variantes, criada especialmente para a cadeira de IA. Existem sete peças diferentes, que são as apresentadas na figura 1. 1 A cada peça associamos uma letra que nos permite referir a essa peça de uma forma mais fácil neste texto. Na figura, por baixo de cada peça encontra-se a letra que lhe corresponde. I J L O S T Z Figura 1: Peças do GIATETRIS O objectivo do jogo é dispôr todas as peças de uma sequência aleatória 2 de peças num poço rectan- gular, de modo a obter o máximo de pontos possível. Os pontos obtêm-se quando se formam linhas completas, isto é, sem buracos. Estas linhas são eliminadas do poço, e as linhas acima descem para ocupar a sua posição. No GIATETRIS, ao contrário do que acontece no TETRIS, a sequência de peças é toda conhecida à partida. 1 As imagens das peças apresentadas neste enunciado foram obtidas do jogo GTK Tetris v0.3, de Mattias Wadman (versão para Linux). 2 A sequência tem uma ditribuição uniforme, o que significa que a probabilidade de sair cada peça é igual para todas as peças.

Inteligencia Artificial

Embed Size (px)

DESCRIPTION

O objectivo deste projecto é desenvolver um programa (em ANSI Common Lisp) que jogue uma variante do jogo TETRIS—o GIATETRIS. Para isso, devem ser utilizados os algoritmos de procura estudados na cadeira, e desenvolvidas heurísticas e estratégias de limitação de sucessores que in- corporem conhecimento sobre este tipo de problemas que permita resolvê-los de uma forma mais eficaz

Citation preview

Page 1: Inteligencia Artificial

INSTITUTO SUPERIOR TÉCNICOLicenciaturaemEngenhariaInformáticae deComputadores

InteligênciaArtificialProjecto

2o¯ Semestrede1999/2000

O objectivo desteprojectoé desenvolver um programa(emANSI CommonLisp) quejogueumavariantedo jogo TETRIS—o GIATETRIS. Paraisso,devemserutilizadososalgoritmosdeprocuraestudadosnacadeira,e desenvolvidasheurísticase estratégiasde limitaçãodesucessoresquein-corporemconhecimentosobreestetipo deproblemasquepermitaresolvê-losdeumaformamaiseficaz.

Descriçãodo problema

O TETRIS é um jogo paraum jogador, inventadona Rússiana décadade 80, quesetornounumdosjogosdecomputadormaispopularesdomundo.Desdeentãoforamcriadasinúmerasvariantesdestejogo. O GIATETRIS éamaisrecentedestasvariantes,criadaespecialmenteparaacadeiradeIA.

Existemsetepeçasdiferentes,quesãoasapresentadasnafigura1.1 A cadapeçaassociamosumaletraquenospermitereferir a essapeçadeumaformamaisfácil nestetexto. Na figura,por baixodecadapeçaencontra-sea letraquelhecorresponde.

I J L O S T Z

Figura1: Peçasdo GIATETRIS

O objectivo do jogoédispôrtodasaspeçasdeumasequênciaaleatória2 depeçasnumpoçorectan-gular, demodoaobtero máximodepontospossível. Ospontosobtêm-sequandoseformamlinhascompletas,istoé,semburacos.Estaslinhassãoeliminadasdopoço,easlinhasacimadescemparaocupara suaposição.No GIATETRIS, ao contráriodo queaconteceno TETRIS, a sequênciadepeçasé todaconhecidaàpartida.

1As imagensdaspeçasapresentadasnesteenunciadoforam obtidasdo jogo GTK Tetrisv0.3, de MattiasWadman(versãoparaLinux).

2A sequênciatemumaditribuiçãouniforme,o quesignificaquea probabilidadedesaircadapeçaé igual paratodasaspeças.

Page 2: Inteligencia Artificial

2

As peçascaemdentrodopoçoatéficaremapoiadasnoutraspeçasjá existentesounofundodopoço.Paracadapeça,o jogadorpodecontrolaracolunaondeapeçacai,easuaorientação,quepodeseralteradarodandoa peça90,180ou 270graus.Note-seque,devido a simetrias,algumasdaspeçasnãotêm asquatroorientaçõespossíveis: aspeçasI, S e Z só têm duasorientaçõesdistintas,e apeçaO tem apenasuma. Na figura 2 mostram-seaspeçascom duasorientaçõese na figura 3 aspeçascomquatro.

Rotação0 90

Figura2: Peçascomduasorientações

Rotação0 90 180 270

Figura3: Peçascomquatroorientações

O poçotem umadeterminadalargurae altura,quepodevariar de problemaparaproblema. Ascolunasdopoçosãonumeradasdaesquerdaparaadireita,começandoem0 eterminandonacolunacomo númeroigual à largurado poçomenos1. Umavezqueaspeçasocupammaisdo queumacoluna(com excepçãodapeçaI naorientação0), considera-sequea colunaemqueumapeçaécolocadaéacolunamaisàesquerdaocupadapelapeça.

Comoexemplo,vamosconsiderarum problemaem queo poçotem5 colunase 6 linhas,e quea

Page 3: Inteligencia Artificial

3

primeirapeçaéumapeçaT. Naorientação0, apeçaapenaspodesercolocadanacoluna0, 1 ou2:

Na orientação180, temosuma situaçãosemelhante,mascom a peçavirada ao contrário. Nasorientações90e270,apeçapodesercolocadaemquatroposiçõesdiferentes(paracadaorientação),desdeacolunamaisàesquerda(coluna0), atéàpenúltimacolunaàdireita(coluna3), umavezqueapeçanestaorientaçãoapenastemumalarguradeduascolunas.No total,são14formasdiferentesdecolocarapeça.

Repare-sequeno GIATETRIS nãoépossível deslocaraspeçasaolongodasuatrajectória,peloquenãoépossível preencherumburacoqueexistanumalinhaquetenhajá algumacoisaporcima.Porexemplo,supondoquecolocamosapeçaT tal comoindicadonafigura4, umapeçaS apenaspodesercolocadanumadasseteposiçõesapresentadasna figura 5, e nãopodesercolocadacomoseapresentanafigura6 (emborano TETRIS, comumpoucodejeito, issofossepossível).

Figura4: Exemplo- Primeirapeça(T)

Figura5: Exemplo- Segundapeça(T + S)

No exemploqueconsiderámosatéagora,pudemoscolocar, querapeçaT, querapeçaS, emtodas

Page 4: Inteligencia Artificial

4

Figura6: Exemplo- Posiçãoinválida(T + S)

ascolunase em todasasorientaçõespossíveis paracadaumadaspeças.No entanto,issonemsempreacontece.Uma peçaapenaspodeser colocadanumadeterminadaposiçãose nenhumapartedapeçaficar foradopoço.Porexemplo,seconsiderarmosasituaçãodo jogocorrespondenteao primeiro casoapresentadona figura 5, e quisermoscolocaragoraa peçaI, estanãopodesercolocadacoma orientação0 nacoluna0, 1 ou 2, masapenasna3 e 4. Ou seja,asalternativasdecolocaçãodestapeçasãoasapresentadasnafigura7.

Figura7: Exemplo- Terceirapeça(T + S + I)

Eliminação de linhas eobtençãode pontos

Quandouma peçaé colocada,podecompletarentrezero e quatrolinhas. As linhas que ficamtotalmentepreenchidassãoeliminadase aslinhasacimadescemparaocupara suaposição.Porcadagrupode linhaseliminadasobtêm-sepontos,quevão sendosomadosao longodo jogo. Ospontosobtidosemcadajogadadependemdaquantidadede linhaseliminadasnessajogada,e sãoosindicadosnatabela1.

No delinhaseliminadas Pontosobtidos0 01 402 1003 3004 1200

Tabela1: Pontos

O jogo terminaquandotodasaspeçastiveremsido colocadas,e a soluçãoparao problemaé asequênciadejogadasefectuada,ou seja,a indicação,paracadapeça,dequalacolunaondea peça

Page 5: Inteligencia Artificial

5

écolocadaecomqueorientação.Umasequênciadejogadasquenãopermitacolocartodasaspeçasnãoé umasoluçãodo problema.

A pontuaçãofinal do jogo (isto é, de umasolução)é obtidaadicionandoà somadaspontuaçõesobtidasduranteo jogo com a eliminaçãodaslinhas,o númerode linhasdo poçoque,no final,ficamtotalmentelivres.

Código Lisp fornecido

Paraa realizaçãodesteprojectodevemserutilizadososalgoritmosdeprocura,desenvolvidos emANSI CommonLisp, disponíveisno seguinteURL:

ftp://ftp.gia.ist.utl.pt/pub/cadeiras/ia/projecto/

O códigofornecidoencontra-seno ficheiroprocura.lisp. Estecontéma implementaçãodevários algoritmosde procura. O funcionamentodos mesmosencontra-sedescritoem procu-ra.txt. O maisimportanteé compreenderparaqueservem,nãoperceberexactamentecomoéqueasfunçõesestãodefinidas.

Trabalho a desenvolver

O projectodeve serfeito por gruposdetrêsalunos.Nãoseaceitam,sobnenhumpretexto, gruposcommaisalunos.

O projectoé constituídoporduaspartesprincipais:

1. Implementaçãodo problema,utilizandoparaissoosalgoritmosdeprocurafornecidos.3

2. Comparaçãodosresultadosobtidoscomasváriasestratégiasusadaspararesolver o proble-ma.

Implementação

A implementaçãodo programadeve serefectuadana linguagemCommonLisp. Paraestaimple-mentaçãodeveserescolhidaumarepresentaçãoadequadaparao estadodoproblema.A escolhadasestruturasdedadosutilizadaspararepresentarosestadosdo problemapodeter um impactomuitograndena capacidadedo programaem resolver problemasmaiscomplexos. Assim, a descriçãodasestruturasdedadosutilizadase asrazõesdasuaescolhadevem sermuito bemexplicadasnorelatóriodo projecto.

O elevadofactorde ramificaçãodestetipo de problemasdá origema umagrandecomplexidade,espaciale temporal,dosprocessosde procurautilizadosparaos resolver. O desenvolvimentodeheurísticas,queincorporemconhecimentosobreo GIATETRIS é,por isso,crucialparasepoderemresolver problemascomplexos(emtempoe espaçoútil4).

3Os gruposque o desejarempodem,eventualmente,implementaroutrosalgoritmosde procuraque se mostremrelevantesparaaresoluçãodo problema.

4Na páginadacadeiraserãodisponibilizadosalgunsproblemascoma indicaçãodo tempomáximoaceitável paraasuaresolução.

Page 6: Inteligencia Artificial

6

No entanto,paraalémda utilizaçãode heurísticas,e semprequepossível, devem serutilizadastécnicasque permitamreduzir o factor de ramificaçãodo problema,reduzindoassimo númerode estadosa explorar. A utilizaçãode estratégiasde limitaçãode sucessores(ou heurísticasdegeração), é umadessastécnicas.Um dosobjectivos do projectoé desenvolver algumasestraté-giasde limitaçãodesucessorese estudaro impactoqueelasproduzemnacapacidadederesolverproblemas.

Paraalémde todosos tipos de dadose funçõesquejulgaremnecessáriosdefinir, devem definir,obrigatoriamente, asfunçõesindicadasa seguir, obedecendorigorosamenteà interfaceaquies-pecificada(ou seja,devemutilizar o nome,lista deargumentose valor deretornoaquiespecifica-dos):

cria-problema-tetris: inteiro x inteiro x lista -> problemaEstafunçãorecebeum inteiro querepresentaa largurado poço(o númerodecolunas),uminteiro que representaa altura do poço (o númerode linhas), e uma lista daspeçasqueconstituemasequênciadepeçasacolocarnopoço.Cadapeçaérepresentadaporumsímbolocujonomeéa letrautilizadanafigura1 paraidentificaressapeça.

Estafunçãodeve devolver umaestruturado tipo problema (definidano ficheiroprocu-ra.lisp). Estaestruturadeve estarpreenchidacom os valoresnecessáriosparasepoderresolver o problemadescritopelosargumentosrecebidospelafunção,utilizandoparaissoafunçãoprocura fornecidano ficheiroprocura.lisp.

O valor do slot operadores deve permitir gerartodosossucessoresválidosdeum deter-minadoestado,semutilizar qualquer estratégiade limitação de sucessores.

A seguinteexpressãoé um exemplodautilizaçãodestafunçãoparacriar a representaçãodoproblemadecolocaraspeçasT, S eI, por estaordem,numpoçode5 colunaspor 6 linhas(o exemploutilizadojá anteriormente):

(cria-problema-tetris 5 6 ’(T S I))

estado-pecas-por-colocar: estado -> listaEstafunçãorecebeum estado(estruturadedadosdefinidaporvósquerepresentaum estadodoproblema)edevedevolver umalistacomaspeçasqueaindafaltacolocarnesseestadodoproblema,pelaordememquedevemsercolocadas.Estalista deve utilizar a representaçãoparaaspeçasutilizadanafunçãodescritaanteriormente.

Porexemplo,aseguinteexpressãodeve produziro valor apresentado:

> (estado-pecas-por-colocar(problema-estado-inicial(cria-problema-tetris 5 6 ’(T S I))))

(T S I)

estado-poco: estado -> array-de-bitsEstafunçãorecebeum estado(tal como a funçãoanterior)e deve devolver um array debits bi-dimensional,dedimensões(linhas colunas), ondelinhas ecolunas cor-respondem,respectivamente,aonúmerode linhase decolunasdo poçono problemaa queo estadocorresponde.Cadaposiçãodo arraydeve contero bit 0 ou 1, conformea posiçãocorrespondentedopoço(noestadorecebido)estiver, respectivamente,livre ou ocupada.

Porexemplo,aseguinteexpressãodeve produziro valor apresentado:

Page 7: Inteligencia Artificial

7

> (estado-poco(problema-estado-inicial(cria-problema-tetris 5 6 ’(T S I))))

#2A((0 0 0 0 0)(0 0 0 0 0)(0 0 0 0 0)(0 0 0 0 0)(0 0 0 0 0)(0 0 0 0 0))

resolve-tetris: inteiro x inteiro x lista -> solucaoEstafunçãorecebeos mesmosargumentosquea funçãocria-problema-tetris, edeve devolver umasoluçãoparao problemadescritopor essesargumentos.Paraissodeveusaro algoritmodeprocura,heurísticae estratégiadecortedesucessoresescolhidoscomomaispromissoresdeentreosváriosimplementados.

A soluçãodeve serumalista comtantoselementoscomoo númerode peçasdo problema,indicando,paracadapeça,quala colunaondea peçafoi colocadae a suaorientação.Cadaelementodestalista deve corresponderà peçana mesmaposiçãoda lista recebidacomoargumento,edeveserumalistadetrêselementos:o símboloqueidentificaapeça,uminteirocorrespondendoàcolunaondeapeçafoi colocada,euminteirocorrespondendoàorientaçãoda peça. Os númerosutilizadosparaa orientaçãodaspeçasdevem ser os indicadosnasfiguras2 e3. No casodapeçaO, a orientaçãoésempre0.

Por exemplo, uma soluçãopossível parao problemaapresentadona descriçãoda funçãocria-problema-tetris,correspondendoàprimeiraalternativadafigura7,éaseguinte:

> (resolve-tetris 5 6 ’(T S I))((T 0 270) (S 0 0) (I 3 0))

Comparaçãode resultados

Paraalémdaimplementaçãodescritaacima,devemserefectuadostestesquepermitamestudarosseguintesaspectos:

� Desempenhodosalgoritmosdeprocuranão-informadaversusprocurainformada;

� Efeitodalimitaçãodesucessoresnaresoluçãodosproblemasequalidadedasváriasestraté-giasimplementadas.

� Qualidadedasváriasheurísticasimplementadas.

O resultadodestestestese aanálisedessesresultadosdevemserapresentadosnorelatório.Algunsdosfactoresmaisimportantesparaaqualidadedo relatóriosãoosseguintes:

� A relevânciadostestesefectuadosparao tipo deestudopretendido.

� A formacomoosresultadossãocompiladosea clarezacomquesãoapresentados.

� O significadoestatísticodosresultados(quedependedo númerodetestesefectuados).

� A análiseediscussãodosresultadosobtidos.

Page 8: Inteligencia Artificial

8

Entr egado códigodo projecto

O códigodesenvolvido emcadaprojectoseráexecutadoparaverificarasuacorrecção.Porestemo-tivo, éextremamenteimportantequetodasasfunçõespedidasnesteenunciadoexistameobedeçamà interfacedefinida.

Paraalémdisso,parafacilitar o envio electrónicodo código,estedeve estarcontidonum únicoficheiro. Seduranteo desenvolvimentousaremváriosficheiros,devem, no final, antesde enviaro projecto,colocartodoo códigonumúnicoficheiro (e certificarem-sequeesseficheiropodesercompiladoecarregado).

O códigoentregueserácompiladodepoisdesecompilare carregar todoo códigofornecidopelosdocentesda cadeira. Por isso,apenasdeve serentregueo códigoescritode novo, semincluir ocódigodoficheiroprocura.lisp.

Se for necessárioalteraralgumafunçãodo ficheiroprocura.lisp, devem redefinira funçãono vossoficheiro, em vez de modificar o ficheiro procura.lisp. No entanto,as alteraçõesqueefectuaremaocódigofornecidonãodevemmodificara interfacedafunçãoprocura nemasoperaçõesexistentesparao tipo problema.

A entregadocódigoporvia electrónicaéobrigatória paraqueo projectopossaseravaliadoedeveserfeitadeacordocomo seguinteprocedimento:

1. Navossaáreadamáquinamega.ist.utl.pt coloquem-senadirectoriaondeseencontrao ficheirocomo códigodo projecto

2. Executemo comando/home/cadeiras/ic-ia/entrega-projecto-ia

3. Introduzamo númeroeapassword dovossogrupo

4. Introduzamo nomedo ficheirocomo códigoLisp doprojecto

Esteprocedimentoirá enviar o projectopor correioelectrónicoparaum servidorno GIA quepro-cessaa mensagemautomaticamente.A respostasobreo sucessodaentrega é deseguidaenviadapor correioelectrónicoparao endereçoda pessoaqueexecutouo comando.Confirmemquenãohouve problemascomaentrega.

O númerodegrupoé atribuídoautomaticamenteaquandodainscriçãodo grupo,queé obrigatóriae deveserefectuadaatravésdapáginadeWWW dacadeira.

Prazos

O projectodeveserentregueatéàs15horasdodia31deMaio de2000edeveráconstardoseguinte:

� Umaversãocódigodoprojectoentregueusandoo procedimentodescritonasecçãoanterior;

� Umalistagemcompletado códigodoprojectodevidamentecomentadaeparagrafada(Nota:o tipo deletrautilizadonalistagemdeve sermonospace, como,porexemplo,Courier);

� Um relatóriodoprojecto.Um modeloderelatório,quepodem/devemadaptardeacordocomasvossasnecessidades,encontra-seem:

ftp://ftp.gia.ist.utl.pt/pub/cadeiras/ia/projecto/

Page 9: Inteligencia Artificial

9

O projectodeve serentregue dentrode umacapaou encadernado,apresentandovisivelmenteogrupo, número,nomee turmadosalunosa quecorresponde.Projectosquenãosejamentreguesnestascondiçõesserãopenalizadoscomtrês valores.

Podeou nãohaver umadiscussãooral do trabalhoe/ouumademonstraçãodo funcionamentodoprograma(serádecididocasoacaso).

Projectosiguais,ou muito semelhantes,serãoclassificadoscom0 (zero)valores.O corpodocentedacadeiraseráo únicojuiz do queseconsideraou nãocopiarnumprojecto.

Critérios de avaliação

Os factoresmais importantesparaa classificaçãodo projectosão(nãonecessariamentepor estaordem):

� Execuçãocorrectado programa.

� Qualidade/variedadedasheurísticas.5

� Qualidade/variedadedasestratégiasdelimitaçãodesucessores.

� Estudocomparativo realizado.

Note-sequeos trêsúltimos aspectossãoavaliadosessencialmentepelo relatório,pelo quea suaqualidadeémuito importanteparaumacorrectaavaliaçãodestesaspectos.

5Note-sequefunçõesheurísticasmuitosemelhantes,compequenasvariações,nãosãoconsideradasheurísticasdifer-entesparaefeitosda avaliação.Ou seja,o aspectomaisimportantenaavaliaçãodasheurísticasdesenvolvidasé a suavariedade,e nãopropriamentea suaquantidade.