본문 바로가기

일상

방송대 시뮬레이션 과제



2017년도 2학기 시뮬레이션 과제를 작성하면서 해메었던 부분을 정리한다.


시뮬레이션 결과는 위 스샷 처럼 나오게 하면 끝.


자바로 옮기면서 가장 해메었던 부분은 역시 포아송분포.


하지만 StackOverFlow와 함께라면 두렵지 않습니다.


https://stackoverflow.com/questions/1241555/algorithm-to-generate-poisson-and-binomial-random-numbers


이 글을 힌트삼아 포아송 분포 값을 획득하면 됩니다.


또 잘 쓰이지 않는 Random 함수에 seed 심기.


private static final int seed = xxxx; 로 선언하고,


Random randoms = new Random(seed); 로 사용하면 끝.


나머지는 교재에 나와있는대로 작성하면 됩니다.


int queue = 0; // 줄에서 기다리고 있는 사람(차량) 수, 대기 행렬의 길이
int totque = 0; // 대기행렬 queue의 전체 합(=전체 고객의 총 대기시간)
int totarr = 0; // 총 도착 고객 수
int tpump = 0; // 고객에 대한 봉사시간 (단위: 분)
int time = 0; //시뮬레이션의 현재 시간 (단위: 분)
int tstep = 1; // 세뮬레이션의 진행 단위 시간
double prarr = 20/60d; // 고객이 1분 내에 도착할 확률 (조건: 20명)
int mean = 4; // 평균이 mean인 포아송 확률 변수를 구하려 한다. (조건: 4분)
int tlimit = 100; // 총 시뮬레이션 수행시간


if(rand.nextDouble() < prarr * tstep) { // 고객이 도착한 경우


tpump = getPoisson(mean, rand); // 고객의 봉사시간을 구한다.


이와 같이 Java 형식에 맞춰서 바꿔주기만 하면 됩니다.


StringBuilder sb = new StringBuilder();
sb.append(i);
sb.append("번째 고객 \t");

sb.append("도착시간: ");
sb.append(hm.get("arrTime"));
sb.append("분\t");


결과는 이와 같이 StringBuilder를 이용하여 출력결과를 만들면 됩니다.


그리고 만든 결과값을


public static void main(String[] args) {
    HashMap result = doSimulate();
    printResult(result);
}


으로 실행만 하면 끝.


최대한 간단히 작성하여 원하는 결과를 얻어낸 뒤 한글파일 작성하여 전송 끝.


과제 제출 기한이 다가오면서 생각보다 스트레스를 받았다.


최대한 간단하게 작성하고, 정리하여 제출.


급하게 냈는데 괜찮으려나 모르겠다.