'AI'에 해당되는 글 1건

  1. 2014.12.06 숫자야구 게임 컴퓨터랑 1대1 하기(+소스코드 in github)
2014.12.06 00:42



10 만번 랜덤 숫자 반복 시행시

--------------------------------------

average: 5

min: 1,  max: 9

mid: 5

1 130(0.0013)

2 998(0.01128)

3 5483(0.06611)

4 17776(0.24387)

5 33725(0.58112)

6 28415(0.86527)

7 10364(0.96891)

8 2832(0.99723)

9 277(1.0)

--------------------------------------

자바 버전의 경우. 평균적으로 5회만에, 96% 확률로 7회만에 유저의 정답을 맞춤. 최악의 경우 9회이긴 한데... 사실 약간의 알고리즘을 더 추가하면 더 좋은 확률로 맞출 수 있을것 같기도..

(자바스크립트 버전은 약간 문제가 있어 다를 수 있음,,,,)


기본적인 알고리즘은 후배가 제안한것을 사용함.(ㅋㅋㅋ)

Java 버전, Javascript 버전 두개가 존재

아직 개선할 필요가 있는데 귀찮아서 패스...

특히 자바스크립트 버전의 경우 다음 번호를 부를때 앞에서 부터 불러와서 유저의 숫자값이 작을수록 더 빨리 마추게 되고 값이 클수록 늦게 맞추는 경향이 있음. 나중에 랜덤으로 호출하게 해야하는데... 나중에 해보자.


웹버전(자바스크립트)

http://quadflask.github.io/baseball-game-ai/baseball-game-ai-js/


TDD 실행

http://quadflask.github.io/baseball-game-ai/baseball-game-ai-js/tdd.html


자바로 짤때는 되도록 TDD할려고 노력했는데 역시 쉽진 않은듯...

자바스크립트 또한 TDD할려고 노력했는데 몇가지 중요한것들이 누락되었음. 역시 귀찮아서...또는 무지해서 하지 못함. 자바스크립트의 경우 유닛 테스트 라이브러리로 QUnit을 사용했고 dom manipulation, spa 용으론 AngularJs 를 사용해봄. 오오 AngularJs는 신세계!! 



사용한 알고리즘(이라기 애매함)


1. 컴터는 먼저 012 부터 987(? 맞나) 까지의 모든 가능한 패턴들을 가지고 있는다.(이게 맘에 들진 않지만....일단 구현은 편리했다...)

2. 컴터가 숫자를 제시했을때의 결과를 토대로 판단을 시작함

a. [1볼] 일 경우

숫자 3개중 반드시 한개 포함, 나머지 두개 미포함 해야하는 조건으로 숫자를 추린다. 

전체 숫자갯수가 720개였나? 에서 보통 여기서 2/3 이 추려진다.

b. [2볼] 일 경우

a 랑 비슷

c. [3볼] 일 경우

모든 숫자를 포함해야 하기 때문에 그렇지 않는 패턴들은 제거한다. (굉장히 맞출 확률을 높이는데 좋음.ㅋ)

d. [1스트라이크] 일 경우 

한 자리에 대해 숫자가 같고 나머지 두 숫자는 포함하지 않는 조건으로 숫자를 추린다.

e. [2스크라이크]일 경우

d랑 비슷

f. [1스트라이크, 1볼] 일 경우

이게 좀 애매한데 a, d를 적절히 섞어서 추리면 됨.

g. [1스트라이크,2 2볼] 일 경우

이건 좀 간단하니 패스

h. [아웃] 일 경우

이것또한 매우 간단




소스코드

https://github.com/QuadFlask/baseball-game-ai

저작자 표시 비영리 변경 금지
신고
Trackback 0 Comment 0


티스토리 툴바