Download - Inteligencia Artificial

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