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

고객지원

기술문의

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

  • 이승원
  • 2007.11.12
  • 조회수 1,906
안녕하세요?
저는 국방대학교 석사과정 학생입니다.
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의 한계인거 같습니다.

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

댓글 입력