C++에서 IBM ILOG CPLEX 솔버를 사용하여 정수 선형 프로그램 (ILP)을 풀려고합니다. 솔버는 문제가 실행 불가능하며 위반 된 제약 조건의 인덱스를 지적합니다. 제 질문은 C++에서이 제약 조건을 식별하고 분석하는 것과 관련이 있습니다.CPLEX C++ 인터페이스 : 위반 된 제약 조건의 색인을 얻는 방법?
제약 조건을 분석하는 수동 방법은 함수 extractModel
을 사용하여 문제를 텍스트 파일로 내 보낸 다음이 파일에서 위반 된 제약 조건을 조회하는 것입니다.
가급적이면 C++에서 위반 된 제약 조건의 인덱스를 얻고 가능한 한이 충돌에 대한 많은 정보를 얻고 싶습니다.
현재 충돌 해결사를 사용하고 있지만 유용한 정보가 없습니다. 특히, 내가 모델에 추가 한 모든 제약 중 IloRangeArray
을 유지하고이 배열에 refineConflict
을 호출 한 다음 함수 getConflict
을 사용하여 위반 된 제약 조건을 쿼리합니다. 결과적으로 내가 추가 한 모든 제약 조건이 위반되고 제약 조건이 위반되는 것으로 입증되지 않을 수 있습니다.
오류 메시지에보고 된 한 가지 제약 조건의 인덱스에 액세스 할 수있는 방법은 문제가 실행 불가능하다는 것입니까?
또한 충돌 인식기를 잘못 사용하고 있습니까? 예 : 내가 별도의 배열에서 모델에 추가하는 제약 조건의 사본을 만들 때 잘못된 것을하고 있습니까? (Cplex의 특정 클래스의 복사 생성자 및 대입 연산자는 이해할 수없는 비표준 동작을하는 것 같습니다.)
도움이 되었습니까?
나는 그것이 오래 전에 알고 있지만 위반 된 제약 조건 목록을 얻는 방법을 찾았습니까? 나는 같은 문제에 붙어있다. 감사! –