Upload
oldecop
View
6
Download
0
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
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.
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
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
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
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.
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:
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.
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/
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.