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

고객지원

기술문의

[질문]C++과 연동해서 쓸 경우 ILOG CPLEX만의 실행시간을 얻는 방법

  • 전형배
  • 2004.09.23
  • 조회수 2,001
안녕하세요. 저는 한양대학교 산업공학과 석사과정입니다.
다름이 아니라,
C++과 CPLEX를 연동해서 쓰고 있습니다.
그런데 CPLEX만의 실행시간을 얻는 함수는 무엇인지 궁금합니다.

objective value를 얻는 경우는 cplex.getObjValue()를 쓰는 것과
마찬가지로 실행시간(Solution time)을 얻는 방법이 있다면
가르쳐 주시면 감사하겠습니다.

더불어, 실행시간의 한계를 LiTim을 사용해서 부과했습니다.
그러면 제가 정해진 시간안에 optimal값을 주지 못하면 멈추잖아요.
멈춘 상태까지의 Feasible solution중에 가장 좋은 해를
얻는 방법도 있다면 부탁드립니다.

그럼...수고하세요.

사용S/W : CPLEX 9.0, 연구용.

댓글 2

  • 소경철2004-09-23

    CPLEX의 종결 조건에 대한 부가적인 답변입니다..

    문제가 순수 LP 문제인 경우에는 어떤 종결 조건을 주었더라도 그 중에서 어느 하나의 조건에 걸리면 멈추게 됩니다.

    이 때 CPLEX는 그 동안 찾은 해 중에서 가장 좋은 해를 리턴해주게 되죠..

    하지만, MIP 문제인 경우에는 종결 조건에 걸려서 탐색을 멈추기까지 Integer Solution을 찾지 못했다면 CPLEX는 No Solution을 리턴하고 멈추게 됩니다.

    따라서, MIP인 경우에는 최소한 하나의 정수해를 찾을 수 있도록 종결 조건을 주셔야 합니다...
    아이콘삭제
  • 김태현2004-09-23
    안녕하세요..

    CPLEX만의 실행시간을 구하시려면, 간단히 소스를 수정하시면 됩니다.

    =======================================================
    <모델링 부분>
    ..
    ..
    IloNum startTime = env.getTime(); //시작 시각 Check
    <엔진 호출부분>
    ..
    ..
    IloNum endTime = env.getTime(); //종료 시각 Check
    IloNum elapsedTime = endTime - startTime;
    cout << "Total Elapsed Time : " << elapsedTime << endl;
    <결과출력부분>
    ..
    ..
    ======================================================
    이런식으로 엔진호출부 전에 시작시각을 check하고,
    엔진이 종료된 후에 종료시각을 check하시면 됩니다.

    또한, 정해진 시간내에서 Feasible solution 답을 구하신다면,
    CPLEX는 초기해를 구한 후, 정해진 시간내에 해를 계속 개선하도록 되어있습니다.
    이러하기 때문에 시간제약을 주셨다면, 마지막에 나온 답이 자동적으로 정해진 시간내에 가장 좋은 solution 입니다.

    더욱 자세한 내용은 매뉴얼을 참조 하시기 바랍니다.




    아이콘삭제

댓글 입력