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

고객지원

기술문의

MIP 문제 실행시 최적해가 있는데도 unbounded라고 나오네요

  • 이승원
  • 2007.11.12
  • 조회수 2,095
안녕하세요?
저는 국방대학교 석사과정 학생입니다.
ILOG OPL 4.0으로 첨부된 MIP 문제를 간단한 예제를
입력하여 실행시켜보는데 답이 잘 안나오네요.

혹시, 코딩을 잘못한건 아닌지 걱정도 되고요.
한번 확인 좀 부탁드립니다.
(논문관련된 거라서 바쁘시겠지만, 빠른 답변 해주시면 감사드리겠습니다.)
다운로드아이콘최적화 모형.hwp

댓글 9

  • 이승원2007-11-12
    확인 부탁드립니다.
  • 유환주2007-11-12
    float M = 1/0;
    위의 선언 대신에 아래와 같이 바꾸어 보세요.
    float M = 1000;
    .
    Big M은 관련변수가 가질 수 있는 최대값보다 크면서 작으면 작을수록 좋습니다.
    .
    실행결과는 아래와 같습니다.
    Final solution with objective = 23:
    remaining = [7 5 2 4];
    batchTime = [0 0 6];
    k = [0 0 1];
    gap = [0 0 1];
    position = [[1 0 0 0] [0 1 0 0] [0 0 1 0]]

    최신 버젼인 OPL5.5를 사용하시면 속도도 빠르고 Multi-Solution도 가져올 수 있습니다.
    참고하시기 바랍니다.
  • 이승원2007-11-12
    우선, 주말내내 고민하던 문제를 단번에 해결해 주셔서 감사드립니다.

    ILOG 성능의 일부분이라도 사용해 보고자 하는 초보자 입장에서 다음의 세가지 질문을 드립니다.

    1. 위의 프로그램에서 pTime[]의 각 값을 일정범위(예:[5,15])d에서 random하게 발생시키는 방법
    2. 프로그램 실행시간 확인 방법(cpu time)
    3. 프로젝트 화일(*.prj)에 *.mod 화일과 *.dat 화일 추가는 다시 열때마다 해주어야 하는지...(실행하고, 저장한 뒤에 나중에 다시 열어보면 *.prj에 *.mod, *.dat 화일이 붙어있질 않네요)

    답변 부탁드립니다.
  • 유환주2007-11-12
    1. pTime[]을 random하게 발생시키는 방법
    [답변]: 다음처럼 해 보세요 (첨부파일참조) => int pTime[i in jobs]= rand(200)%5+1;
    .
    2. 프로그램 실행시간 확인 방법(cpu time)
    [답변]: OPL Studio에서 "Engine Log" 탭에 풀이과정의 소요시간이 자세히 나와 있습니다.
    .
    3. 프로젝트 화일(*.prj)에 *.mod 화일과 *.dat 화일 추가는 다시 열 때 마다 해주어야 하는지...
    [답변]: 프로젝트 설정이 제대로 저장이 되지 않았습니다. 혹시, 저장경로에 한글 디렉토리가 있으면 없는 곳으로 옮겨 보세요.
  • 이승원2007-11-13
    빠쁘신 중에도 빠른 답변 감사드립니다.

    설명해 주신 내용 중 random을 실행시켜 봤는데
    같은 숫자만 나와서요..
    (전부 4가 나오네요)

    그리고 rand(200)%5+1 로 하면 원래 범위는 어떻게 되는지요?

    다시 부탁드립니다.
  • 유환주2007-11-13
    현재 저희가 사용하는 버젼은 OPL5.5 입니다.
    혹시 버젼이 달라서 설명의 내용이 약간 다를 수 있으니 메뉴얼을 참고하시기 바랍니다.
    .
    rand(200)%5+1 --> 0~199 사이의 난수를 생성해서 5로 나눈 나머지에 1을 더했습니다.
    5가 최대값이고 같은 값이 나올 확율을 줄이려면 200이라는 수치를 조정해 보시기 바랍니다.
    "Console" 탭에 생성된 수치를 출력하도록 DISPLAY 루틴을 추가해 두었습니다.
  • 이승원2007-11-13
    int pTime[i in jobs]=rand(200)%5+1

    이렇게 하면 jobs의 숫자만큼 서로 다른 난수가 발생하는지요?
    200을 늘려봐도 계속 같은 수가 나오는 걸 보면 난수가 하나만 생성된 것도 같은데,,,

    너무 몰라서 본의 아니게 자꾸 폐를 끼치네요..
  • 유환주2007-11-13
    int pTime[i in jobs]=rand(200);
    으로만 해 보세요. 같은 값만 계속해서 나오는지...
    제 장비에서는 문제가 없습니다.
    저하고 버젼이 달라서 그럴 수도 있고...
    OPL4.0의 버그 이거나, 사용법이 다를 수도 있겠습니다 (확인불가)
  • 이승원2007-11-13
    계속 되는 질문에도 항상 답변주셔서 감사드립니다.

    int pTime[jpbs]=rand(200);
    이렇게만 하니까 난수가 발생되네요.
    말씀해 주신대로 OPL 4.0의 한계인거 같습니다.

    제가 원하는 구간을 발생시키기 위해 좀더 고민해 보겠습니다.

댓글 입력