O teor deste artigo também é científico. Nenhuma destas definições foi estabelecida por mim: são correctas. Falam de conceitos matemáticos comuns e Ciência da Computação.

<< Artigo anterior

Secção 4: Noção de Função e sua Computabilidade_

No meu último artigo deste teor falámos em como um jogo de vídeo pode ser considerado um jogo sem jogadores, se houver um programa que o acaba de forma eficiente. Porém, essa visão é redutora e talvez desrespeituosa para com os jogos e o seu significado. Os jogos de vídeo nunca foram media cujo propósito é simplesmente termina-los. Ainda assim, se o seu propósito fosse observa-los enquanto caminham até ao seu fim, teríamos algo muito próximo ao cinema e ao vídeo. Confesso que o fiz de consciência tranquila, afinal, é nessa experiência que consiste um video Let’s Play quando munido de um agente cujo propósito é relatar e dar opinião no que vai decorrendo no jogo. Mas não é isso que quero fazer.

Um dos objectivos dos jogos foi dar a oportunidade de nos aproximarmos mais de personagens e histórias, de forma a que estas tenham um maior impacto no seu significado. Sou completamente a favor desta capacidade e confesso que o que me prende tanto neste formato de media é exactamente isso. Mas um dos problemas mais graves e responsáveis pelo irrealismo dos jogos de vídeo é a inteligência artificial. São as suas decisões questionáveis (que por vezes acabam por nos prejudicar) e a sua falta de versatilidade na interação que são culpadas.

Definição 3.1: Uma função é uma relação entre dois conjuntos.

Uma definição sucinta, mas longe de limitada quanto ao seu significado. O que a definição anterior quer dizer, na verdade, é que uma função é algo (chamemos-lhe banana) que recebe elementos de um conjunto e devolve elementos de outro. Por vezes, este conjunto é o mesmo. Vejamos o seguinte exemplo:

Exemplo 3.2: Seja f: N -> N tal que f(x)=x+1 onde é o conjunto dos naturais (i.e.: 1, 2, 3, 4, 5, 6, 7, 8, …)

A função anterior, usualmente denotada por “sucessor”, é uma função que nos permite, dado um número, saber qual o número que vem a seguir a ele. Consideremos agora o próximo exemplo mais complexo:

Exemplo 3.3: Seja X o conjunto dos nomes de pessoas alguma vez registadas em Portugal e Y o conjunto de números de cartão de cidadão alguma vez existentes. Considere a função g: Y -> que recebe um número de um cartão do cidadão e devolve o nome da pessoa associada ao mesmo.

Determinar qual a fórmula da função g é uma tarefa fácil se tivermos acesso aos dados adequados. Se tivermos uma base de dados que tenha na primeira coluna os elementos de indexados e o respectivo elemento de a que este corresponde à frente, a nossa função é apenas um procedimento que recebe um número de cartão, procura a linha da base de dados com esse número e devolve o nome que está à frente.

Secção 5: Motivação a funções não computáveis_

A abordagem no último artigo quanto a programas foi muito semelhante. O nosso programa recebia dados relativamente ao jogo (i.e.: os ataques do nosso pokémon e o pokémon adversário) e devolvia qual o ataque a utilizar. O nosso conjunto de partida é então o produto cartesiano entre quatro cópias do conjunto de todos os ataques que os pokémon podem ter e todos os pokémon existentes e o conjunto de chegada é o conjunto de todos os ataques que os pokémon podem ter, sendo que o que o programa faz é o descrito na frase anterior.

Mas se está a pensar que todas as funções são programas, desengane-se! Perceber isto não é propriamente trivial, visto grande parte dos exemplos que temos de funções acabam sempre por ser funções finitas (isto é, funções que têm como conjuntos de partida conjuntos finitos) e todas essas são programas. Considere o seguinte exemplo:

Exemplo 3.4: Seja A={a1,a2,a3,…,an}, B={b1,b2,b3,…,bn} e f:A -> B tal que f(ax)=bx. O seguinte programa define a função descrita:

Function[x,

If[x=a1, return b1,

If[x=a2, return b2,

If[x=a3, return b3,

If[x=an, return bn]…]]]

Este programa prova a computabilidade da função f, pois, para todo o elemento em A, ele devolve o respectivo resultado de quando aplicada a função. E repare que a função é completamente independente do conjunto AB.

Mas nem todas as funções infinitas não são computaveis. Considere a função identidade sobre o conjunto dos naturais N, tal que I(x)=x. Tudo ao que aplicarmos I devolve isso mesmo. O seguinte programa descreve-a:

Function[x, return x]

E tal como a identidade, qualquer função definida por uma fórmula aritmética sobre os números reais é computável. Por exemplo:

Function[x, a=(x^100)+73/42, return a]

Então que funções é que não são computáveis? Algo que se acreditou à medida que estes conceitos se iam definindo era a capacidade dos computadores fazerem provas (ou demonstrações). Provas são processos construtivos que asseguram a veracidade de uma tese, funciona um pouco como a argumentação, mas é necessariamente factual e exacta. Criar esses processos é, grande parte das vezes, feito de forma criativa e com recurso a estupefacientes, algo que todos sabemos que os computadores não conseguem fazer ou consumir. Mas até essas provas conseguiram ser feitas por computadores, de forma exaustiva (isto é, gerando todas as derivações conclusivas) e identificando o melhor e mais eficiente processo mais tarde.

Então não entendo Bernardo… Para quê esta conversa toda?! Há ou não há funções que não podem ser programas!?!?!?

A ciência e a tecnologia está muito a dobrar a esquina de entender o raciocínio humano. O facto de se saber mesmo muito muito pouco sobre o funcionamento do cérebro e dos seus neurónios poderá ser o que nos está a impedir de gerar uma inteligência artificial tão boa que nos consegue enganar. Ou talvez não. Talvez já tenhamos descoberto como a simular e apenas não estamos a condicionar esses programas da forma correcta. Mas isso não me interessa para nada. O que me interessa é a forma como os jogos de vídeo conseguem beneficiar com esta história toda. E acho que estamos muito próximos de dar o próximo passo na inteligência artificial nos jogos de vídeo e esse passo não é dado por falta de gente instruída nesta área, falta de tempo ou falta de meios. Acredito mais na primeira hipótese. Ou então estou só a dizer parvoíces. Mas há funções que estão provadas como não podem ser programas.