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

고객지원

기술문의

C언어와 관련하여 질문드립니다.

  • 이지혜
  • 2012.11.21
  • 조회수 1,937
1) 매뉴얼에서
C언어와 관련된 부분을 참고하려면
c++ 부분을 보면 되나요? c와 c++은 다른부분이 많아 C언어를 위한 매뉴얼 부분이
있을 것 같은데 제가 가진 매뉴얼에는 보이질 않아 질문드립니다.
혹시 파일을 첨부해주시면 정말 감사드리겠습니다.

2)interactive optimizer
Collable Library
매뉴얼을 봐도 이 두가지의 개념이 잘 서질 않습니다..


3) interactive optimizer tutorial부분을 보면 도스창에 typing을 하는데
도스창에서와 cplex 자체에서의 모델구축은 각각 별개인지도 궁금합니다.
너무 기본적인 질문을 해서 죄송합니다.
상세한 답변 꼭 부탁드리겠습니다.

이지혜 드림.

댓글 1

  • 이병기2012-11-23
    안녕하세요.
    KSTEC 이병기입니다.

    1. C에 대한 예제는 아래 폴더를 참고하시면 됩니다.
    C:\Users\Byungki\Documents\IBM\ILOG\CPLEX_Studio124\cplex\examples\src\c

    C와 C++은 구현상에 차이점이 있습니다.
    C++은 Concert 객체(최적화 구현에 필요한 객체를 쓰기 편하도록 미리 Define 된 객체 및 방법들로 주로 Ilo로 시작하는 Class)를 이용하여 프로그래밍하게 되는데,
    C에서는 이 Concert 객체들을 이용하실 수 없고, 보다 Callable Library를 통해 프로그래밍이 이루어집니다.
    동일한 문제를 풀기 위한 예제인 mipex1.c와 ilomipex1.cpp 코드를 비교해 보시면 이러한 Concert 객체들의 재사용 여부가 바로 프로그래밍의 분량 차이까지 발생시키는 것을 보실 수 있습니다.
    따라서 현재는 대부분 C++을 이용하여 구현하고 있습니다.

    2. Interactive Optimizer는 도스창에서 커맨드를 직접 입력하면서 CPLEX를 이용하는 방법입니다.
    cplex.exe 실행후 결정변수, 목적식, 제약식, 풀이 등을 커맨드로 직접 입력하거나 확장자가 lp인 파일을 load하여 solve하는데 이용됩니다.
    이 interactive optimizer에서는 하나하나 입력하거나 lp 파일을 미리 만들어서 이용하기 때문에, 복잡한 수식이나 다양한 data를 이용하기 어렵고 일회성적인 측면이 있습니다.
    Callable library는 C를 이용하여 프로그래밍할 경우, CPLEX 엔진을 이용하기 위한 API입니다.
    프로그램을 하면 다양한 data를 이용하여 실험하거나 원하는 형태로 결과를 저장하고 검증하는데 용이하기 때문에, Interactive Optimizer보다는 프로그래밍을 하여 이용하는 것이 좋습니다.
    이 프로그램을 구현하는 방법은 C, C++ 등 여러 방법이 있는데, C의 경우에는 Callable Library 라는 CPLEX 엔진을 이용하기 위해 정의된 API를 사용하고,
    C++의 경우에는 Concert 객체를 이용해서 프로그래밍한다고 보시면 될 것 같습니다.

    3. Interactive Optimizer를 이용한다면, 모두 다 typing 하여 입력하여야 합니다. 흔히 말하는 풀고자 하는 최적화 문제를 그대로 입력해야 한다고 보시면 됩니다.
    아래와 같은 확장자가 lp인 파일을 보시면 Data가 모두 나타난 최적화 수식을 입력하는데, 이렇게 입력된 수식을 optimize하게 되면 cplex 엔진이 풀게 됩니다.
    따라서 별도의 CPLEX 모델링(ILO 객체를 구현한다던지)은 없습니다. (입력된 부분에 모든 최적화 문제의 내용이 이미 포함되어 있습니다.)

    \Problem name: prod.lp

    Maximize
    obj: - 10 make(1,1) - 10 make(1,2) - 10 make(1,3) - 10 make(1,4)
    - 11 make(2,1) - 11 make(2,2) - 11 make(2,3) - 11 make(2,4)
    + 25 sell(1,1) + 26 sell(1,2) + 27 sell(1,3) + 27 sell(1,4)
    + 30 sell(2,1) + 35 sell(2,2) + 37 sell(2,3) + 39 sell(2,4)
    Subject To
    c1: 0.005 make(1,1) + 0.00714285714285714 make(2,1) <= 40
    c2: 0.005 make(1,2) + 0.00714285714285714 make(2,2) <= 40
    c3: 0.005 make(1,3) + 0.00714285714285714 make(2,3) <= 32
    c4: 0.005 make(1,4) + 0.00714285714285714 make(2,4) <= 40
    c5: make(1,1) - inv(1,1) - sell(1,1) = -10
    c6: make(1,2) + inv(1,1) - inv(1,2) - sell(1,2) = 0
    c7: make(1,3) + inv(1,2) - inv(1,3) - sell(1,3) = 0
    c8: make(1,4) + inv(1,3) - inv(1,4) - sell(1,4) = 0
    c9: make(2,1) - inv(2,1) - sell(2,1) = 0
    c10: make(2,2) + inv(2,1) - inv(2,2) - sell(2,2) = 0
    c11: make(2,3) + inv(2,2) - inv(2,3) - sell(2,3) = 0
    c12: make(2,4) + inv(2,3) - inv(2,4) - sell(2,4) = 0
    Bounds
    0 <= sell(1,1) <= 6000
    0 <= sell(1,2) <= 6000
    0 <= sell(1,3) <= 4000
    0 <= sell(1,4) <= 6500
    0 <= sell(2,1) <= 4000
    0 <= sell(2,2) <= 2500
    0 <= sell(2,3) <= 3500
    0 <= sell(2,4) <= 4200
    End

    이상입니다.
    감사합니다.
    아이콘삭제

댓글 입력