1. 주석처리된 기존 목적식은 min max에 대한 목적식을 표현하고 있지 않음(sum으로 인한 단일 값에 대한 minimize 형태) => 아래와 같이이 표현가능합니다. ex. min-max 목적식 형태 : minimize max(i in I) (sum(j in J) x[i][j]);
목적식과 제약식을 분리한 형태 : dvar float t; minimize t; subject to { forall(i in I) (t - sum(j in J) x[i][j]) >= 0; }
2. forall이나 sum 함수에서 s index를 사용하고 있으나, s index에 해당하는 변수가 없음 => 사용하지 않는 불필요 index를 제거해야 합니다.
3. 주석처리되지 않는 minimize 구문(minimize t[i][j])에 i와 j index를 사용하나, index를 지정하는 부분이 없음 => 최소화하고자 하는 값이 어떤 형태인지 짐작하기 어렵습니다. 주석처리된 목적식으로는 어떤 값들 중에서 최대값을 최소화하는지를 파악할 수 없습니다. mimize t 또는 minize sum(i in I, j in J) t[i][j] 형태가 가능합니다.
4. 결정변수 t[N][N]은 boolean형이나, sum으로 된 수식은 float*boolean임 따라서, 1 >= 1200, 0 >= 3 과 같은 경우에는 제약 위반이 발생하므로, 0이 아닌 거리에 해당되는 결정변수 x는 모두 0으로 결정될 것입니다. => 역시 목적식의 정확한 의미에 따라 dvar float t[I][J] 또는 dvar float t 형태가 가능해 보입니다.
5. 제약식에서 forall로 각 제약식을 생성하는 듯 하지만, sum으로 i,j index에 대하여 전체 합을 하고 있음 예로 아래와 같은 제약은 sum으로 i,j index에 대하여 모두 합한 값이 R1보다 작거나 같다라는 의미이므로 forall의 i,j index에 대한 의미가 없는 상태입니다. // 거리제한 forall(i,j in N) sum(i,j in N) x[i][j][1] <= R1 ; => forall(i,j in N) x[j][j][1] <= R1 또는 sum(i,j in N) x[[i][j][1] <= R1 형태가 가능합니다. 위 두 식은 의미하는 바가 완전히 다릅니다. 정확한 수식을 표현하는 형태를 생각하여야 합니다.
전체적으로 수리모형을 cplex opl로 표현하는 부분에서 많은 오류가 있습니다. cplex에 포함된 많은 예제를 먼저 참고하셔서 표현법을 이해하시는 것이 좋겠습니다.