PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2009/06/15 03:45:00
Name azurespace
Subject [일반] 빌드오더 계산기란 걸 한번 만들어볼 생각입니다. 도와주실 분?
옛날에 비슷한 프로그램이 있었던 것 같은데 찾아볼 수가 없군요.
하기사 워낙 오래 전이라 1.07 패치 이전 데이터가 들어 있을 것 같습니다.

현재 검색을 통해 찾을 수 있는 녀석은 말 그대로 빌드오더를 입력하면 그대로 행하는데
시간이 얼마나 걸리는지 계산해 주는 물건입니다.

제가 만들고자 하는 프로그램은 원하는 유닛의 종류와 각 유닛의 수를 입력하면
그 유닛들을 만들 수 있는 가장 빠른 빌드오더를 찾는 프로그램입니다.

그러자면 가장 중요한 것들 중 하나가 일꾼의 숫자에 따른 자원 채취율입니다. 이게
가능한 한 실제와 비슷해야만 이 프로그램이 의미가 있을 수 있겠지요.

그래서 이 데이터를 수집해야 하는데, 이게 만만치가 않습니다. 프로브가 미네랄 덩이보다
적거나 같을 때는 프로브 한 마리가 수집하는 속도에다가 프로브 숫자만 곱하면 되지만,
미네랄보다 일꾼 숫자가 많아지게 되면 그렇게는 되지 않죠.

유즈맵 세팅을 이용해서 이걸 어떻게든 테스트할 수는 있습니다. 다만 시도할 때마다 다른 결과가
나올 것이므로, 써먹을 수 있으려면 각 케이스에 대해 10회 정도는 테스트를 해서 표준편차까지 구해야 될 것입니다...

수십번 정도 노가다라면 어떻게든 할 수 있겠으나, 이건 아무래도 어렵습니다. 왜냐 하면, 미네랄이 9덩이인 맵도 있고
10덩이인 맵도 있으며, 일꾼이 10마리일 경우, 11마리일 경우, 12마리일 경우 ... 이런 식으로 상당히 많은 데이터를 수집해야 하기 때문입니다. -,.-;;; 게다가 프로브와 드론의 자원채취율은 비슷하나 SCV의 채취율은 떨어지거든요.


그래서 문제를 단순화하여 조사할 대상을 바꾸기로 했습니다.

각 종족의 건물로부터 한 마리의 일꾼이 맵 위의 각 미네랄까지 가는 시간과,
한 덩이를 채취하는데 걸리는 시간,
그리고 돌아와서 반환하는 데 걸리는 시간을 각각 조사하는 것입니다. (아마 저그와 프로토스는 가는 시간과 같을 것입니다)


그리고는 일꾼들의 움직임을 시뮬레이팅하는 프로그램을 작성합니다. 일꾼들의 미네랄 채취 매커니즘은 공개된 바가 없습니다만 제가 추측하기로는 "일단 자신에게 배정된 자원을 향해 가서, 만일 해당 자원이 다른 일꾼에게 채취되고 있다면, 현재 비어 있는 가장 가까운 자원으로 가서 채취하는" 것입니다.

몇 가지 케이스에 대해서만 '실제의 실험 결과와 비슷한 결과가 나오는지' 검사해 보고,
만일 그렇다면 이외의 케이스에 대해서도 만족스러운 결과가 나올 것이라고 추측할 수 있습니다.

이 방법이 보다 효율적인 것은 말할 것도 없으며, 종족에 따른 차이 또한 위 세 가지 상수를 고치기만 하면 됩니다.


하지만 이 방법 역시 손이 많이 가는 작업이고, 제가 혼자서 하기에는 벅찬 일이므로 피지알러 여러분들의 도움을 필요로 합니다.
간단합니다. 맵의 각 스타팅 위치에서, 사령부와 각 미네랄 사이를 일꾼이 이동하는 데 걸리는 시간을 측정해 주시면 됩니다.
(맵마다 다른 자원 배치 역시 반영할 수 있도록 하는 것이 목표 중 하나입니다.)

자원이 가로로 배열되어 있으면, 왼쪽에서 오른쪽 순서대로, 자원이 세로로 배열되어 있으면 위에서 아래 순서대로 각각 어떤 일꾼이 이동하는데 몇 초의 시간이 걸리는지 적어 주시면 됩니다; 어떤 맵의 어느 스타팅 포인트인지 알려주시면 좋겠죠.

부탁하는 주제에 요구사항이 많아 죄송합니다만, 이 때 시간은 Normal 속도 기준으로 해 주셨으면 좋겠습니다. 맵 에디터에 들어 있는 유닛들의 빌드타임이 Normal 기준이거든요. 스타크래프트의 Replay 기능을 이용하면 될 것 같습니다.

물론 이런거 귀찮다. 난 스타에 이런 프로그램이 나오는 것이 싫다... 이런 분들께는 강요하지 않습니다 ^^;
그냥 관심있는 분들께서 조금씩 도와주시는 것만으로도 그저 황송할 따름입니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/06/15 04:40
수정 아이콘
실제 적용하기에는 변수가 너무 많지 않을까요?

미네랄 사이의 거리,SCV의 경우 건설동안의 자원 채취 불가,건물짓는 위치,초반 일꾼동원(e.g 초반프로브견제를 대처하기위해 SCV가 한기 나가야 한다면 빌드의 소폭수정이 필요함),가스조절 등등...
azurespace
09/06/15 04:52
수정 아이콘
Zwei님// 프로그램으로 빌드오더의 기본적인 틀을 잡는 것이죠.. 물론 스타는 혼자 하는 것이 아니므로 그런 변수들이 생길 수 있습니다만, 그것은 개인의 운영 능력에 맡겨야지요. 그 변수들을 어떻게 관리하고 극복하느냐가 하수와 고수의 차이겠지요?

건설 중인 SCV가 자원 채취를 할 수 없습니다만 그거야 아주 큰 문제는 되지 않을 겁니다. 계산하는 과정에서 실제 게임에서의 변수들을 시뮬레이팅할 생각이거든요. 그러자면 계산하는데 시간은 좀 걸릴 수 있겠지만...
azurespace
09/06/15 05:09
수정 아이콘
궁극적으로는 "어떤 유닛을 먼저 갖춘 다음, 어떤 유닛을 갖추고, 그 다음에 만들 유닛은... " 과 같은 조건들을 모두 계산할 수 있도록 하는 것이 목표입니다. 확실히 쉬운 일은 아닐 겁니다.. 당장 생각한 알고리즘은 Dijkstra의 least cost path 알고리즘 내지는 A*입니다만, 궁극적으로는 유전알고리즘이나 Simulated Annealing 같은 근사 알고리즘을 사용할 생각도 있습니다. 계산 수행 속도면에서 후자가 전자보다 압도적으로 좋은 경우가 많거든요.
彌親男
09/06/15 13:59
수정 아이콘
제가 작년에 알고리즘 공부할때 이에 대한 매커니즘을 공부한 적이 있었습니다. 완벽히 밝혀내지는 못했지만 제가 생각한 것은 다음과 같았습니다.

1. 각자의 미네랄에는 고유한 번호가 있습니다.
2. 각자의 일꾼에 G명령과 C명령에는 미네랄 번호가 변수로 입력됩니다.
(C명령을 누르거나 새로운 본진 건물이 추가되었을때 3번과 4번이 작동합니다. 우리가 앞마당 건물이 완성되자마자 미네랄이 잘 캐지는 이유를 찾기가 어려웠는데 그것이 바로 이것 때문 같았습니다.)
3. 자기와 가장 가까운 미네랄과의 거리와 가장 가까운 본진건물(해처리, 넥서스, 커맨드 센터). 자기가 현재 G명령과 C명령으로 캐고 있던 미네랄과 가장 가까운 본진건물의 거리를 모두 합산합니다.
4. 최단 거리의 미네랄로 이동합니다.
5. 현재 그 미네랄에 G명령(미네랄 캐고 있는 일꾼)이 있는지 확인합니다.
6. 없을시에는 일정거리 안에 있는 미네랄의 번호를 변수로 갖고 있는 일꾼의 상태를 확인합니다.
7. 만약 어떤 미네랄에 해당하는 일꾼이 미네랄을 갖다 주고 있을때 그 미네랄로 이동합니다. (여기에 대한 부가설명을 붙이자면, 이 빈 미네랄로 어떤 일꾼이 달려가고 있을 경우에는 일꾼이 이동하지 않습니다.)
8. 이런 미네랄이 없을 시에는 일정 범위 내에서 가장 예전에 일꾼이 미네랄을 캐기 시작한 (즉, 가장 빨리 빌 예정인 미네랄) 미네랄로 이동해서 대기합니다.

입니다.
彌親男
09/06/15 14:01
수정 아이콘
사실 저 매커니즘은 아닐것 같고 뭔가 이론으로 성립되어 있는 알고리즘을 썼겠지만, 그렇다고 보기에는 너무 변수가 많고 복잡하더라구요... 따라서 독창적인 알고리즘을 만들었을 것이란 가정하에(어짜피 리소스나 계산 시간에 대한 부분은 생각 안한 게임같아요. 스타가..) 이러한 생각을 해 보았습니다.
azurespace
09/06/16 13:03
수정 아이콘
스타가 나온 시기는 486급에서 펜티엄급으로 막 넘어가던 시기입니다. 그다지 복잡한 알고리즘은 쓰지 않았을 거에요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
13692 [일반] 조일전쟁에 관하여 몇가지 생각 [49] Outlawz4367 09/06/15 4367 1
13691 [일반] [세상읽기]2009_0615 [14] [NC]...TesTER4048 09/06/15 4048 0
13690 [일반] [인증해피] 테니스 황제 페더러의 신발 이야기 입니다. [10] 해피5887 09/06/15 5887 1
13689 [일반] 스페인, 토레스, 전반 17분 헤트트릭 작성 중. [18] zephyrus4215 09/06/15 4215 0
13688 [일반] 빌드오더 계산기란 걸 한번 만들어볼 생각입니다. 도와주실 분? [6] azurespace4118 09/06/15 4118 1
13683 [일반] 담배에 관련된 모순, 의문 그리고 의견 [117] Timeless6410 09/06/15 6410 1
13682 [일반] [엘레발] pgr21 엘지팬 여러분! 단관 갑시다! [16] kEn_2698 09/06/15 2698 0
13681 [일반] 블루칼라가 화이트칼라에 가지는 환상 [5] 상상하는 책3838 09/06/14 3838 1
13680 [일반] "선"이란걸 처음 봤습니다. [14] 친절한 메딕씨4817 09/06/14 4817 0
13679 [일반] 야구장 갑시다~ (호랑이팬 함께해요.) [30] Zakk Wylde3160 09/06/14 3160 0
13678 [일반] [인증해피] 신발을 커스텀 해보자!? 필요한건?? [10] 해피6480 09/06/14 6480 1
13677 [일반] 최고의 백신 카스퍼스키를 6개월 동안 무료로 써보세요+무료 악성코드치료 유틸 추천 [29] 서현남편5316 09/06/14 5316 0
13676 [일반] 윤도현 , 신해철 故노무현 대통령 추모콘서트연다네요 . [48] 이연희4503 09/06/14 4503 0
13675 [일반] CJ 마구마구 프로야구 06/14(일) 리뷰 [54] 돌아와요오스2915 09/06/14 2915 0
13674 [일반] 초성체(자음어) 무엇이 문제인가? [55] 큐리스4116 09/06/14 4116 0
13673 [일반] 검찰 언소주 불매운동 수사착수 . 협박이냐or설득이냐 . [10] 이연희3483 09/06/14 3483 0
13672 [일반] 대한민국 `대유행' qt인증. 이번엔 경찰! [16] MBCfoot4698 09/06/14 4698 0
13671 [일반] 손영광 중위를 기억하시나요? 노짱에게 전역신고한 이입니다 [7] 틀림과 다름5580 09/06/14 5580 0
13669 [일반] 2008 베이징 올림픽 대한민국 금메달의 순간들 [17] 승부사치토스4532 09/06/14 4532 0
13666 [일반] [謹弔] '타이거 마스크' 미사와 미츠하루, 경기 중 사망 [8] The xian4188 09/06/14 4188 0
13665 [일반] 2009 남아프리카공화국 피파 컨페더레이션스컵 프리뷰 [22] zephyrus3630 09/06/14 3630 0
13664 [일반] 아 이 글 왜 웃긴데 슬플까요? [14] La_Ciel5641 09/06/14 5641 0
13663 [일반] [리뉴의 잡설] 기운내서 살아가기가 참 힘든 세상입니다 : ) [2] 뉴[SuhmT]2653 09/06/14 2653 0
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로