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

고객지원

기술문의

ILOG OPL 관련문의

  • 강경환
  • 2004.11.16
  • 조회수 1,745
안녕하세요

OPL에서 다음과 같은 제약을 추가할려고 하는데, 잘 되지 않네요 도움바랍니다.

x[i]=1이고 y[i]=1이면
z[i]=1이다.

all x[i], y[i], z[i]는 0 or 1

그냥 LP formulation 하게되면 아마 이런식이 될것같은데요(Min)
x[i]+y[i]-1<=2*z[i];

그런데 이와같이 하면, feasible solution은 나오는데, 계산시간이 너무
오래걸립니다.

그래서 OPL의 if, then, endif; 를 사용했거든요.
그런데 if 다음에 decision variable이 들어가면 에러가 나오네요

즉 제가 한 코드는
forall( i in 1.. nbtime) ------- 1
ifx[i]=1 & y[i]=1 -------- 2
then z[i]=1 -------- 3
endif;

에러가 나오는 부분이 2번식이거든요. 즉 if 다음에는 index는 올 수 있어도 Decision var은 올 수 없을것 같다는 생각이네요.
빠른시간안에 서두에서 제시한 제약을 반영할 수 있는 다른 방법은 없는지요?

감사합니다.


댓글 3

  • 유환주2004-11-18
    보충설명:

    x[i]+y[i]-1 <= 2*z[i] 를 수정해 주는 것이 더욱 좋겠습니다.

    z에 2를 곱하지 마세요. 2를 계수로 주면 푸는 시간이 길어질 수도 있습니다.
    아래와 같이 2개의 식으로 하는 것이 맞습니다.
    목적식에서 z를 minimize 한다면 2번식은 필요가 없습니다.

    1) x[i] + y[i] - 1 <= z[i];
    2) z[i] <= x[i] + y[i];

    if 다음에 변수를 쓰는 문제는 ILOG Concert에서는 지원이 됩니다.
    그렇지만 아마 OPL 현재 버젼에서는 안되는 것 같습니다.
    다음 버젼은 Concert에서와 같이 가능하리라고 생각합니다.



    아이콘삭제
  • 강경환2004-11-19
    바쁘신데 불구하고 도움주셔서 감사합니다.

    말씀하신대로 한번 수정해보겠습니다.

    아이콘삭제
  • 김태현2004-11-17
    해당 제약을 잘 표현 하셨네요..

    x[i]+y[i]-1<=2*z[i];

    위 제약식으로 표현하면 문제 풀이시 시간을 많이 소요로 하는 제약이 아닙니다.

    제가 보기엔 현재 풀고 계신 문제 사이즈가 큰게 아닌가 싶군요...

    다른 제약때문에 그런것일수도 있으니...

    간략한 소스를 보내주시면 확인해 보도록 하겠습니다...


    아이콘삭제

댓글 입력