안녕하세요, C++와의 concert를 통해 문제를 풀던 중 다음과 같은 오류 메시지를 출력하게 되었습니다. (concert exception :iloalgorithm cannot extract extractables 54,44,37) 이 오류가 무슨 의미이고 왜 발생하는지 알고 싶습니다. 코드는 첨부파일에 첨부해드립니다.
example3.cpp
댓글 3
이병기2012-11-14
안녕하세요. KSTEC 이병기입니다.
이러한 오류는 작성한 모델(결정변수, 목적식, 제약식)에서 오류가 있어서 적절한 CPLEX algorithm에 필요한 객체를 만들 수 없어서 Solve를 할 수 없는 경우에 발생됩니다.
첨부하신 CPP 코드를 일단 보았는데 2가지의 문제점이 보입니다. 1. 목적식에 3차식의 형태(결정변수 3개의 곱)가 포함되어 있습니다. 2. equality가 없이 less than으로만 제한된 제약식이 있습니다.
이러한 형태는 LP 또는 QP의 문제가 아니기 때문에 CPLEX에서 풀 수 있는 방법이 없습니다. 풀고자 하는 수리모형이 LP 형태인지 먼저 확인해 보시는 것이 좋을 것 같습니다.
이상입니다. 감사합니다.
김도균2012-11-14
먼저 좋은 답변 감사합니다.
그부분에 대해 제약식을 다르게 하여 동일한 오류는 발생하지 않습니다.
(코드는 첨부파일대로 수정하였구요..)
다만 결과창이 실행되다가 다음과 같은 출력값을 가지게 됩니다.
Tried aggregator 1 time. MIQP presolve eliminated 5 rows and 1 columns. Number of nonzeros in lower triangle of Q = 2 Using Approximate Minimum Degree ordering Total time for automatic ordering = 0.01 sec Summary statistics for factor of Q : Rows in Factor = 4 Integer space required = 4 Total non-zeros in factor = 6 Total FP ops to factor = 10 Presolve time = 0.01 sec
Concert exception caught : CPLEX Error 5002 : Q in objective is not positive semi-definite.
어떤 오류이고, 어떤 방향으로 수정해가야 할 지에 대해
자문을 부탁드립니다.
감사합니다
이병기2012-11-15
안녕하세요. KSTEC 이병기입니다.
주어진 문제가 MIQP 형태의 문제로 인식되어 풀이를 시도하였으나, 목적식이 풀이 가능한 형태가 아니기 때문에 에러를 발생시킨 것으로 보입니다.
기본적으로 QP 문제는 결정변수의 제곱 형태가 일반적이며, Minimize 문제의 경우에는 그 함수 모양이 Convex 형태로 나타나야 문제를 풀 수 있습니다.
QP 문제에 대한 내용은 Manual의 "Identifying a quadratically constrained program" 부분을 참고해 보시기 바랍니다.