2017-03-10 11 views
0

CPLEX에서 MILP 문제를 설정하려고합니다. 모델은 "시스템 구성"파일의 형태로 입력에서 생성되며 수십 개의 제약 조건과 수천 개의 의사 결정 변수가 생성되어야하므로 CPLEX 내에서 자동으로 생성되어야합니다.CPLEX에서 MILP 모델 자동 생성

나는 여러 가지 아이디어를 염두에두고있다 : 1) 제약 조건을 A * x = b 형식으로 행렬/벡터 제약 조건으로 정의한다. 입력으로부터 해당 행렬과 벡터를 정의한다. 그러나 CPLEX에서이 작업을 수행 할 수있는 기회를 찾지 못했습니다.

2) IloLinearNumExpr으로 선형 제약 조건을 구축 할 가능성이 있음을 알았지 만 이는 JAVA에서만 가능합니다. C++ 인터페이스에서 클래스를 찾을 수 없습니다.

3) 마지막으로 모델을 LP 파일에 자동으로 작성하고 가져올 수도 있습니다. Platform Independent이고 x를 유일한 변수 이름으로 사용하는 CPLEX에서 내 보낸 모델 대신 더 읽기 쉬운 모델을 제공하기 때문에이 절차를 권장 하시겠습니까?

안부, 빈

+0

CPLEX API 중 하나를 사용하는 것이 좋습니다. [here] (https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/homepages/CPLEX.html) 문서를 참조하십시오. LP 파일 형식은 디버깅 (모델의 사람이 읽을 수있는 표현을 얻는 것)에 매우 유용하지만 프로덕션에서는 이상적이지 않습니다. 부동 소수점을 저장할 때 정밀도가 떨어질 수 있습니다. – rkersh

답변

2

은 API를 통해 작업을 수행합니다. 많은 언어에 대한 API가 있습니다. 내 PC의 CPLEX 예제 폴더에는 C, C++, C# Java, Python 및 VB의 표준 예제가 있습니다. 문서의 해당 부분을 읽어보십시오.

+0

그러나 읽을 수있는 방식으로 모델을 인쇄하는 방법이 있습니까? "cout << model"을 사용하면 ILO 변수를 구성하는 모델의 출력이되고 C++ 코드에서 지정한 이름은 출력되지 않습니다. 이는 모델을 내보내려고 할 때도 발생합니다. 이것은 내 코드를 디버깅하려고 할 때 다소 실망 스럽다. –

+0

실제로 변수 이름을 지정하고 있습니까? 변수의 이름을 명시 적으로 설정하면 예를 들어 변수 이름에 해당 변수가 나타납니다. 내 보낸 LP 파일. 명시 적으로 명명 된 제약 조건에 대해서도 마찬가지입니다. 메모리에서 IloNumVar.setName (char * name)과 같은 것을 사용해야한다고 생각합니다. – TimChippingtonDerrick

+0

고마워요! 변수의 이름을 지정하지 않았습니다. 변수의 이름을 지정하면 결과가 꽤 좋아 보입니다. –