[로보코드] 두 로봇이 가만히 있어서 죽는 시간.
두 로봇이 가만히 있다보면 두 로봇의 에너지가 동시에 떨어지기 시작한다. 더 자세히 말하면 로보코드에서는 상대방의 공격으로 에너지의 변화가 없으면 경기장의 로봇들의 에너지가 떨어진다. (벽에 부딪치거나, 불렛을 발사 한 다고 해서 떨어지는 것은 아니다. )

Inactivity Time 은 기본값인 450으로 설정되어 있는 상태에서, 실험했다.

경기를 시작하고 나서 가만히 있기만 해서부터 로봇이 죽는데 까지 걸리는 시간은 1451 tick 이다. 초당 30 틱의 경기를 진행 할 때 48.3666.. 초라는 시간이 나온다. 경기 시작후 부터, 가만히 있는 상태에서 452 이 지나면 에너지가 떨어지기 시작한다.

disable 한 로봇이 죽기 까지는 1011 과 1077 (35.9 ) 이 나온다.

이 것을 바탕으로 최대 1 대 1 경기의 최대 경기 시간을 추정할 수 있다. 에너지가 떨어지는 것을 멈추기 위해서는 상대로부터 공격을 당하거나 내 공격이 성공해야 한다. 최소 에너지를 소비하면서 공격하는 방법은 power 가 0.1 일 bullet 으로 공격하여 성공하는 경우이다. 이 경우 상대방은 0.4 라는 에너지를 잃고 나는 0.1 을 읽고 0.3 이라는 에너지를 얻게 된다. 최대 시간의 경기를 아주 근사한 에너지 차로 이기거나 지는 경우 이다. 그래서 최대 시간의 경기를 펼칠려면 공격 받은 로봇이 다시 452초가 지나기전 0.1의 bullet 으로 공격한 로봇을 맞추어야 한다.

이런 씩으로 따져 보면 결론적으로 로봇은 0.2 씩 에너지가 감소한다. 그리새
100 / 0.2 * (1451 틱 * 2 ) 라는 공식이 생긴다. 결론적으로 최대 공격시간은
1451000 이 된다. 초당 30tick 으로 경기할 경우 13 시간 반이나 경기하게 된다. 윽.. 실제로 이런 경기를 보려면 잠시 창을 최소화 해두는게 좋을 것 같다. (로보코드 경기창을 최소화로 두면 엄청난 속도로 경기하는 것을 알 수 있다. 작업표시창에 마우스를 갖대되면 풍선 도움말로 초당 경기수가 표시하게 된다. 보통 초대 300~400 tick 은 넘는다. )

그럼 10개의 로봇이 한 경기장에서 경기를 펼친다면 최대 경기 시간은 ??
대략 100 / 0.2 * (1451 틱 * 10 ) 에다 + alpha
나중의 + alpha 는 경기하다 보면 로봇이 disable 되기 바로 전 3.0 으로 공격하는게 가능하다. 그리고 disable 된 로봇에 최대 공격을 하게 되면, 실질적으로 -12 이상의 데미지를 입히는게 가능하다. (보너스 데미지를 생각안했음.) 이럴 때 상대방은 9 라는 에너지를 얻을 수 있다. 이러한 이유로 10 로봇이 11 로봇의 효교를 가져올 수 있으리라 생각된다.

크게 잡아 100/0.2 * (1451 * 11 ) = 7980500 거의 74 시간이다..
결론은 short 보다는 크고, int 내에서 해결 가능한 값이다.

뭐, 이런 일은 절대 일어나지 않으리라 본다. 그렇게 신중한 로봇이 있으리라 생각하지 않는다. 더군다나. 서로 주고 받는 경우는 거의 없을 것이다.
그냥 계산 한 번 해본다.

이게 뭐하는 짓이냐고 하는 사람도 있을 것이다. 난, 공학도이다. 공학도란, 상황에 대한 시뮬레이션을 정확히 할 수 있어야 한다. 로보코드를 단순히 이기는 로봇을 만들기 위해 만든다면, 남의 코드를 조합해서 만들어 낼 수 있다. (이럴 경우 성능이 좋다고 장담하지 못하겠다. 공학의 기초은 trade off 도 모르는 사람일 테니, 전략의 장단점을 제대로 파악하지 못하겠지. )
by 한밀 | 2004/06/07 16:23 | 프로젝트
<< 이전 다음 >>