조건부 제약 조건을 CPLEX에 대해 COPERT C ++로 변환하는 방법은 무엇입니까?
-
21-12-2019 - |
문제
선형 프로그래밍을 위해 OPL을 사용하여 IBM ILOG CPLEX Optimization Studio를 사용하여 모델을 썼습니다.그러나 이제는 콘서트 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;
.
특히 조건부 제약 조건을 작성하는 방법을 알아야합니다. 사전에 감사드립니다.
해결책
와 같은 것을 시도하십시오.
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 ++ 예제 중 일부를보십시오.
이렇게하면 조금
가 도움이됩니다.제휴하지 않습니다 StackOverflow