2016-06-06 4 views
0

CPLEX MATLAB API을 사용하는 선형 제한 조건에서 매우 큰 2 진 2 차 프로그래밍 문제를 최소화하려고합니다. 그러나 2 차 함수 f = x'Qx는 매우 조밀 한 행렬 Q를 가지고 있습니다. Q를 매우 희소한 행렬 U와 A로 다시 쓸 수 있습니다. Q : U =Cplex가 Q에 대한 입력으로 두 개의 희소 행렬을 사용할 수 있습니까

따라서 이러한 행렬을 CPLEX에 전달할 수있는 방법이 있습니까? 전체 행렬 Q (저장하기에는 너무 큽니다)?

+0

C 호출 가능 라이브러리 및 [CPXXcopyquad] (http://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.3/ilog.odms.cplex.help/refcallablelibrary/qpapi/copyquad.html)를 사용하고 있습니까? 그렇다면, 그 함수는 이미 q 매트릭스 (qmatbeg, qmatcnt, qmatind, qmatval을 통해)의 희박한 표현을 취합니다 .... 아직 시도해 보셨습니까? 어떤 오류가 발생하고 있습니까? – rkersh

+0

matlab 인터페이스를 사용하고 있습니다. – Yuki

답변

0

아니요, MATLAB API에서는 불가능합니다. 두 가지 MATLAB API가 있습니다 : CPLEX for MATLAB Toolbox와 Cplex 클래스. 각각의 해당 기능/필드는 cplexmiqpCplex.Model.Q입니다. 둘 다 당신이 원하는 것을 정확하게 할 수는 없습니다.

그러나 MATLAB API는 Q 행렬에 대해 sparse matrix 하나만 허용합니다 (MATLAB API programming tips 섹션 참조). 스파 스 매트릭스를 사용하여,

cplex.Model.Q = [-33  6  0 0; 
    6 -22 11.5 0; 
    0 11.5 -11 0; 
    0  0  0 0]; 

나 :

예를 들어,이 두 가지 예는 교환 할 수있다

cplex.Model.Q = sparse([1, 1, 2, 2, 2, 3, 3], [1, 2, 1, 2, 3, 2, 3], [-33, 6, 6, -22, 11.5, 11.5, -11], 4, 4) 

이 더 명시 적입니다 다른 API의 (예를 들어, C 호출 가능 라이브러리, C++ , 파이썬 등). 관심이 있다면, CPLEX와 함께 제공되는 예제는 어떻게 수행되는지 보여줍니다.

+0

저는 MATLAB 전문가가 아니므로 MATLAB에서 원시 스파 스 행렬을 사용하는 방법을 알지 못했고 CPLEX가이를 받아 들였습니다. 내 대답에 대해 적절한 수정을했습니다. 그 점 때문에 내가 혼란에 빠지면 죄송합니다. – rkersh