2014-04-13 2 views
1

선형 프로그래밍을 위해 OPL을 사용하여 IBM ILOG Cplex optimization Studio로 모델을 작성했습니다. 하지만 지금은 콘서트 C++을 사용하여 같은 모델을 작성해야합니다. 하지만 내 제약 조건을 변환 할 수 없습니다. 내 제약조건부 제약 조건을 Cplex 용 콘서트 C++로 변환하는 방법?

하나는 다음과 같습니다 :

forall(i in Nodes) 
      edgeSum[i]:     
       if(i==0) 
       sum (j in Ein[0])x[<j,i>] - sum (j in Eout[0])x[<i,j>] == -1; 
       else if (i>=1 && i<n/2) 
       sum (j in Ein[i])x[<j,i>] - sum (j in Eout[i])x[<i,j>] == 0;  
      else 
       sum (j in Ein[i])x[<j,i>] <= 1; 

는 특히 내가 조건의 제약을 작성하는 방법을 알아야합니다. 미리 감사드립니다.

답변

1

시도 뭔가

for (i=0; i<numNodes; i++) 
{ 
    if (i == 0) 
    { 
    IloExpr expr1(env); 
    for (j=0; j<numIn[0]; j++) 
     expr1 += x[EInIndex[0][j]]; 
    IloExpr expr2(env); 
     expr2 += x[EOutIndex[0][j]]; 
    model.add(expr1 - expr2 == -1); 
    } 
    else if ((i >= 1) && (i < n/2)) 
    { 
    // etc 
    } 
    else 
    { 
    // etc 
    } 
} 

처럼 그냥 메모리에서 이런 짓을, 그래서 문법은 아마 조금 엉망이되고, 나는 모든 경우의 모든 세부 사항을 작성하지 않은 - 그들은 할 -해야 유사한 구조를 가질 수있다. 또한 아마도 여러분의 인덱스를 엉망으로 만들었을 것입니다. C++ 코드에서 슬라이싱 접근법을 어떻게 리모델링하고 있는지 확신 할 수 없기 때문에, 이전에했던 것을 기반으로 조금 추측했습니다. 또한 저는 제약 조건을 언급하지 않았으며 쉽게 추가 할 수 있습니다. CPLEX와 함께 제공되는 C++ 예제를 살펴보십시오. FORALL :

희망이 나는 또한 같은 또 하나의 제약 조건이 약간에게 답 에 대한

+0

감사합니다 도움 (Cedges에서 ! I = 0) \t \t \t 연결 [] : \t \t \t (x [] == 1) => 합계 (부모 중 [i]) x [] == 1; 는 I는이 재 작성 : 대 는 (ⅰ = 1 나타내는 int i가 edgesize는 * 2) +1 (<; 내가 ++) \t {\t \t \t (부모 경우 [Cedges [(I)] [0]! = 0 && Cedges [(I)] [0]! = 0) { \t \t \t \t \t model.add (IloIfThen (ENV (X [인덱스 [Cedges [I] [0] [Cedges [I] [Cedges [i] [0]] == 1)))); \t \t} \t} 이 사용법의 정확성 여부를 알아야합니다. – Berkehan

+0

지금 확인 할 시간이 없지만 확인할 수있는 사항은 다음과 같습니다. – TimChippingtonDerrick

+0

지금 확인할 시간이 없지만 검사 할 수있는 일은 충분히 작은 간단한 인스턴스로 시작하는 것입니다 (1) 모델을 LP 파일 또는 이와 유사한 형태로 출력하고 의미가 있는지 확인하십시오. 즉, 구속 조건에 올바른 변수가 있습니다. 감각적 인 coeff가 있습니다. (2) 대답이 무엇인지 알고 있다면 작은 경우, (3) 잘 알고있는 문제가 있으면 고의적으로 모델을 깨뜨릴 수있는 추가 제한 조건을 추가하십시오. 따라서 응답에서 값이 0이어야한다는 것을 알고 있다면 제약 조건을 추가하여 강제로 1로 설정하십시오. – TimChippingtonDerrick

관련 문제