"오목 인공지능"의 두 판 사이의 차이

jjuiddong
이동: 둘러보기, 찾기
3번째 줄: 3번째 줄:
 
* 소스
 
* 소스
 
** https://github.com/jjuiddong/Omok-AI
 
** https://github.com/jjuiddong/Omok-AI
 +
  
 
* 오목 인공지능의 핵심은 돌들을 어떻게 나눗느냐다.
 
* 오목 인공지능의 핵심은 돌들을 어떻게 나눗느냐다.
** 6목, 여러개의 돌들로 얽혀졌을 때에 문제를 해결하려면 돌을 잘 나누는 것이 핵심이다.
+
** 6목, 여러개의 돌들로 얽혀졌을 때에 문제를 해결하려면 돌을 잘 나누어야 한다.
 
** 이부분은 separator namespace 로 따로 빼두었다.
 
** 이부분은 separator namespace 로 따로 빼두었다.
* X: 놓아서는 안될 곳
+
*** 10 으로 이루어진 스트링을 입력받아, n개의 스트링으로 나눠 리턴한다.
* S: 놓을 수는 있지만 우선순위에 의해서 놓지 않을곳
+
* 1 : 돌
 +
* 0 : 빈자리
 +
* X : 놓아서는 안될 곳
 +
* S : 놓을 수는 있지만 우선순위에 의해서 놓지 않을곳
 
* 0011010011110001010 -> 0011010 + 0111110 + 001010
 
* 0011010011110001010 -> 0011010 + 0111110 + 001010
 
* 011101011110 -> 011101X + 11110
 
* 011101011110 -> 011101X + 11110
 
* 011010 -> S1101S
 
* 011010 -> S1101S
 
** 가운데 빈곳에 돌을 놓을 때 가장 좋은 결과를 얻게된다. 011110
 
** 가운데 빈곳에 돌을 놓을 때 가장 좋은 결과를 얻게된다. 011110
 +
 +
* 돌을 나누는 알고리즘
 +
while( separate(source, dest, remainder))
 +
{
 +
  source = remainder;
 +
  dest 저장
 +
}
 +
 +
separate(src, dst, remainder)
 +
{
 +
  dst = src를 5개 단위로 나눠 저장.
 +
  separateTwo(dst, tmp1, tmp2)
 +
  dst = tmp1
 +
  remainder = tmp2 + src의 나머지;
 +
}

2014년 3월 23일 (일) 20:57 판

Omok2.png


  • 오목 인공지능의 핵심은 돌들을 어떻게 나눗느냐다.
    • 6목, 여러개의 돌들로 얽혀졌을 때에 이 문제를 해결하려면 돌을 잘 나누어야 한다.
    • 이부분은 separator namespace 로 따로 빼두었다.
      • 10 으로 이루어진 스트링을 입력받아, n개의 스트링으로 나눠 리턴한다.
  • 1 : 돌
  • 0 : 빈자리
  • X : 놓아서는 안될 곳
  • S : 놓을 수는 있지만 우선순위에 의해서 놓지 않을곳
  • 0011010011110001010 -> 0011010 + 0111110 + 001010
  • 011101011110 -> 011101X + 11110
  • 011010 -> S1101S
    • 가운데 빈곳에 돌을 놓을 때 가장 좋은 결과를 얻게된다. 011110
  • 돌을 나누는 알고리즘
while( separate(source, dest, remainder))
{
  source = remainder;
  dest 저장
}

separate(src, dst, remainder)
{
  dst = src를 5개 단위로 나눠 저장.
  separateTwo(dst, tmp1, tmp2)
  dst = tmp1
  remainder = tmp2 + src의 나머지;
}
개인 도구
이름공간

변수
행위
둘러보기
도구모음