2011-04-22 2 views
9

우선, 나는 멍청한 놈입니다. 나는 또한 한푼도 작성한 코드를 작성한 적이없는 장교입니다. 이것은 내가하는 것을 좋아하는 것입니다. 그것은 재미 있습니다 :) 그 말은, 모든 게임을 잃지 않을만큼 인공 지능을 가진이 콘솔 기반의 tic-tak-toe 게임을 썼습니다. (나는 ai가 호출되어야한다고 생각합니다.) 컴퓨터에 대한 if/else if 문이 70과 비슷합니다. 다음과 같이 3 개의 int 배열을 사용했습니다.if(), else if() C++에서 대체 (이 AI입니까?)

int L[2], M[2], R[2]; 

0 = 공백; 1 = X; 2 = O;
그런 다음 'Looks'like 보드
L [0] | M [0] | R [0]
L [1] | M [1] | R [1]
L [2] | M [2] | 내 질문 (들) (하다)입니다 추측

if(M[0]==1 & M[1]==1 & M[2]==0){M[2] = 2;}//here the computer prevents a win 
else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//here the computer wins 
//and so on....68 more times! 

:
더 나은 방법이 있나요 R [2]


그래서 나는 기본적으로 내가 좋아하는 뭔가를 생각할 수있는 모든 가능한 시나리오를 썼다?
적은 코드 행으로 동일한 결과를 얻을 수있는 방법이 있습니까?
이것은 인공 지능으로 간주됩니까?

+0

tic-tac-toe-playing 알고리즘의 흥미로운 구현은 아마도 ImageJ 매크로로 http://xkcd.com/832/ (즉 wget http : //imgs.xkcd)의 PNG 이미지를 읽습니다. co.kr/comics/tic_tac_toe_large.png) 그리고 답변을 추출하십시오. –

+1

계속 재미있게 보내세요! 분명히 응답을 기반으로, 당신이 배울 수있는 것들이 많이 있습니다. 그것의 아름다움은 아래의 멋진 유행어 중 하나를 배우는 것이 더 많은 물건을 가지고 놀 수 있다는 것입니다. 문제에 대한 접근법을 찾으려면 "tic-tac-toe ai"를 검색하십시오. 그리고 여러분도 알다시피, "이것을 프로그램하는 더 좋은 방법이 있습니까?" "예. 내 길"입니다. :) – gregg

+2

게임을하는 컴퓨터를 연구하는 것은 인공 지능 분야의 일부입니다. 실제로 게임은 인공 지능으로 태클 된 최초의 사례 연구였습니다. 즉, 모든 가능한 이동에 대해 미리 준비된 응답을 제공하는 것은 실제로 AI가 아닙니다. :-) 당신은 지성을 제공하는 사람입니다. 컴퓨터는 스스로를 "알아 내지 못"합니다. 방금 소개 한 인공 지능 교과서에서는 콜린 (Colin)의 대답에 설명 된 미니 맥스 (Minimax) 알고리즘에 대해 설명합니다. –

답변

5

표준 알고리즘은 Minimax입니다. 그것은 기본적으로 게임의 시작 부분이 뿌리 인 나무를 만들고 그 다음에 X가 첫 번째 턴에서 만들 수있는 모든 가능한 이동을 나타냅니다. 그런 다음 각 노드의 하위 노드는 모두 O에서 응답 할 수있는 동작입니다. 기타전체 트리가 채워지면 (Tic-Tac-Toe에서는 가능하지만 Chess 컴퓨터와 같은 게임의 경우 메모리가 충분하지 않음) 두 플레이어가 모두 최선의 행동을 취할 수있을만큼 충분히 똑똑하다고 가정 할 때 자신의 길을 되돌립니다 , 최적의 이동에 도달합니다. 예를 들어 Tic Tac Toe를 사용하는 Minimax의 another explanation이 있습니다.

1

예 더 좋은 방법이 있습니다.

가장 명백한 점은 보드의 미러 뷰가 서로 다른지 확인하여 케이스 수를 단순화하는 것입니다.

또한 "흥미로운"패턴을 배열에 미리 저장 한 다음 데이터와 게임 상태를 비교하는 것을 고려하십시오. 예를 들어, 한 패턴의 패턴은 다음 이동에서 플레이어가 이길 수있는 모든 방법입니다.

또한 선언문 int L[2]에는 배열 L에 두 개의 항목, 즉 L[0]L[1]이 있습니다. L[2], M[2] 등의 참조는 컴파일러가 알아야 할 오류입니다. 경고 수준을 높이는 것을 고려하십시오. 이 작업은 컴파일러에 따라 다릅니다. gcc의 경우 -Wall입니다.

인공 지능의 형태로 간주됩니다. 일련의 if 진술은 누적 된 지식입니다 : 상황을 인식하고 그에 대한 적절한 반응을 얻는 방법. 나는 몇 년 전에 tic-tac-toe 게임을 만들기 위해 사용되는 것입니다 http://en.wikipedia.org/wiki/Tic-tac-toe :

+0

그건 내가 생각한 것 같아. 신경망이 훨씬 더 많은 결과를내는 무언가에 적절할 것으로 보입니다. 그게 기분이 좋아집니다. 또한 코드에서 L [5]로 배열을 선언했습니다. 그게 좋은 연습인지 아닌지는 모르겠지만 몇 가지 이유로 여분의 커플을 갖고 싶습니다. (?) –

+0

여분의 공간은 일반적으로 좋은 연습입니다. 특히 설명이있는 경우 (선언 옆의 설명에) 좋아요. "지금 사용하지 않는". 이 경우, 여분의 요소는 사용되지 않은 바이트로 가득 찬 손을 추가합니다. 그것이 가능한 한 "자유"옆에 있습니다. – wallyk

2

틱택 토에 위키 백과 페이지는 모든 경기의 승리 (또는 묶는)를위한 아주 좋은 알고리즘 윤곽을 가지고있다.

알고리즘을 이해 한 후에는 Tic-Tac-Toe 컴퓨터 플레이어를 구현하는 가장 영리한 방법 중 하나가 마술 광장입니다. 이 방법은 here으로 논의됩니다. 크기에 관한 한, 약 50 줄의 코드에서이 코드가 구현 된 것을 보았습니다. 코드를 찾으면 코드를 게시합니다 :)

인공 지능은 일반적으로 인공 지능 , 뉴런 레이어, 그라디언트 디센트, 지원 벡터 머신, 복잡한 다항식 해결 등이 있습니다. Tic-Tac-Toe 문제 해결

0

실제 인공 지능과 같은 게임을 해결하는 가장 가까운 방법은 인공 네트워크를 코딩하고 tictactoe 게임의 모든 조합으로 훈련시키는 것입니다.

이 경우 코드는 문제를 해결하기 위해 그렇게 많은 것을하지는 않지만 문제를 해결하는 가장 합리적인 선택을 취함으로써 문제를 해결할 수 있습니다.

그러나 신경망을 코딩하는 것은 사소한 일이 :)

+0

신경망은 필요하지 않습니다. 성냥갑과 구슬로 모든 것을 할 수 있습니다. "matchbox tic tac toe"에 대한 검색 시도 –

+0

미니 최대 또는 알파 베타 알고리즘은 전체 AI 필드의 일부로 간주되며 이러한 종류의 문제에 대해 훨씬 간단하고 효율적입니다. – Voo

0

때 (당신이 구축하고있는 AI와 같은) 규칙 기반 시스템을 코딩 할 필요, 당신은 예를 클립처럼 룰 엔진을 사용할 수없는 (이것은 C로 작성된 Expert System을 작성하기 위해 NASA에서 개발 된 도구입니다).

http://en.wikipedia.org/wiki/CLIPS

은 아마도 박하 사탕 발가락을 재생 잔인한,하지만 당신은 멋진 AI 물건을 학습 분위기에있는 경우, 전문가 시스템은 매우 흥미로운 지역이지만, 신경과는 다른 (그리고 아마도 덜 복잡합니다) 네트워크.

재미있게 보내세요!