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

고객지원

기술문의

정수로 떨어지게 안되나요?

  • 안형대
  • 2009.06.10
  • 조회수 1,893
현재 MIP형태로 문제를 풀고 있는 학생입니다.
버전은 Cplex10.1을 사용하고 있으며
방식은 구형으로 lp파일을 이용하여 접근하는 방식을
사용하고 있으며 변수에 integer로 선언을 해줘도
이 값이 계속 정수로 떨어지지 않고 소수점아래 6자리까지 떨어집니다.
셋업변수이기 때문에 0또는 1로 정확하게 떨어져야만 하는데
이런 경우에는 어떤 방법을 사용해야만 하나요?

그리고 두번째 질문입니다.
현재 제 상황은 c코드내에서 lp파일을 생성하여
그 lp파일을 돌려서 문제를 푸는 방식을 사용하고 있습니다.
처음에 이방법을 배워서 그냥 사용하려고 하지만
약간씩 수정을 하기위해서는 약간 불편한 부분이 없지 않아 있어서
소스내에서 바로 변수를 입력해서 만드려고 합니다.
그런데 제가 만드는 문제가 기본적으로 주어지는 파라메터값에 의해서 변수가
증감하는 형태입니다. 예를들어 제품의 수와 기간에 따라
변수의 수도 증감하는 모형입니다. 이런 경우에는 어떤방식을 사용하나요?
혹시 참고할만한 자료가 있을지 여쭤봅니다.

댓글 4

  • 유환주2009-06-10
    수리모형의 계수에 의한 영향으로 "Numeric difficulties"가 발생한 경우일 수 있습니다.
    CPLEX 메뉴얼에서 Numeric difficulties를 검색해서 참조하시기 바랍니다.
    < LP 파일을 올려 주시면 테스트 해보겠습니다>
    --------------------------------------------------------
    2번째 질문은 CPLEX 예제를 보시면 다양하게 있습니다.
    아래 예제는 "ilolpex3.cpp"의 일부 입니다.
    IloNumVarArray x(env, 8, 0.0, 50.0) 에서 "8"이 생성할 변수의 갯수입니다.
    조건에 따라서 원하는 만큼의 변수 생성을 하면 됩니다.
    ---------------------------------------------------------
    IloNumVarArray x(env, 8, 0.0, 50.0);
    model.add(IloMinimize(env,-9*x[0] + x[1] + 4*x[2] + 2*x[3] -8*x[4] + 2*x[5] + 8*x[6] + 12*x[7]));
    model.add(-x[0] + x[2] + x[4] == -3);
    아이콘삭제
  • 안형대2009-06-11
    계수에 따른 문제가 된다는 말씀이시죠?
    죄송하지만 한번 테스트부탁드립니다.
    문제상황이 조금 애매해서 lp파일이 지저분할수도 있습니다만
    부탁드립니다.
    아이콘삭제
  • 유환주2009-06-12
    첨부한 파일을 제가 실행한 결과를 첨부 합니다.
    정상적인 결과가 나옵니다.
    CPLEX의 MIP tolerance (EpGap)이 default: 1e-04인데 이보다 작은 경우에는 정수해를 찾은 것으로 봅니다.
    EpGap 파라메타를 0.1 정도로 큰 값을 주거나, 결과를 IloRound()하여 사용하시기 바랍니다.
    참고로 EpGap이 크면 풀이 시간이 길어 질 수 있습니다.
    아이콘삭제
  • 유환주2009-06-13
    EpGap 파라메타를 큰 값을 주라는 것은 틀린 답변 입니다.
    EpGap 이내의 실수값은 정수로 취급하는 것이 바른 방법입니다.
    아이콘삭제

댓글 입력