어린 시절부터 20Q 전자 게임이 어떻게 작동하는지 궁금했습니다. 당신은 물체, 사물 또는 동물을 생각합니다. (예 : 감자 또는 당나귀 ). 기기는 다음과 같은 일련의 질문을합니다.

  • 빵?
  • 야외에서 찾을 수 있습니까?
  • 레크리에이션에 사용됩니까?

각 질문에 대해 , 아니요 , 아마도 또는 알 수 없음 . 저는 항상 방대한 중첩 조건 (if -statements). 그러나 프로그래머에게는 복잡하기 때문에 이것이 가능한 설명이 아닐 것 같습니다.

이러한 시스템을 어떻게 구현할까요?

답변

20Q가 구체적으로 어떻게했는지 모르겠지만 20 개의 질문 .

이 문제를 해결하는 방법에는 여러 가지가 있지만 한 가지 방법을 설명하겠습니다. . 이러한 게임은 일종의 결정 트리 를 구현할 수 있습니다. 20Q와 같은 전자 게임의 경우이 트리는 미리 계산되어 쉽게 이동할 수 있습니다. 학습 결정 트리 를 사용하는 방법이 있습니다. 여기서 게임은 사용자가 무엇인지 추측 할 수없는 경우 질문 끝에 새로운 개체를 받아 들일 수 있습니다. 질문.

질문이 일련의 예 또는 아니오 대답이면 이진 트리로 끝납니다. 각 노드는 질문이고 잎은 답입니다. 질문에 대해 알 수 없거나 확실하지 않은 경우 하위 노드를 결합하고 해당 질문을 연속해서 질문하여 가능한 답변을 더 추출 할 수 있습니다.

여기에 이미지 설명을 입력 div>

기본적으로 프로세스입니다.

  1. 개체의 전체 목록으로 시작합니다. 이것들은 모두 똑같이 가능성에서 시작하거나 개체가 테스트에서 선택 될 가능성에 따라 정렬 될 수 있습니다.
  2. 결정 트리의 첫 번째 질문부터 시작합니다. 질문 대기열로 푸시합니다.
  3. 대기열 상단에서 질문을합니다.
  4. 응답 처리 :
    1. 예 / 아니요 응답은 미리 정해진 양을 제거 / 추가합니다. 질문을 기반으로 각 답변의 확률.
    2. “미정”답변은 미리 정해진 “예”양의 일부를 제거 / 추가합니다.
    3. “알 수 없음”은 확률을 변경하지 않습니다. / li>
  5. “알 수 없음”또는 “미정”응답은 다음 노드 질문 모두를 질문 대기열로 푸시합니다. “예”또는 “아니요”응답은 각각의 예 / 아니오 노드를 질문 대기열에 추가합니다.
  6. 질문이 없거나 단일 답변의 확률이 사전 정의 된 “확실성”을 초과 할 때까지 3 단계로 이동합니다. “임계 값.
  7. 가장 가능성있는 대답을 제공하십시오.

트리 생성은 아마도 다른 질문의 주제 일 것입니다. 하지만 기본적으로 가능한 한 답변을 나누는 질문을 선택하는 것입니다. 질문을 가장 균등하게 나누는 질문을 시작 부분에 배치하여 가장 많은 질문을 가장 빨리 도출 할 수 있도록합니다.

Answer

간단한 대답은 휴대용 게임 20Q가

. 20Q.net에서는 게임이 플레이 된 모든 게임에서 학습한다는 점을 제외하고 장난감과 유사한 20Q.net 게임의 다양한 버전을 플레이 할 수 있습니다. 휴대용 장난감은 동일한 신경망 알고리즘입니다. 신경망은 질문 할 질문을 선택하고 추측합니다.이 접근 방식은 AI가 배운 것과 다른 질문에 답하더라도 AI가 종종 올바르게 추측한다는 것을 의미합니다. 또 다른 장점은 게임이 있다는 것입니다. 같은 생각을하더라도 게임마다 다르게 질문합니다.

알고리즘 고전 영어 게임 (Animal, Vegetable, Mineral)의 신경망은 1988 년 Robin Burgener에 의해 만들어졌습니다. . . 저요.

문의 해 주셔서 감사합니다.

댓글

  • 안녕하세요, Robin, 사이트에 오신 것을 환영합니다. 발명가 보다이 질문에 더 잘 대답하는 사람. 20Q가 실제로 얼마나 복잡한 지 아는 것은 ' 흥미 롭습니다. 사이트에 대한 기여와 인공 지능에 대한 기여에 감사드립니다. '이 사이트를 가끔 방문하여 A.I. 질문 :).
  • 헤헤, 이런 일이 발생하면 마음에 듭니다.

답변

“20q 코드”를 검색 한 결과 다음을 찾았습니다. http://mosaic.cnfolio.com/B142LCW2008A197

이 버전은 동물을위한 것이지만 실제 20 개의 질문에는 비슷한 알고리즘이있을 것입니다.

다음은 제가 연결 한 코드에 대한 간단한 개요입니다.
프로그램에 하드 코딩 된 여러 가지 답변이 있습니다.그런 다음 몇 가지 TRUE 또는 FALSE 속성이 할당됩니다.

#define ANIMALS_LIST "daddylonglegs bee penguin eagle giraffe octopus tiger elephant jellyfish bull \nparrot dolphin python crocodile cat leopard monkey zebra sheep rat \nowl spider frog polarbear snail tortoise rabbit salmon rhino fox" #define MAMMALS "0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 1 1" #define FLYING_ANIMALS "1 1 0 1 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" #define WATER_ANIMALS "0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 0" #define BEAK "0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0" ... 

보시다시피 벌은 포유류가 아니지만 날아 다니는 등입니다.

각 그룹에 대한 배열이 있습니다.

int mammals[ TOTAL_ANIMALS ] = { 0 }; int flying_animals[ TOTAL_ANIMALS ] = { 0 }; int water_animals[ TOTAL_ANIMALS ] = { 0 }; ... 

각 질문을받는 경우 :

 askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals ); 

프로그램은 적절한 카테고리의 정의를 살펴보고 TRUE 또는 FALSE 값과 질문에 대한 예 또는 아니요 답변을 기반으로 가장 가능성이 높은 동물을 추적합니다.

다음에서 수행됩니다.

void askUserQuestion( int guessNumber, char* question, int* animalData ); 

답변

방대한 의사 결정 트리 나 하드 코딩 된 if / else 문이 아닙니다. 발명가 인 Robin Burgener는 2005 년 특허 출원에서 그의 알고리즘을 완전히 문서화 했습니다. “은 매우 간단합니다.

댓글

  • 다른 답변을 찌르는 대신 알고리즘에 대한 간단한 설명을 제공 할 수 있습니다.링크를 게시했습니다.
  • 다른 답변을 놓친 경우 위에 댓글을 달았습니다! 아마도 @ user22025는 여기에 간단한 설명을 줄 수 있습니다. : D

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다