6월, 2020의 게시물 표시

four in a row, min max 알고리즘, Alpha beta pruning 에 대하여

이미지
안녕하십니까. 제 개인 컴퓨터에 있는 자료를 정리하다 보니, 학부 3학년때 제출 하였던 인공지능 과제를 찾게 되어서 블로그 포스팅 합니다.  코드 링크 :  https://github.com/Myeongjoon/examples/blob/master/artificial%20intelligence/four_in_a_row.html (사실 코드는 대부분 짜지 않았다는 점..) 해당 인공지능 수업을 할 당시는 구글에서 알파고를 발표하였던 그시기였기 때문에 인공지능 수업이 핫하였고, 그중 게임 이론이 중심이었습니다. 인공지능에서 쉽게 다룰 수 있는 내용이 트리 구조를 통한 게임 인공지능 알고리즘이었고 자연스럽게 텀 프로젝트는 four-in-a-row를 통한 리포트가 되었습니다.  Four In A Row four in a row 라는 게임은 간단한 게임입니다.  테트리스 처럼 위에서 아래로 돌이 떨어지는 게임이고, 상대방과 내가 번갈아서 한번씩 돌을 사용 합니다. 위로 4줄, 옆으로 4줄, 대각선으로 4줄 어떤식이든 4개로 이루어진 줄을 하나를 만들면 게임에서 이기게 됩니다. 위의 사진에서 보면 파란색 돌 기준으로 대각선 하나가 4개의 돌로 되어 있고, 따라서 파란색 돌의 승리 입니다. Min Max 알고리즘 위의 게임의 인공지능을 구현하는데에 있어서 여러 방법이 있겠지만 수업시간에서는 민맥스 알고리즘을 중심으로 진행하였습니다.   민맥스 알고리즘은 최대 n번째 이후까지의 수를 예측을 합니다. 이는 두 플레이어가 최선의 수를 두는 것을 가정을 하며, 결국 누군가가 이기려면 그사람은 이길 경우가 가장 높은 수를 두고, 반대로 상대의 수를 예측을 하면 상대가 이길 경우가 가장 낮은 수를 예측을 해야합니다. 아래 사진은 Geekforgeeks 라는 사이트에서 가져왔습니다. 아래는 3개의 수까지 예측을 하는 경우 이며, 마지막 노드의 숫자들은 해당 경우의 수에서의 점수 입니다. 점수를 매기고 난 후에는 차례로 내차례에는 최대한 이길 숫자가 높은 경우로, 상대 차례에는 상대도

대용량 서비스 커뮤니티 스터디 - 1

이미지
이번 포스팅에서는 개인적으로 회사 동료 및 선배님들이랑 진행하고 있는 스터디에 대하여 다루려고 합니다. 스터디의 주 목적은 대용량 커뮤니티를 스터디 하면서 각자 배웠던것이라던가 구축하는 것들을 자료를 모아서 동영상을 만들자고 하던것이 목적입니다. 저 또한 이러한 목적에 도움이 되고 싶고, 개인 역량을 강화하고 싶은게 가장 큰 목적 입니다.  첫 2주간에 스터디에서 진행한 내용은 아래 슬라이드의 내용을 각자 한장씩 읽으면서 짧게 이야기를 나누는 것 입니다.  https://www.slideshare.net/cybaek/201403 안정적인 서비스 운영 위의 슬라이드는 nhn 회사에서 사내 교육용으로 쓰이고 있는 피피티라고 합니다. 주로 대용량 서비스를 다루면서 어떻게 최적화 튜닝을 하는지에 대하여 다루고 있습니다.  주요 내용들은 슬라이드에 있지만 저도 개인 공부를 위해서 블로그에 포스팅 해봅니다.  간단하게 흐름은.. 매우 간단한 웹사이트 구축 방법은 서버와 디비를 하나로 두는것. 여기에서 좀더 부하 분산을 위해서 서버를 2중화를 한다. 이중화 된 서버 앞에는 로드밸런싱을 하는 L7과 같은 물리적 장치를 둘 수 있다. 고가용성을 위해서 서버로 트래픽을 분배하지 않고, 장애가 발생되면 그때 바로 분배하는 방식이 있다. 서로 다른 서버간에 세션이 다르기 때문에 이는 문제가 된다. 예를 들어서 내가 로그인 한 정보가 다른 서버에서는 없기 때문에 갑자기 로그아웃 될수 가 있다. 따라서 이는 로드벨런싱에서 아이피는 같이 가게 하거나 공유 세션을 둘 수 있다. 빠르게 하려면 이를 메모리 디비로 활용 할 수 있다.   DSR 다이렉트 서버 리턴(Direct Server Return). 이 개념은 생소했다. 이는 파일 업로드 서버와 같이 대용량 데이터를 업로드 해야하는 경우, 로드벨런서 서버도 또한 해당 트래픽을 전부다 받게 된다. 이는 네트워크 상의 병목이 될 수 있다. 따라서 업로드를 해야하는 경우는 일단 업로드를 해야하는 서버에 라우팅을 한 후 업로드 연산은 로드 벨런

apache flink mac에 install 해보기

이미지
이글에서는 개인 맥북에 apache flink를 설치하는 것을 다루려고 한다. hadoop 시스템과의 연동은 여기서 다루지 않는다. 1. 아래의 사이트에서 최신 or 사용할 버전의 플링크를 다운로드 받는다. https://flink.apache.org/downloads.html 또는  brew install apache-flink 와 같이 homebrew를 통해 설치가 가능하다. 2. 플링크를 적절한 폴더에 옮기고 bin폴더를 path에 등록 한다. 적절히 등록이 되었다면 flink --version 명령어가 잘 동작 한다. 3. bin 폴더의 start-cluster.sh 를 실행 한다. (base) LM-SEL-16517004:bin mgim$ ./start-cluster.sh Starting cluster. Starting standalonesession daemon on host LM-SEL-16517004. Starting taskexecutor daemon on host LM-SEL-16517004. (base) LM-SEL-16517004:bin mgim$   4. 문제없이 실행될 경우 아래 URL에서 UI를 확인 할 수 있다. http://localhost:8081/#/overview 예제 코드 돌려보기 flink ui를 올려보았으니 예제를 돌려보기로 한다. 예제 코드는 개인 깃허브에서 참고 할 수 있다.  https://github.com/Myeongjoon/examples/tree/master/flink/wordcount 코드에서 mvn install을 하면 나오는 jar 파일을 아래와 같이 flink 명령어를 통해서 실행 시킬 수 있다. (base) LM-SEL-16517004:Desktop mgim$ flink run -c WordCount wordcount-1.0-SNAPSHOT.jar   Job has been submitted with JobID 4064689d15308387f381999c4923c9fc Program executio