[로보코드] Distance 실험 2



이번에는 직접 처음 라운드를 시작할 때 두 로봇 사이의거리 측정해 봤다.

우선 800 * 600 에서 두 로봇의 거리 측정
1000 번의 round 진행하고 측정한 결과이다.
처음에는 327.2254 가 나오더니 두 번째 실험에는 평균이 334.1701 가 나왔다.
조금 많이 차이가 생긴다.

이 결과를 토대로 +-50 사이에서의 % 를 측정해 보았다.
275 ~ 285 = 21
285 ~ 295 = 24
295 ~ 305 = 21
305 ~ 315 = 28
315 ~ 325 = 21
325 ~ 335 = 29
335 ~ 345 = 33
345 ~ 355 = 23
355 ~ 365 = 16
365 ~ 375 = 15
평균 : 321.63112807371306
확률 : 0.231


이번에는 평균이 321.63 이 나온다. 만 번 돌려보고 쉽지만, 너무 오래 걸린것 같다.
275 ~ 375 의 거리가 나올 확률은 0.231 이다.

275 ~ 285 = 63
285 ~ 295 = 65
295 ~ 305 = 51
305 ~ 315 = 52
315 ~ 325 = 52
325 ~ 335 = 53
335 ~ 345 = 53
345 ~ 355 = 45
355 ~ 365 = 53
365 ~ 375 = 60
평균 : 314.9852042287477
확률 : 0.2178414974113899

좀 거리가 좁혀진 감이 있다. 어째든 275 ~ 375 사이의 거리를 가질 확률은 20% 이상으로 보인다.

다음은 IBM 대회에서 사용될 것으로 예상되는 1000 * 800 의 크기.
평균은 435.7967 과 430.6726 이 한 번 나왔다. (이것도 1000 round 돌려본 결과이다.)

385 ~ 395 = 21
395 ~ 405 = 19
405 ~ 415 = 21
415 ~ 425 = 12
425 ~ 435 = 14
435 ~ 445 = 23
445 ~ 455 = 20
455 ~ 465 = 17
465 ~ 475 = 10
475 ~ 485 = 26
평균 : 429.54135680895
확률 : 0.183

385 ~ 485 일 확률이 0.183 % . 웬지 너무 작다는 느낌이 든다. 그래서 한 번 더 실험.
방법은 6개의 로봇으로 400 라운드 진행. 역시 400*5의 효과를 노린다.

평균 : 411.4717300445171
확률 : 0.15201005025125627
뭐, 확률이 그렇군요. 좀 안 좋군요.
package test;
import robocode.*;

public class Observer extends AdvancedRobot
{
double previousEnergy=100;
int movementDirection=1;
int gunDirection=1;

boolean start = true;

static int n =0;
static int count= 0;
static double total =0 ;
static int round = 1;
static int data[] = new int[10];

public void run()
{
setTurnRadarRight(360);
while(true)
{
execute();
}
}


public void onScannedRobot(ScannedRobotEvent e)
{

//if ( start)
//{
short distance = (short) e.getDistance();
out.println(e.getDistance() );

if ( distance > 275 && distance < 375 )
{
int temp = distance- 275;
data[ temp / 10 ] ++;
count ++;
}


total = total + e.getDistance();
// start = false;
n ++;
//}


// 총을 좌우로 회전
//gunDirection=-gunDirection;
//setTurnRadarRight(99999*gunDirection);
}

public void onDeath(DeathEvent event)
{

if ( getRoundNum()+1 == 400 || getRoundNum() == 400)
{
for(int i =0 ; i <10 ; i++ )
{
out.println( (275+i*10) + " ~ " + (285+i*10) +" = " + data[i] );
}


out.println("평균 : " + total / n);
out.println("확률 : " + (double ) count / n);
}

}

}

by 한밀 | 2004/06/07 23:44 | 프로젝트
<< 이전 다음 >>