안녕하세요.
요즘 이 게시판을 저만 이용하는거 같아서 조금 멋쩍긴하네요.
오늘 드릴 질문은 수리식 상에서 결정변수 앞에 붙는
파라미터에 관련된 내용입니다.
현재 item과 period에 따라 결정변수의 수가 결정되는 MIP 수리식 하나를 풀고 있습니다.
타 논문에서는 CPLEX를 사용해서 똑같은 수리식에 5X5짜리 문제를 푸는데 평균 0.5초안에 해결했다고 나오는데요 제가 풀었을때는 200초 이상이 걸리더라구요.
(더 큰사이즈 문제는 시간 차이가 훨씬 더 나구요. 심지어 타 논문에서는 5초안에 해결 했다는 7X7 같은 경우는 한참돌아가다가 메모리 부족이라고 뜨기도 하더군요.)
같은 사이즈(정수변수의 개수, 제약식의 수 등이 동일)의 문제인데 시간 차이가 너무커서 원인이 뭘까 생각해봤습니다.
1. 타 논문에서는 혹시 LP파일이나 OPL로 구현하고 저는 concert를 이용한 C++로 실행시켜서? (근데 이건 솔루션 타임을 구하는 범위를 CPLEX가 모델을 받아서 푸는 부분으로만 설정했기 때문에 아닌듯 하네요)
2. 메모리 설정이나 화면에 문제푸는 과정을 보여주는 시간 때문에?
이건 코드 상에 다음의 것들을 포함해봤지만, 변화가 없었습니다.
cplex.setParam(IloCplex::WorkMem,1024);
cplex.setParam(IloCplex::MemoryEmphasis,1);
cplex.setParam(IloCplex::SimDisplay, 0);
cplex.setParam(IloCplex::MIPDisplay, 0);
3. 타 논문에서는 결정변수 앞에 붙는 파라미터가 모두 정수인 반면에 제가 푸는 문제에서는 파라미터에 소숫점 이하 네다섯자리까지 존재하는 실수값들이 많아서?
세 번째 이유 같은 경우에, 제가 임의로 파라미터를 모두 정수로 바꿔봤는데 원래 200초 이상에서 80초대로 줄긴 했습니다. 0.5초대는 어림도 없었구요.
제가 지금까지 알기론 MIP문제를 해결하는데 걸리는 시간은 정수변수의 개수나 제약식의 개수에 dependent 한걸로 알고 있는데 결정변수 앞에 붙는 파라미터가 정수냐 실수냐에 따라서도 큰 영향을 받는지 궁금합니다.(CUT 같은 걸 생성하고 넣는데 영향을 주는거 같기도 하구요.)
혹시 추정가는 원인이 있으시다면 조언 부탁드립니다.
제가 풀어야 될 문제가 훨씬 더 큰 문제도 많은데
예상치도 못했던 5X5 사이즈 부터 문제가 생겨서 당황스럽네요.