hugDog
Android DevLog
hugDog
전체 방문자
오늘
어제
  • 🙌 Hello? (162)
    • 🧩안드로이드 (12)
      • 개념 정리 (5)
      • 버그 해결 (4)
      • 기타 (3)
    • 🔐알고리즘 (54)
      • 개념 (0)
      • 백준 (48)
      • 프로그래머스 (6)
    • 📄개발 일지 (0)
      • FINPO (0)
    • 🔤프로그래밍 언어 (71)
      • C++ 정리 (49)
      • C++기초플러스 연습문제 (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • 🚩기타 (9)
      • 목표 (6)
      • 일상 (3)
      • 문서 (0)

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
hugDog

Android DevLog

오목 AI/인공지능의 간단한 원리 및 코드
⭐Project

오목 AI/인공지능의 간단한 원리 및 코드

2018. 4. 4. 23:36
728x90

대학교 1학년때 C언어 교수님이 프로그램을 만들어 제출하라해서 만든 프로그램... 조잡하다ㅠㅠ  

인공지능보단 여러가지 패턴에 가중치를 설정해서 가중치가 가장 낮은 곳에 돌을 놓는 프로그램이다.





원리?



우선 ai가 가중치가 제일 낮은 곳에 돌을 놓도록 설정한다.

또한, 오목판에 백돌이 하나 존재할 경우 백돌 주위의 가중치는 +1로 설정한다.




0  0  0  0  0

0  1  1  1  0

0  1 ○ 1  0

0  1  1  1  0

0  0  0  0  0




반면 오목판에 흑돌이 하나 존재할 경우 흑돌 주위의 가중치는 -1로 설정한다.





0  0  0  0  0

0 -1 -1 -1 0

0 -1 ● -1 0

0 -1 -1 -1 0

0  0  0  0  0





만약 백돌과 흑돌이 이렇게 존재한다면 가중치는 다음과 같다.

(파란색 부분은 가중치가 서로 상쇄되어 0이 된 부분)




 0 0  0  0 0 

 -1 0  0  1 0 

 -1 ● ○ 1 0 

 -1 0  0  1 0 

 0 0  0  0 0 




오목 AI는 가중치가 가장 낮은 3개의 -1중에서 하나를 선택해 백돌을 놓는다.

(필자는 가장 위쪽에 위치한 -1에 백돌을 착수하도록 프로그래밍함)




다음은 흑돌이 오목판에 이렇게 나열되있다고 가정해보자




0  0  0  0  0

-1 -2 -3 -2 -1

-1  ● ● ●  -1

-1 -2 -3 -2 -1

0  0  0  0  0




앞서 소개한 2개의 패턴만으로는 ai가 -3의 위치에 돌을 놓게 된다.

하지만 -1의 위치에 돌을 놓지 않으면 진다. 이를 방지하기 위해

흑돌이 3개 연달아 있을 경우 그 양옆의 가중치(그림에서 -1의 위치)를 -50으로 설정한다.




0  0  0  0  0

-1 -2 -3 -2 -1

-50 ● ● ● -50

-1 -2 -3 -2 -1

0  0  0  0  0




오목 AI는 가중치가 가장 낮은 2개의 -50중에서 하나를 선택해 백돌을 놓는다.

(필자는 가장 왼쪽에 위치한 -50에 백돌을 착수하도록 프로그래밍함)



소스.c



이러한 패턴을 응용 추가하여 만든 것이 바로 이것입니다.

무려 2700줄이 넘는 코드입니다. 코드에 비해 프로그램 수준은 매우 떨어집니다..

또한, 코드를 검토하지 않아서 매우 더럽고 보기 어렵습니다. 

그냥 참고용으로만 보세요.

이 프로그램을 만들면서 재능이 없음을 실감했습니다 ㅠㅠ

저도 제가 못하는 것은 잘 알고있으니 악플은 삼가해주세요.





ps.최근에 한 초등학생이 학습하는 오목을 만들어 정보올림피아드에서 상을 받았다고 하네요... 열심히 공부해야겠습니다.






728x90
    hugDog
    hugDog
    안드로이드 공부 중인 학생입니다!

    티스토리툴바