ImagePuzzle Game Project

Project/Programming 2007. 3. 3. 02:13
*  대학교 시절 졸업년도에 만들었던 게임이다. 퍼즐 게임에 대한 어떠한 자료도 없이 그냥 퍼즐게임을 해보고 초등학교 문방구에서 파는 퍼즐 놀이기구(?!)를 사다가 로직을 어떻게 설계할 것인가를 고민하며 만들었던 것이라 많은 애착이 있는 자료다.

어 플리케이션으로서 그럴듯 하게 디자인도 해서 넣어보고 게임의 순위도 사용자 컴퓨터에 저장할 수 있도록 하였고, 무엇보다도 이미지는 프로그램상에 존재하는 것이 아니라 사용자 컴퓨터에서 이미지를 검색하여 그 이미지를 사용하여 게임을 진행할 수 있도록 한 점이 특징이다, 이때 이미지만을 축출하여 리스트로 표현하는 로직을 구현할 때 재귀함수를 사용하여 하위 디렉토리를 탐색하는 방식을 사용했는데 그때 아마도 재귀함수의 짧은 코드로서의 단순성에 반해 엄청난 결과를 창출한다는 것을 알게 되었는데 속도 면에서는 영 마음에 들지 않았던 기억이다.

아무튼 이 게임 하나 만든다고 학과 컴퓨터실에서 알바를 하며 밤 늦게까지 혼자만의 재미에 푹 빠져 살았던 시절이 그립기도 하다. 물론 지금도 그런 놀이속에 살고는 있지만...

뭐.. 누가 그랬던가 돈이 있어도 지하철을 타는 것과 돈이 없어서 지하철을 타는 것은 모두 지하철을 탄다는 것은 같으나 그 마음은 다르다고.... 아마도 그 재미는 비슷하나 그때의 젊음속에서 느꼈던 것과는 다른 것 같은 생각이 든다. 아무래도 돈과 관련이 있는 것과 나이와 관련이 있는, 이 두가지 때문이 아닐까...쿠쿠

사용자 삽입 이미지

invalid-file

프로젝트 프리젠테이션


invalid-file

게임 인스톨 파일


위 프로그램을 실행하기 위해서는 JDK 1.2이상 버전이 설치되어 있어야 합니다.








    

설정

트랙백

댓글

Multipayer Perceptron(EBP 알고리즘 구현 프로그램)

Project/Programming 2007. 3. 3. 01:25
구현 과정
프 로그램 구현 과정에서 처음에는 5 by 5픽셀로 설정을 하여 패턴을 입력한 결과 숫자들이 서로 비슷한 픽셀 안에서 학습을 하기 때문에 학습율이 저조한 편이었습니다. 그래서 픽셀의 수를 7 by 7로 하여 구현해 보았습니다. 앞의 5 by 5 픽셀에 비해서는 좀더 나은 학습율을 보였지만 이것 마저도 학습율은 만족스럽지 못했습니다. 그래서 다음에는 픽셀의 수를 7 by 8로 가로 세로의 픽셀수를 다르게 하여 총 입력 노드수를 56개로 패턴을 결정하고 노이즈 패턴을 입력한 결과 앞의 픽셀보다는 나은 결과치를 얻을 수 있었습니다.
 이 과정에서 한가지 알수 있던 것은 10개의 패턴들이 1로 세팅된 수가 많으면 많은 수록 학습율은 떨어졌으며 0인 부분 즉 패턴에서 색깔이 칠해지지 않은 부분이 많은 10개의 패턴의 학습율은 크게 향상되는 것을 알수 있었습니다.
 그리고 에타의 값과 초기의 가중치값의 변경에서도 학습율이 변동되는 사실을 입증할 수 있었습니다.

프로그램 설명
 EBP 알고리즘으로 구현한 제 프로그램은 패턴의 픽셀 수(가로, 세로)와 히든 노드의 수,에타값, 웨이트을 프로그램 구동 중에 수정할 수 있도록 하였으며 10개의 패턴의 픽셀을 마우스로 클릭하여 임의의 패턴들을 만들어 노이즈패턴을 입력 결과를 확인할수 있도록 하였습니다.

프로그램 버그, 및 문제점
1.)이 프로그램의 입력 노드는 총 56개인대 반하여 패턴의 수가 10개이기 때문에 입력노드의 15% 벗어나는 패턴들을 학습하였기 때문에 학습율이 보다 작은 패턴으로 학습하는 것보다는 저조할 수 있습니다.

2.> 프로그램의 패턴의 픽셀 수를 프로그램 구동중에 수정할 수 있도록 하였으나 자바 언어에서는 배열의 값을 초기 세팅할 때 초기 선언 부분에서만 가능하여 7 by 8의 배열 범위를 넘는 필셀의 수를 입력하였을 경우에는 ArrayIndexOutOfBoundsException에러를 냅니다. 그래서 초기 배열의 값을 넣을 때 뒤에 20개의 공간을 추가하여 사용자가 7 by 8이상의(가로*세로 20이하) 픽셀을 입력하였을 경우에도 프로그램에 에러가 나오지 않도록 보완하였습니다.

3.> EBP 알고리즘의 학습의 끝을 모든 가중치가 0에 가깝거나 가중치의 차이가 거의 없을 때까지 반복 학습을 해야하는데 반하여 제 프로그램의 학습의 끝은 카운트로 설정을 하였습니다. 픽셀의 수를 고정했을 경우에는 차이의 최소 값을 셋팅할 수 있지만 사용자가 임의로 픽셀의 수를 셋팅하게 만들었기 때문에 그 기준에 문제점이 있었습니다.


* 대학교시절 인공지능 수업을 들으면서 실습 과제로 제작했던 EBP 알고리즘 프로그램.
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지



 

    

설정

트랙백

댓글

승려의 섬에는 과연 무슨일이 일어났는가?

Programming/Algorithms 2007. 2. 21. 10:56

마이크로 소프트사는 기발한 면접 문제로 유명하다.  아래는 마이크로소프트사에서 면접을볼때 질문했던 문제중에 하나입니다. 여러분도 한번 생각해 보세요


if((생각한 시간 > 2분) || (문제의 답을 이미 알고 있는가?)){
    웃고 넘어감;
}else{
    앞으로 돌아가서 최소한 2분 동안 답을 생각해 볼것;
}
 
"옛날에 어느 나라에  승려들만 모여 사는 섬이 있다. 그들 중에서 어느 사람은 눈이 빨갛고 어느 사람은 눈이 갈색이다. 눈이 빨간 사람은 마법에 걸려 있기 때문에 스스로 눈이 빨갛다는 사실을 깨닫게 되면 그날 밤 12시에 스스로 목숨을 끊어야만 한다(그것은 마법이었기 때문에 눈이 빨갛다는 사실을 깨달은 사람은 예외 없이 목숨을 끊어야 한다). 승려들은 서로의 눈 색깔에 대해 전혀 언급하지 않는다는 불문율이 있었기에 상대방의 눈 색깔을 알려줄 수도 없었다. 그 섬에는 거울도 없고 거울 비슷한 물건도 없었기 때문에 자신의 눈이 무슨 색인지 아는 사람은 아무도 없었다. 그래서 그들은 자신의 눈 색깔을 알 길이 없었기에 행복하게 살아갈 수 있었으며, 자살 따위를 하는 사람은 아무도 없었다.
 그러던 어느 날 그 섬에 관광객이 찾아왔다. 그는 승려들 사이에 존재하는 규칙을 알지 못했기 때문에 절대로 하지 말아야할 말을 내뱉고 말았다.
 "당신들 중에서 적어도 한 명은 눈이 빨간색이로군요."
무심한 관광객은 그 날로 되돌아갔지만, 남아있는 승려들은 생전 처음으로 눈 색깔에 대한 말이 나왔기 때문에 크게 동요하지 않을 수 없었다. 그리고 그날 밤부터 그 섬에는 무서운 일이 일어나기 시작했다. 빨간 눈을 가진 사람은 모두 3명이 있었다. 과연 어떤 일이 일어났겠는가?

임백준저 - 누워서 읽는 알고리즘 중에서 발췌


http://www.sellsbrothers.com/fun/msiview/default.aspx?content=question.htm


위 주소는 마이크로소프트사의 면접 문제를 모아놓은 곳입니다.
 
 
---------------------------
 
var dayCount = 0;
whatHappened = function (redEye:Number):Number { dayCount++; if (redEye == 1) {
                trace(dayCount+"");
        } else {
                trace(whatHappened(redEye-1)+"번 승려 죽음");
        }
        return redEye;
};
trace(whatHappened(3)+"번 승려 죽음");

----------------------------
 
flash에서는 메모리상의 스택 Depth가 255를 넘어가게 되면 오버플로우(overflow)가 발생한다. 다시 말해서 위 redeye 승려가 255명을 초과하게 되면 플래시는 힘들다고 계산 안한다.  그런데 구현이 맞는지 모르겠습니다.;;

    

설정

트랙백

댓글