Não sei como o 20Q fez isso especificamente, mas há muitas informações sobre como implementar um jogo de 20 perguntas .
Existem muitas maneiras de resolver isso, mas descreverei uma maneira. Esses jogos podem implementar algum tipo de árvore de decisão . Para um jogo eletrônico como o 20Q, essa árvore seria pré-computada e bastante fácil de percorrer. Existem métodos para usar as árvores de decisão de aprendizado em que o jogo pode aceitar novos objetos no final das perguntas, se não conseguir adivinhar o que o usuário está perguntando.
Quando as perguntas são uma série de respostas sim ou não, você acaba com uma árvore binária. Cada nó é uma pergunta e as folhas são respostas. Quando as perguntas são respondidas com incógnita ou não, os nós filhos podem ser combinados e suas perguntas podem ser feitas em série para selecionar ainda mais as respostas possíveis.
Basicamente, este é o processo:
- Comece com uma lista completa dos objetos. Todos podem começar com a mesma probabilidade ou podem ser classificados pela probabilidade do objeto ser escolhido no teste.
- Comece com a primeira pergunta na árvore de decisão. Empurre-o para a fila de perguntas.
- Faça a pergunta no topo da fila.
- Resposta do processo:
- Respostas Sim / Não remove / adiciona uma quantidade predeterminada de probabilidade de cada resposta com base na pergunta.
- A resposta "Talvez" remove / adiciona uma fração da quantidade predeterminada de um "sim".
- "Desconhecer" não altera as probabilidades
- Uma resposta "Desconhecido" ou "Talvez" envia as duas perguntas dos nós seguintes para a fila de perguntas. Uma resposta "Sim" ou "Não" apenas adiciona o respectivo nó sim / não na fila de perguntas.
- Vá para a etapa 3 até que as perguntas ou a probabilidade de uma única resposta estejam além de um limite predefinido de "certeza".
- Forneça a resposta mais provável.
Gerar a árvore é provavelmente o tópico de outra pergunta. Mas basicamente é escolher perguntas que dividam as respostas o máximo possível. Coloque as perguntas que dividem as perguntas da mesma maneira no início, para que o maior número de perguntas possa ser selecionado mais rapidamente.
Pesquisei no Google "código 20q" e encontrei o seguinte: http://mosaic.cnfolio.com/B142LCW2008A197
Esta versão é apenas para animais, mas as 20 perguntas reais provavelmente têm um algoritmo semelhante.
Aqui está uma rápida visão geral do código que vinculei:
Existem várias respostas diferentes codificadas no programa. Vários atributos VERDADEIRO ou FALSO são atribuídos a eles:
Como você pode ver, uma abelha não é um mamífero, mas voa etc.
Há uma matriz para cada grupo:
Quando cada pergunta é feita:
O programa analisa a definição da categoria apropriada e rastreia qual animal é mais provável aquele em que você está pensando, com base nos valores VERDADEIRO ou FALSO e na resposta Sim ou Não inserida à pergunta.
Isso é feito em:
fonte
Não é uma árvore de decisão massiva ou um monte de instruções if / else codificadas. Robin Burgener, o inventor, documentou completamente seu algoritmo em seu pedido de patente de 2005. É engenhosamente simples.
fonte