주메뉴 바로가기 본문 바로가기 하단 바로가기

고객지원

기술문의

Out of Memory 관련 질문입니다.

  • 박찬우
  • 2012.01.04
  • 조회수 2,141
안녕하세요.
Out of memory 관련해서 질문을 드리려고 합니다.
MIP 문제를 푸는데, 변수가 만개 이상 제약식이 몇 십만개 정도 됩니다.
이 정도 사이즈 문제를 푸는데 Root node에서부터 out of memory가 발생을 하더군요.
보통 MIP 문제는 트리 사이즈가 커져서 메모리 overflow가 발생하는데,
이번에 제가 관찰한 부분은 tree 사이즈가 작아도 LP를 푸는데 제약식이 많아 out of memory 에러가 발생하는게 아닌가 쉽습니다.
이런 문제를 해결하려면 어떻게 해야하나요?
트리 사이즈 관련 문제였으면 메모리를 조금 더 할당을 시키던가, 아니면 하드로 메모리를 내려서 사용하면 되고...
단순히 LP 문제면 제약식이 갯수가 많기 때문에 dual로 바꾸어서 풀면 되는데...
이건 MIP 문제라 dual로 바꿀 수도 없고..;;
조금 난감합니다.;;
해결책이 있으면 좀 알려주세요.ㅠㅠ

댓글 1

  • 김민규2012-01-05
    안녕하세요.
    KSTEC의 김민규입니다.

    아래 비슷한 질문에 설명한 내용입니다.
    다음을 확인해 보세요.
    1. 메모리 확장이 설정되지 않았는지
    cplex.setParam(IloCplex::WorkMem,1024); //Default 128MB
    => 1024 메가바이트(1GB)를 할당하도록 변경한 예 입니다.
    .
    cplex.setParam(IloCplex::MemoryEmphasis,1);
    => 메모리 사용을 효율화해서 큰 문제를 풀 수 있습니다.

    2. 구현상의 문제점이 있는지
    -> 소스 코드 내 변수 메모리 해제나, concert library사용시 env.end()를 통한 메모리 해제가 효율적으로 구현되었는지 체크해야 합니다.

    3. 너무 많은 결정변수를 생성하게 구성한 모델링인지
    -> 결정변수의 개수가 너무 많은 경우 많은 메모리를 사용하게 됩니다. 데이터를 확인해 보시고 너무 큰 모델을 구성한 게 아닌지 체크하시고, 모델링 변경을 고려해 보셔야 될 것 같습니다.

    세부적인 사항을 알지 못하니 답변을 드리기가 힘드네요.
    보통 변수개수가 적어도 제약에 의해 바운드가 잘 안되면 tree를 모두 탐색하느라 풀이속도가 늦어질 뿐만 아니라 많은 메모리를 차지합니다. 되도록 바운드 잘 되도록 모델링 조정이 필요할 듯 합니다.

    size가 커져서 생기는 문제라면 다음과 같은 MIP종료 조건을 걸어 풀이해를 찾을 수 있습니다. 참고하세요.

    IloCplex::IntSolLim : MIP solution limit.
    IloCplex::TiLim : Global time limit.
    IloCplex::NodeLim : MIP node limit.
    IloCplex::EpAGap : Absolute mipgap tolerance.
    IloCplex::EpGap : Relative mipgap tolerance.
    IloCplex::TreLim : Tree memory limit.
    아이콘삭제

댓글 입력