모든 정수 변수가 바이너리 인 CPLEX의 혼합 정수 문제에 대한 많은 솔루션을 생성하려고합니다. 문제는 대략 2500 개의 선형 제약이있는 약 1000 개의 연속 변수와 1000 개의 2 진 변수를 지표로 사용합니다.CPLEX에서 이진 변수의 다양성 극대화 최적의 제약 조건을 가진 Java API의 채우기 메소드
내 목적 함수는 표시기 변수의 최소화이며 이진 변수에 대해 선택된 값과 관련하여 서로 다른 최적의 솔루션을 많이 생성하려고합니다. 내 현재 코드로 요약 할 수있다 -
IloCplex cplexModel = new IloCplex();
---build the problem, set objective---
cplexModel.setParam(IloCplex.IntParam.SolnPoolCapacity, N);
cplexModel.setParam(IloCplex.IntParam.PopulateLim, K*N);
cplexModel.setParam(IloCplex.IntParam.SolnPoolReplace, 2);
cplexModel.setParam(IloCplex.DoubleParam.SolnPoolGap, D);
cplexModel.setParam(IloCplex.IntParam.MIPEmphasis, 0);
cplexModel.populate();
N, K와 D가 원하는 솔루션의 수에 대한 단축 이름은 어디에서 해결하는 동안, 나는 기꺼이하는 계수 생성 솔루션의 수를 확장하고, 상대적인 갭은 각각 최적의 최소화로부터 받아 들일 용의가 있습니다. 또한 문제와 관련이없는 CPLEX 매개 변수를 여러 개 사용합니다.
내 문제는 솔루션의 다양성이 연속 변수를 비롯한 모든 변수에서 측정되는 반면, 필자는 이진 변수 값이 다른 솔루션에만 관심이 있다는 점입니다. 즉, 내가 얻는 결과의 대부분은 이진 변수에 대해 동일한 값을 공유하며 (이진 값에만 관심이 있으므로) 나에게는 구별 할 수 없다는 것을 의미합니다. 나의 현재 해결책은 설정함으로써 인 - T (50)는 통상적 인 후 (희망) 이진 변수 '값이 서로 다를 용액 풀 N 결과와 선택
cplexModel.setParam(IloCplex.IntParam.SolnPoolCapacity, T*N);
cplexModel.setParam(IloCplex.IntParam.PopulateLim, T*K*N);
.
각 솔루션 및 레퍼런스 솔루션 사이 대신, 나는 이진 변수 다양성 계산을 제한하는 방법으로 diversity filters을 확인했지만, 나는 솔루션 중 다양성 을 적용하는 방법을 볼 수 없습니다 . 그 외에, 내가 할 수있는 일에 관해서는 단서가 없다.
도움을 주시면 감사하겠습니다. 또한, 이것이 내 첫 번째 질문이기 때문에 잘못 포맷하면 사과드립니다.
도와 주셔서 감사합니다. 한 번에 하나씩 반복적으로 솔루션을 생성하는 것이 나의 마지막 수단입니다. 좀 더 나은 해결책이있을지라도 희망을 가지고 있습니다. 아마도 콜백을 포함하고있을 것입니다. (저는 CPLEX 문서에서 그들과 경험이 없으며 명백한 침전을 발견하지 못했습니다.) – Ariel