기본 콘텐츠로 건너뛰기

추천 가젯

[프로그래밍 이야기 6] 포터블 라이터기의 재발견: 웹소켓과 스크립트가 만든 현장 대응 파이프라인

 임베디드 장비나 FPGA 칩이 탑재된 하드웨어를 현장에서 다룰 때, 가장 고민스러운 부분은 펌웨어 라이팅 환경을 구축하는 일입니다. 공장 PC나 현장 컴퓨터에 무겁고 거대한 벤더 전용 프로그램(IDE)을 일일이 설치하고 환경을 설정하는 것은 지극히 비효율적입니다. 이때 가장 똑똑하고 유연한 접근법은 공장 PC에 무언가를 설치하려 애쓰는 대신, 엔지니어의 노트북 한 대를 즉시 '포터블(Portable) 라이터기'로 탈바꿈시켜 현장에 투입하는 것입니다. 노트북을 포터블 라이터기로 만드는 전략과 웹소켓 노트북을 이동식 포터블 라이터기로 활용하기 위해 거창한 프로그램을 깔 필요는 전혀 없습니다. 핵심은 펌웨어를 입히는 CLI(명령줄 인터페이스) 툴과, 이를 원격에서 실행해 줄 지극히 단순하고 가벼운 웹소켓(WebSocket) 서버 하나만 준비하는 것입니다. 중요한 점은 여기서 사용하는 웹소켓 프로그램이라는 것이 결코 복잡하거나 무거운 시스템이 아니라는 사실입니다. 단 몇 킬로바이트 수준의 경량 훅(Hook) 역할만 수행하는 웹소켓 서버를 노트북에 띄워두면, 공장 PC 환경을 오염시키지 않고도 노트북 한 대가 완벽한 이동식 라이팅 단말기로 변신합니다. 가장 가벼운 웹소켓 훅과 Shell 스크립트의 결합 이 시스템의 실체는 놀라울 정도로 가볍고 명확합니다. 노트북 내부에서는 하드웨어(.sof)를 구운 뒤 MCU 펌웨어(.elf)를 연달아 다운로드하는 아래의 Shell 스크립트가 실행의 중심을 잡습니다. // flasher.sh - FPGA 및 Nios II 펌웨어 연속 라이팅 스크립트 #!/bin/bash 1. FPGA Hardware (.sof) 구우기 #!/bin/bash echo "Hello World" echo "=== Programming FPGA Hardware ===" quartus_pgm -c "USB-Blaster [1-4]" -m JTAG -o "p;mcu.sof...

HOMM3) 베이스 데미지는 어떻게 선택될까?

http://heroescommunity.com/viewthread.php3?TID=20955
의 글을 참조하였으며, 위글 작성자의 실험의 의한 결과이다.
이 글은 폰으로 작성했다.


히어로즈에서 데미지 계산과 관련된 것은 중요한 이 슈 중 하나다 그 계산법에는 베이스 데미지라는 것이 들어가는데 그 계산은 기본적으로 한스택의 유닛이 가지고 있는 최저 데미지에서 최대데미지 곱하기 유닛의 수로 정해진다고 알려져있다.


그렇다면 도끼 창병 100마리 일 경우 최저 데미지 최대 대미지 그리고 그 숫자를 포함하여 계산해 보면 200--300에 데미지 값을 가질 것이다. 그렇다면 200에서 300 사이 모든 정수가 동등한 확률로 선택 될 것인가 아니면 그 사이에 있는 실수가 선택이 될 것인가 어떻게 선택될 것인가는 중요할 것이다.

   다만 실험의 결과로 계산을 해 볼 시 선택되는 데미지는 일정한 간격을 가지는 것을 확인할 수 있다 그 결과는 다음과 같다 스타 계수가 열기 이하일 경우는 경우는 그 숫자만큼 각각의 대해서 정수 난수 발생기를 통해서 동등하게 골라지도록 고른다.

 그리고 그 값을 더 한다.  쉽게 생각하면 열기의  유닛이 각각 한 대씩 때렸을때 데미지를 생각하면 된다 만약 스택이 열기가 넘을 경우는 여기까지 계산을 하고 유닛에 숫자 n 나누기 10을 곧 방값을 베이스 데미지로 선택한다.

 이 결과가 얘기하는 반은 간단하다 숫자가 많던 적던 평균 데미지는 동일하게 정해지고 그 분포는 10기까지는 다르게 정해 쉬다가 그 이후로는 분포가 고정 된다 이런 식으로 계산한 이유는 이상적ㅇ.로야 각 유닛이 한대씩 때리니까 각각 난수를 돌리면 되지만 천기가 넘아가게 되면 난수 발생기를 돌리는 행위도 컴퓨팅파워를 많이 먹어 충분한 부담이 되기 때문일 것이다.

거기다가 숫자가 커지면 커질수록 편차값이 줄어들어(sqrt(N)이지만 한마리당은 1/sqrt(N)) 져 최대데미지가 선택될 확률이 점점 줄어들게되기 때문이다.

뭐 어떻게 하던간에 기대값은 동일하다.

다만 분포가 달라지고 베이스 데미지가 가질 수 있는 값은 각 유닛의 데미지 범위 내 정수 의 10제곱 값중에 한 값이 정해지는갓은 확실하다.


실습을 좀 해보도록하자

일단 마스터 그렘인 4기가 누군가를 공격한다면 베이스 데미지는 다음과 같다.
 1-2 1-2 1-2 1-2 4번 돌려서 정한다.
최소 데미지가 나올 확률은 (1/2)^4 = 1/16이다.
최대도 그러하다.
그리고 모두 고려하면
데미지 4     5        6               7    8
         1/16  4/16   6/16    4/16 1/16
이다. 이런식으로 10기까지만  계산하고 그 이상은 그냥 곱한다. 그렇기에 10기 이상의 마스터 그렘린의 최대(최소) 데미지가 선택될 확률은 1/1024로 동일해진다.

드레드 나이트의 경우는 10기 이상일 경우 나가여왕이랑 동일한 데미지가 선택되려면 15-30 총 16개 중에 선택되므로, 1/2^40 즉 하드디스크 계산법을 쓰면(근사지만 많이 날라감 10^3 simeq 2^10) 대략, 1조번 때리시면 한번정도 선택되겠다.

마리당 30의 데미지를 주고 싶으면 그냥 나가여왕 쓰자....

일단 가짓수만 1테라다. 이거 표로만드는 것도 쉽지 않다.

음 이게 시사하는 바는 간단하다. sod에서는 하단에 최저에서 최대 데미지가 뜨고 HotA에서는 죽일 수 있는 유닛의 수가 뜬다. 최대만 보고 다죽을거 생각해서 전투하면 심히 골룸하다. 데미지가 이지선다형인 그렘린도 4기일때 최대 데미지 잘 안나온다.

불확실성에 기대지 말고 축복을 걸자.


그냥 모든유닛의 데미지는 평균값으로 고정됐다고 생각하고, 사는게 편하다. 

도마뱀전사는 3.5이고, 그랜드엘프은 4x2인 것이다. 마스크맨은 3x2인 것이다.

두대 때리는 친구들은 한스탁당 한번 공격소비으로 난수를 20개까지 돌린다. 최대값은 더 안 나온다.


난수를 많이 쓰는갓을 싫어하고, 정수 난수만 쓰는거보면 고르곤도 적당히 계산하다가. 말 것 같은데 이건 문서를 찾아보던가 직접 실험하서 분포를 그려보도록 하자.


댓글